検索条件によるクエリの絞り込み

2010. 07. 27
クエリは全ての音楽アイテムを並べ替えして拾ってくるだけですので、検索条件を与えて絞り込みを行ってみます。

597

今回は特定のアーティスト名のピックアップを行ってみます。
(太字が追加した部分)

- (void)awakeFromNib {
    // スーパークラスによる初期化
    [super awakeFromNib];

    // アプリケーション自身で音楽再生を行う
    player = [MPMusicPlayerController applicationMusicPlayer];

    // アーティスト名順のクエリを生成
    MPMediaQuery *query = [MPMediaQuery artistsQuery];

    // コンソールにクエリを出力
    NSLog(@"アーティスト名順のクエリを生成");
    [self printMediaQuery:query];

    // 検索条件の生成
    MPMediaPropertyPredicate *pred;

    pred = [MPMediaPropertyPredicate predicateWithValue:@"絵理" forProperty:MPMediaItemPropertyArtist comparisonType:MPMediaPredicateComparisonContains];

    // 検索条件をクエリに追加
    [query addFilterPredicate:pred];

    // コンソールにクエリを出力
    NSLog(@"検索条件をクエリに追加");
    [self printMediaQuery:query];

    // クエリを音楽プレイヤにセット
    [player setQueueWithQuery:query];

    // コンソールにクエリを出力
    NSLog(@"クエリを音楽プレイヤにセット");
    [self printMediaQuery:query];

    // 音楽再生
    player.repeatMode = MPMusicRepeatModeAll;    // 全曲リピートに設定
    player.shuffleMode = MPMusicShuffleModeOff;    // シャッフル無しに設定
    [player play];    // 再生開始

    // 制御パネルの表側を貼り付ける
    [viewPlace addSubview:viewMainSide];

    // 現在再生中の曲の情報を画面に表示する
    [self updateView];

    // 通知センターのインスタンスを取得
    NSNotificationCenter *noteCenter = [NSNotificationCenter defaultCenter];

    // 再生曲が変化した時の通知先を登録
    [noteCenter addObserver:self selector:@selector(didItemChanged:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:player];

    // 通知の開始を指示
    [player beginGeneratingPlaybackNotifications];
}

598

ログは下記のようになります。
(比較し難いので頭の『Artist, Album, Title =』とアルバム名の『THE IDOLM@STER』は端折っています)

アーティスト名順のクエリを生成

たかはし智秋, RADIO 歌道場, そばにいるね
たかはし智秋, RADIO TOP×TOP! [Disc 1], BEST ROAD
たかはし智秋, RADIO VOCAL MASTER, destiny
たかはし智秋, RADIO 歌姫楽園, STYLISH QUEEN★
たかはし智秋, RADIO LONG TIME, sunshine
(中略)
萩原雪歩 (落合祐里香) & 四条貴音 (原由実), MASTER SPECIAL 04, shiny smile (REM@STER-B)
萩原雪歩 (落合祐里香), 菊地真 (平田宏美), BEST ALBUM ~MASTER OF MASTER~ [Disc 2], First Stage (M@STER VERSION)
萩原雪歩 (落合祐里香), 三浦あずさ (たかはし智秋), 水瀬伊織 (釘宮理恵), 秋月律子 (若林直美), 双海亜美 / 真美 (下田麻美), BEST ALBUM ~MASTER OF MASTER~ [Disc 1], サニー
萩原雪歩 (落合祐里香), 秋月律子 (若林直美), 高槻やよい (仁後真耶子), BEST ALBUM ~MASTER OF MASTER~ [Disc 2], My Best Friend (M@STER VERSION)
平田宏美, 今井麻美, たかはし智秋, RADIO 歌道場, ベルサイユのばら ~薔薇は美しく散る~

検索条件をクエリに追加

水谷絵理 (花澤香菜), DREAM SYMPHONY 01, クロスワード
水谷絵理 (花澤香菜), BEST OF 765+876=!! Vol. 01, プリコグ (M@STER VERSION)
水谷絵理 (花澤香菜), DREAM SYMPHONY 01, プリコグ (M@STER VERSION)
水谷絵理 (花澤香菜), DREAM SYMPHONY 01, "Hello!!" (M@STER VERSION)
水谷絵理 (花澤香菜), DREAM SYMPHONY 01, 思い出をありがとう (M@STER VERSION)
水谷絵理 (花澤香菜), DREAM SYMPHONY 01, 魔法をかけて! (M@STER VERSION)
日高愛 (戸松遥), 水谷絵理 (花澤香菜), 秋月涼 (三瓶由布子), BEST OF 765+876=!! Vol. 02, ハッピース
日高愛 (戸松遥), 水谷絵理 (花澤香菜), 秋月涼 (三瓶由布子), DREAM SYMPHONY 00 "HELLO!!", ハッピース
日高愛 (戸松遥), 水谷絵理 (花澤香菜), 秋月涼 (三瓶由布子), BEST OF 765+876=!! Vol. 02, "HELLO!!" (M@STER VERSION)
日高愛 (戸松遥), 水谷絵理 (花澤香菜), 秋月涼 (三瓶由布子), DREAM SYMPHONY 00 "HELLO!!", "HELLO!!" (M@STER VERSION)
如月千早 (今井麻美), 三浦あずさ (たかはし智秋), 水瀬伊織 (釘宮理恵), 双海亜美 / 真美 (下田麻美), 水谷絵理 (花澤香菜), BEST OF 765+876=!! Vol. 03, LOST

クエリを音楽プレイヤにセット

水谷絵理 (花澤香菜), DREAM SYMPHONY 01, クロスワード
日高愛 (戸松遥), 水谷絵理 (花澤香菜), 秋月涼 (三瓶由布子), BEST OF 765+876=!! Vol. 02, ハッピース
日高愛 (戸松遥), 水谷絵理 (花澤香菜), 秋月涼 (三瓶由布子), DREAM SYMPHONY 00 "HELLO!!", ハッピース
水谷絵理 (花澤香菜), BEST OF 765+876=!! Vol. 01, プリコグ (M@STER VERSION)
水谷絵理 (花澤香菜), DREAM SYMPHONY 01, プリコグ (M@STER VERSION)
水谷絵理 (花澤香菜), DREAM SYMPHONY 01, "Hello!!" (M@STER VERSION)
日高愛 (戸松遥), 水谷絵理 (花澤香菜), 秋月涼 (三瓶由布子), BEST OF 765+876=!! Vol. 02, "HELLO!!" (M@STER VERSION)
日高愛 (戸松遥), 水谷絵理 (花澤香菜), 秋月涼 (三瓶由布子), DREAM SYMPHONY 00 "HELLO!!", "HELLO!!" (M@STER VERSION)
如月千早 (今井麻美), 三浦あずさ (たかはし智秋), 水瀬伊織 (釘宮理恵), 双海亜美 / 真美 (下田麻美), 水谷絵理 (花澤香菜), BEST OF 765+876=!! Vol. 03, LOST
水谷絵理 (花澤香菜), DREAM SYMPHONY 01, 思い出をありがとう (M@STER VERSION)
水谷絵理 (花澤香菜), DREAM SYMPHONY 01, 魔法をかけて! (M@STER VERSION)

名前順のソートは、
・平仮名/カタカナ
・英字
・数字
・漢字
の順に行われます。

最初にアーティスト名順のクエリを生成し、アーティスト名『絵理』の部分一致(MPMediaPredicateComparisonContains)の条件をクエリに追加して絞り込みを行っています。

完全一致(MPMediaPredicateComparisonEqualTo)で絞り込みを行う際、例えば『水谷絵理 (花澤香菜)』とライブラリに登録されている場合、『水谷絵理 花澤香菜』と半角括弧を全角括弧にしたり『水谷絵理(花澤香菜)』と途中の半角スペースを抜いたりすると検索に引っかからないので注意が必要です。

ユーザに絞り込みをさせる場合には、表記揺れを考慮した工夫が必要になるかもしれません。

抽出された結果を音楽プレイヤにセットすると、曲名順にソートされます。


・predicateWithValue:forProperty:comparisonType:
(MPMediaPropertyPredicateクラス)

+ (MPMediaPropertyPredicate *)predicateWithValue:(id)value forProperty:(NSString *)property comparisonType:(MPMediaPredicateComparison)comparisonType

比較タイプを指定した、メディアプロパティ述語を生成して返します。

value:iPodライブラリのクエリで一致する、必要なプロパティ値を指定します。
例えば、propertyパラメータでMPMediaItemPropertyArtist定数を指定した場合、このパラメータはアーティスト名を含む文字列を指定します。

property:フィルタプロパティとも呼び、メディアプロパティ述語の構築に使用することができます。
MPMediaItem Class Reference』の『General Media Item Property Keys』と『Podcast Item Property Keys』を参照してください。

comparisonType:述語の論理比較タイプを指定します。
Media Property Predicate Comparison Types』を参照してください。


・Media Property Predicate Comparison Types
(MPMediaPropertyPredicateクラス)

メディアクエリの論理比較タイプです。

enum {
    MPMediaPredicateComparisonEqualTo,
    MPMediaPredicateComparisonContains
};
typedef NSInteger MPMediaPredicateComparison;

MPMediaPredicateComparisonEqualTo
メディアプロパティ述語内の値と、プロパティで与えたメディアアイテムの値が一致した場合。

MPMediaPredicateComparisonContains
メディアプロパティ述語の値の中に、一致するプロパティで与えたメディアアイテムの値が含まれる場合。


・addFilterPredicate:
(MPMediaQueryクラス)

- (void)addFilterPredicate:(MPMediaPredicate *)predicate

クエリにメディアプロパティ述語を追加します。

predicate:クエリに述語を追加設定するためのメディア述語を指定します。


●MPMediaPropertyPredicateクラス

MPMediaPropertyPredicateオブジェクトまたはメディアプロパティ述語は一つ以上使用して、iPodライブラリからメディアアイテムのサブセットを取得し、メディアクエリ内にフィルタを定義します。

このコンテキスト内の述語で、必要とする論理的な表現を条件に、各メディアアイテムに対して検査します。

条件を満たしたアイテムは、クエリの結果として取得されます。

iPodライブラリのクエリの定義とクエリ結果の取得には、『MPMediaQuery Class Reference』で説明されているMPMediaQueryクラスを使用してください。

クエリで取得するメディアアイテムとメディアアイテムコレクションについては、『MPMediaItem Class Reference』と『MPMediaItemCollection Class Reference』を参照してください。



参考文献

MPMediaPropertyPredicate Class Reference

MPMediaQuery Class Reference

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






Bose QuietComfort 20
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
08 | 2017/09 | 10
Sun Mon Tue Wed Thu Fri Sat
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Bose QuietComfort 20
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR