iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
アプリケーションとして完成させる為、あまり深く調べなかった事について、調査してみる。
曲の閲覧は、Musicアプリケーションを真似る事にした。画面下部のタブバーにプレイリストとアーティスト、曲、アルバムのボタンが並んでいて、それを選択すると対応したテーブルが表示される。
これは、iPodライブラリから曲情報を抽出する際に、対応したフィルタをかけて事になると予想されるが、MPMediaQueryクラスには、目的にあったメソッドが用意されている。
項目 | メソッド |
---|---|
プレイリスト | playlistsQuery |
アーティスト | artistsQuery |
曲 | songsQuery |
アルバム | albumsQuery |
アーティストの一覧を取得する場合は以下のとおり。
MPMediaQuery *artistsQuery = [MPMediaQuery artistsQuery];
NSArray *artistsArray = [artistsQuery collections];
for (MPMediaItemCollection *mediaItemCollection in artistsArray) {
MPMediaItem *mediaItem = [mediaItemCollection representativeItem];
NSURL *title = (NSURL*)[mediaItem valueForProperty:MPMediaItemPropertyArtist];
NSLog(@"mediaItem:%@", title);
}
曲の一覧を取得する場合は以下のとおり。
MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
NSArray *mediaItems = [songsQuery items];
for (MPMediaItem *mediaItem in mediaItems) {
NSString *title = (NSString*)[mediaItem valueForProperty:MPMediaItemPropertyTitle];
NSLog(@"mediaItem:%@", title);
}
アルバムの一覧を取得する場合は以下のとおり。
MPMediaQuery *albumsQuery = [MPMediaQuery albumsQuery];
NSArray *albumsArray = [albumsQuery collections];
for (MPMediaItemCollection *mediaItemCollection in albumsArray) {
MPMediaItem *mediaItem = [mediaItemCollection representativeItem];
NSURL *title = (NSURL*)[mediaItem valueForProperty:MPMediaItemPropertyAlbumTitle];
NSLog(@"mediaItem:%@", title);
}
ただし、プレイリストの一覧の取得方法がよく分からなかった。以下だと駄目みたい。
MPMediaQuery *playlistsQuery = [MPMediaQuery playlistsQuery];
NSArray *playlistsArray = [playlistsQuery collections];
for (MPMediaItemCollection *mediaItemCollection in playlistsArray) {
MPMediaItem *mediaItem = [mediaItemCollection representativeItem];
NSURL *title = (NSURL*)[mediaItem valueForProperty:MPMediaItemPropertyTitle];
NSLog(@"mediaItem:%@", title);
}
これが結果。
2013-04-25 23:50:33.531 AudioPlayer[21637:907] mediaItem:やくしまるえつこ みんなのクリスマスセッション - Dec 25, 2012
2013-04-25 23:50:33.543 AudioPlayer[21637:907] mediaItem:Age Of Consent
2013-04-25 23:50:33.548 AudioPlayer[21637:907] mediaItem:A Child's Christmas in Wales
2013-04-25 23:50:33.554 AudioPlayer[21637:907] mediaItem:Istanbul
2013-04-25 23:50:33.560 AudioPlayer[21637:907] mediaItem:Question Everything
2013-04-25 23:50:33.576 AudioPlayer[21637:907] mediaItem:Out of Control
2013-04-25 23:50:33.582 AudioPlayer[21637:907] mediaItem:サウンドストリート・アーカイブス - Mar 28, 2009
プロパティとしてMPMediaPlaylistPropertyNameを使い方法を紹介している方がいたが、上手くいかなかった。何故だ王。
サンプルコードをみると、この処理は時間がかかるので、GCDやブロックを使って、非同期に行っていた。