AVAudioPlayerを使用して音楽を再生するアプリを作った。曲のアップロードやダウンロード、コアデータへの書き込み、選択時に再生するように呼び出します。私が試した15の曲はすべて、iPhone Music Clientと自分のコンピュータの両方を使って正常に動作します。AudioPlayer iOSとm4a
ただし、そのうち3つはアプリで再生されません。具体的には、これらの15曲を任意の順序でアップロードし、Model.sqliteをクリアしてから、再びアプリにダウンロードして、3曲が再生されないようにすることができます。しかし、彼らは正しいタイトルとアーティストを持っています。
これを見ると、違いは、動作していないファイルが.m4aであることです。 AVAudioPlayerでその形式のファイルを再生するにはどうすればよいですか?
EDIT(「いただきました 『リコール』、どのようなURLあなたとAVAudioPlayerを初期化しますか?」?):ユーザーがアプリからアクセスできる歌を持つサーバーがあり
。検索するサブセットSを選択した後、アプリケーションはSをダウンロードし、NSManagedObjectContextを使用してCoreModelに書き込みます。各曲は、固有のIDとサブセットエンティティ(この場合はS)との関係を持つ別個のエンティティとして保存されます。
コンテキストを使用して正しい曲を取得するためにAppDelegateを使用して「呼び出す」と、データも返されます。私はそのようにようAVAudioPlayerを初期化します。
[[AVAudioPlayer alloc] initWithData:(NSData *)[currentSong valueForKey:@"data"] error:nil];
は...だから私はそれを書いた後、私は実際に(愚かな私を)エラーが何であるかをチェックしていないことに気づきました。サポートされていないファイルタイプとして返されるOSStatus error 1954115647
であることがわかりました。もう少しこれを見て、私はこれを見つけたiPhone: AVAudioPlayer unsupported file type。解決策は、最初に不良データをトリミングするか、URLの内容から初期化するかのいずれかとして提示されます。それをURLとしてフィードするためにコアモデルでデータが書き込まれる場所を見つけることは可能でしょうか?
EDIT:(。?ファイルを比較し、それらが異なる)
はい、彼らはあります。私は、アプリケーションによってアップロードされたサーバからサンプル.m4aファイルを取得し、それをiTunesにあるものと比較しています。私が見つけたのは、ファイルがオフセット229404(2906191バイトのうち)の前に途切れていて、それが20680001 A0000E21
で始まっていることです。 iTunesのバージョンでは、0028D83B 6D646174
はそれらのバイトの前にあります。それ以前には、大きなブロックの前に大きなデータブロックがあり、iTunesのエンコード情報が先行しています。最上部には、ファイルをM4Aとしてリストするエンコード情報があります。
はい、.m4aはiOSでサポートされており、すべてのファイルは通常の方法でiPhoneで再生できます。 – user592419