2013年6月22日土曜日

iOSでMediaQueryを使った楽曲の取得

今、iPhone向けのアプリを作成中なのです。
ちょっとしたポイントを自分用メモ。

・iPhone内の楽曲の取得について。
iPhone内に入っている楽曲の取得は、簡易に行う場合MPMediaPickerを使用します。
感覚としてはImagePickerの使い方に近く、あまり考える事無く、別Viewが出て来て、選択した楽曲を送り返してくれます。

楽曲は曲単位でユニークなIDが付けられています。
固有なIDはMPMediaItemPropertyPersistentIDを取得すれば得られます。

    MPMediaItem *mediaItem = [[collection items] objectAtIndex:0];

    NSString *songid = [mediaItem valueForProperty:MPMediaItemPropertyPersistentID];//本命。
そんでもって、IDから曲を呼ぶ方法なんですが、次の様な流れになります。
  • MPMediaPropertyPredicateに検索したいパラメーターを渡す。(この場合、MPMediaItemPropertyPersistentID)
  • ・MPMediaPropertyPredicateをaddFilterPredicate:の形で、MPMediaQuery に渡す。
  • ・そうすると条件に合ったQueryがMPMediaQueryに渡ってくるので、これを再生する。
という訳で以下の様になります。
NSString* preId = @"XXXXXXXXXXXX"; //MPMediaItemPropertyPersistentIDを何らかの形で入れる。
MPMediaPropertyPredicate *songFromId =[MPMediaPropertyPredicate predicateWithValue:preId forProperty:MPMediaItemPropertyPersistentID];
MPMediaQuery *songQuery=[[MPMediaQuery alloc]init];
[songQuery addFilterPredicate:songFromId];
[musicPlayer setQueueWithQuery:songQuery];
[musicPlayer play];
これで、指定した任意の楽曲を再生出来ると思います。
もっと効率がイイカンジのやり方(IDだからQueryで渡さんでも良くね?)とか思ってたんですが、このやり方だとAlbum単位での取得とかArtist単位での取得が容易です。
NSUserDefaultとかで保存しておくと、ID無いよって言われる可能性もあるんですが、その辺は未検証です。多分落ちる事はないかなあと。(一旦Queryに入れてるからね。)

ざっとこんな感じでした。さて仕事しよ。

0 件のコメント:

コメントを投稿