AVAudioPlayerでの作業中に奇妙な動作を観察しました
コードは次のとおりです。
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@",fileName]] error: &error];
ここでは、サーバーからファイルをダウンロードして、アプリケーションのキャッシュディレクトリに保存しました。
次のエラーが発生します:
Error in playing =
Domain = NSOSStatusErrorDomain
Code = -43
Description = Error Domain=NSOSStatusErrorDomain Code=-43 "The operation couldn’t be completed. (OSStatus error -43.)"
また、ファイルがその場所に存在することを確認しました。アプリケーションを再起動するたびに、曲の再生で同じエラーが発生していました。しばらくして、同じコードを実行しようとすると、プレーヤーはエラーなしで正常に動作します。
誰かがこのエラーを処理する方法を教えてもらえますか?
また、何が問題だったのか誰か説明してもらえますか?
SongCacheURLが有効であり、ファイルが使用可能であることを確認できたにもかかわらず、このコードで同じエラーが発生しました。
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:songCacheURL error:&error];
最初にファイルをNSData要素にロードし、次にそれを使用してAVAudioPlayerを初期化することで、次のように問題を修正できました。
NSData *songFile = [[NSData alloc] initWithContentsOfURL:songCacheURL options:NSDataReadingMappedIfSafe error:&error1 ];
self.audioPlayer = [[AVAudioPlayer alloc] initWithData:songFile error:&error2];
それが他の誰かの助けになることを願っています。
ロビン
AVAudioPlayerはHTTP経由のストリーミングをサポートしていません。代わりにAVPlayerを使用してみてください。
同様の問題がありました。結局のところ、ファイル名だけでURLを初期化し、バンドルリソースパスを省略していました。 URLの初期化は次のようになります。
NSURL *url= [NSBundle URLForResource: @"my_sound" withExtension:@"mp3"];
ローカルファイルベースのURLを使用しているときに、AVAudioPlayer
で同様の問題が発生しました。確立されているように、問題はファイル名が間違っていることでした。名前の先頭に空白があることに気づきませんでした。したがって、まず最初にURLを注意深くチェックしてください。
同じエラーが発生し、URLがゼロであるように見えました。 URLオブジェクトが!= nilであるかどうかを確認してください。たぶんあなたの道は間違っています。
同様の問題が発生しました。問題は、mp4ファイルのターゲットメンバーシップチェックボックスがオフになっていることでした。チェックすると、ファイルは完全に再生されました。
私も同じ問題を抱えていて、今それを解決しました。問題はmp3ファイルの名前にありました。コードではファイル名は「Yes.MP3」でしたが、ファイル名は「Yes.mp3」です。シミュレーターでアプリケーションを実行すると、(理由はわかりませんが)シミュレーターでは大文字と小文字が区別されないため、すべて問題ありません。デバイスで同じコードを実行している場合、この場合、このエラーが発生します。