AVAudioRecorderで録音してDocumentフォルダに記録し、AVAudioPlayerで再生しようとしています。問題点だけ要約したプロジェクトをGitHubに置きました。

https://github.com/ueda-keisuke/AVAudioPlayerTest

複雑なことに、シミュレータではこのコードは正しく動作します。しかし実機(iPad Air 2)ではDocumentフォルダ内のオーディオが次のエラーになり再生されません。

Error loading
file:///var/mobile/Containers/Data/Application/772E3C09-5D23-4153-A11B-125D00582759/Documentsaudio.m4a:
Error Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"

あるいは

Error loading
file:///var/mobile/Containers/Data/Application/93108627-9DBE-453E-8D93-746E65DA48EE/Documents/F32D2D55-1978-427F-AF79-4F042C8B51F5/87.m4a:
Error Domain=NSOSStatusErrorDomain Code=1685348671 "(null)"

問題点要約アプリの解説

ボタンが3つあります。

  1. Play audio recorded by simulator
    このボタンを押すとBundleにあるオーディオファイルを再生します(手を叩いた音が収録されています)。このオーディオファイルはシミュレータでこのプログラムを実行し、録音し、Documentフォルダから取り出してプロジェクトに登録しました。つまり録音自体は正常にできていると考えます。またAVAudioPlayerがこのファイルを再生できないわけではありません。

  2. Record
    押すと録音開始し、もう一度押すと録音を止めます。ファイルはDocumentフォルダに生成し、既存のファイルがある場合は上書きします。

  3. Play
    Documentフォルダに作ったオーディオを再生します。シミュレータでは録音した音が鳴りますが、実機ではエラーが出て音が鳴りません。

今までに調べたこと

  • エラーコード1685348671および2003334207について調べました。
  • "Domain=NSOSStatusErrorDomain Code=2003334207"でも調べました
  • Documentディレクトリの扱いについて調べました

いずれも情報はたくさん出てきますが、解決の役に立つものは見つかりませんでした。

  • Documentディレクトリにあるファイルのリストを取得して、ファイルが存在することは確認しました。

要約

  • AVAudioPlayerでDocumentフォルダに作成したファイルを実機で再生できない
  • シミュレータでは再生できる
  • シミュレータで録音したファイルをBundleに移動すれば実機でも再生できる

どなたか解決策をご存じの方がいらっしゃれば教えていただけると幸いです。よろしくお願いします。