[iOS]耳コピ用AudioPlayer(その3) | Cocoa練習帳

[iOS]耳コピ用AudioPlayer(その3)

アプリケーションとして完成させる為、あまり深く調べなかった事について、調査してみる。




曲の閲覧は、Musicアプリケーションを真似る事にした。画面下部のタブバーにプレイリストとアーティスト、曲、アルバムのボタンが並んでいて、それを選択すると対応したテーブルが表示される。

これは、iPodライブラリから曲情報を抽出する際に、対応したフィルタをかけて事になると予想されるが、MPMediaQueryクラスには、目的にあったメソッドが用意されている。













アーティストの一覧を取得する場合は以下のとおり。




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やブロックを使って、非同期に行っていた。




ソースコード
GitHubからどうぞ。

https://github.com/murakami/workbook/tree/master/ios/AudioPlayer - GitHub



関連情報
iPhone Core Audioプログラミング



【Cocoa練習帳】
http://www.bitz.co.jp/weblog/

http://ameblo.jp/bitz/(ミラー・サイト)
iPhone Core Audioプログラミング/ソフトバンククリエイティブ
¥4,200
Amazon.co.jp