2013-04-25 11 views
5

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としてリストするエンコード情報があります。

答えて

0

あなたのコーデックはiOSでサポートされていますか? AVAudioPlayerは、iOSでサポートされているフォーマットを再生する必要があります。http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/MultimediaPG/UsingAudio/UsingAudio.html#//apple_ref/doc/uid/TP40009767-CH2-SW6でサポートされているフォーマットのリストを読むことができます。

iTunesでこれらのファイルを手動でデバイスに追加してiPodで再生することをお勧めします。再生できない場合は、コードまたはSDKではなくフォーマットです。

+0

はい、.m4aはiOSでサポートされており、すべてのファイルは通常の方法でiPhoneで再生できます。 – user592419

0

あなたはそれらを再生する方法を思い出しています - m4a拡張子を持つ一時ファイルに書き込んでいますか?おそらくこのm4a拡張子が必要です。

+0

私はそれらをコアデータに書き込んでいます。一意のIDでキーを作成し、そのIDで再生するときにそれらを呼び出すことができます。 – user592419

+0

AVAudioPlayerを初期化するURLは何ですか? –

+0

質問などを反映するように編集されました。 – user592419

0

これは直接的な解決策ではありませんが、おそらくshouldn't be saving the blobs in Core Dataでしょう。ファイルをキャッシュされた場所に書き込み、ファイルパスをコアデータに保存します。これによりデータベースがより効率的に使用され、問題を回避するAVAudioPlayerに与えるローカルファイルパスが与えられます。

+0

また、Core Dataのオプションを使用して外部ストレージを使用している場合は、この回答に続く場所を見つけることができます:http://stackoverflow.com/questions/9801944/storing-blobs-in-external-location-using -built-in-coredata-optionしかし、それは特定のサイズ(現在1 MB)以上のオブジェクトにのみ適用されます – Don

+0

私はアプリをst私は、ローカルURLのdataLocationにデータを保存し、その文字列をcoremodelに保存します。これは通常の曲では機能しますが、m4aではまだ動作しません。私はこれを見つけました、http://stackoverflow.com/questions/10545658/m4a-raw-data-from-ipod-library-not-playing、これは同じ問題を説明しているようです。 exportsessionを実行すると、ヘッダー情報を含む大きなファイルが作成されますが、今はs3 putObjectが別の問題に遭遇しています。 – user592419

関連する問題