トップ «前の日記(2013-04-24) 最新 次の日記(2013-04-29)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|

2013-04-25 [iOS]耳コピ用AudioPlayer(その3)

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

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

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/ios/AudioPlayer - GitHub

_ 【Cocoa練習帳】

http://www.bitz.co.jp/weblog/
http://ameblo.jp/bitz/(ミラー・サイト)

トップ «前の日記(2013-04-24) 最新 次の日記(2013-04-29)» 編集