は、あなたが「音楽」の下の項目のみ(いないポッドキャストや着メロを)したいと仮定すると、このようなものは動作するはずです:
MPMediaQuery * query = [MPMediaQuery songsQuery];
NSArray * items = [query items];
NSPredicate * predicate = [NSPredicate predicateWithBlock:
^(id evaluatedObject, NSDictionary *bindings){
MPMediaItem * item = evaluatedObject;
NSNumber * duration = [item valueForProperty:MPMediaItemPropertyPlaybackDuration];
return [duration doubleValue] < 30;
}];
NSArray * filteredItems = [items filteredArrayUsingPredicate:predicate];
残念ながらMPMediaPropertyPredicate
ことはできません。私たちは "比較時間が30秒未満"(比較タイプは "EqualTo"と "Contains")でフィルタリングするので、上で手動で行います。
次に、AVAssetExportSession
を使用して目的のトラックを書き出す必要があります。 Local and Push Notification Programming Guideでサポートされているフォーマットの1つに変換する必要があります。固定ファイル名を使用することをお勧めします。作成したファイルを追跡するのが簡単です。
最後に、アプリケーションバンドルに書き込むことはできません。これはコード署名を無効にするためです(明らかに以前は可能でしたが、インストール時にのみ署名がチェックされる可能性があります)。ただし、の場合、../Library/Application Support/MyApp/MySound.mp4
のような相対パスを使用できます。
これは動作することが保証されていないため、アプリレビューに失敗する可能性があります。特に、
- パスが
../Library
で始まる保証はありません。相対パスを生成するアルゴリズムは、この回答の範囲を超えています。 (-[NSString stringByAppendingPathComponent:]
で動作しないため、絶対パスは機能しない可能性があります)
UILocalNotification.soundName
がパスを受け入れるという保証はありません。ドキュメントは単にアプリケーションのメインバンドル内のサウンドリソースのファイル名(拡張子を含む)を受け入れると言っています。
最後にチェックしたアプリバンドルには書き込みできません。 –
http://blog.tapsquare.com/post/803301658/ipod-library-accessこのリンクは、それが可能であるが、何かを得る方法がないと言っています –
あなたはまだあなたのアプリケーションバンドルに書き込むことができません。コードの署名を破る(そして、とにかくかなり悪い練習です)。ライブラリ、ドキュメント、および一時ディレクトリに書き込むことができます(また、これらのパスを取得する方法の例がたくさんあります)。しかし、これらのサウンドを通知から再生できるかどうかは不明です( '。/Library/Application Support/MyApp/MySound.mp4'など)、信頼性の高い動作が保証されていません。 Documentsディレクトリは「伝統的」ですが、iTunesのファイル共有によって公開されています。あなたはおそらく図書館に何かを求めています。 –