音楽プレイヤのメソッド(2)

2010. 07. 24
●updateView

制御パネルに表示する項目を更新するメソッドです。

現在再生中の曲を取得し、そこから制御パネルの表面に表示する曲名、アルバム名、アーティスト名のプロパティを得て、アウトレットのラベルに反映させます。

また制御パネルの裏面に表示するアートワークも同時に取得し、反映させています。

- (void)updateView {
    // 現在再生中の曲を取得
    MPMediaItem *curItem = [player nowPlayingItem];

    // 曲情報の取得とビューへの反映(曲名/アルバム名/アーティスト名)
    labelSongTitle.text = [curItem valueForProperty:MPMediaItemPropertyTitle];
    labelAlbumTitle.text = [curItem valueForProperty:MPMediaItemPropertyAlbumTitle];
    labelArtist.text = [curItem valueForProperty:MPMediaItemPropertyArtist];

    // アートワークの取得とビューへの反映
    MPMediaItemArtwork *artWork;
    artWork = [curItem valueForProperty:MPMediaItemPropertyArtwork];
    imageArtWork.image = [artWork imageWithSize:imageArtWork.frame.size];
}

588


・nowPlayingItem
(MPMusicPlayerControllerクラス)

@property (nonatomic, copy) MPMediaItem *nowPlayingItem

現在再生中のメディアアイテム、再生していない場合はキュー内のメディアアイテムを指定して再生を開始します。

再生キュー内の特定のメディアアイテムで再生を開始する場合、このプロパティでそのアイテムを設定すると音楽プレイヤは停止または一時停止します。

再生中または再生を指定するメディアアイテムが無い場合、このプロパティの値はnilになります。


・valueForProperty
(MPMediaItemクラス)

- (id)valueForProperty:(NSString *)property

指定したメディアアイテムのプロパティキーの値です。

戻り値は、メディアアイテムのpropertyキーの値を返します。

このプロパティで使用可能なメタデータのキーのリストは、『General Media Item Property Keys』『Podcast Item Property Keys』『User-Defined Property Keys』です。

property:対応する値を取得するためのプロパティキーを指定します。


・General Media Item Property Keys
(MPMediaItemクラス)

これらのプロパティキーでvalueForPropertyメソッドを呼び出すことによって、メディアアイテムのメタデータを取得します。

いくつかのプロパティはメディアプロパティ述語の構築に使用することができます。
(詳細は『MPMediaPropertyPredicate Class Reference』を参照)

これらのプロパティには『filterable』と示しています。

NSString*constMPMediaItemPropertyPersistentID;// filterable
NSString*constMPMediaItemPropertyMediaType;// filterable
NSString*constMPMediaItemPropertyTitle;// filterable
NSString*constMPMediaItemPropertyAlbumTitle;// filterable
NSString*constMPMediaItemPropertyArtist;// filterable
NSString*constMPMediaItemPropertyAlbumArtist;// filterable
NSString*constMPMediaItemPropertyGenre;// filterable
NSString*constMPMediaItemPropertyComposer;// filterable
NSString*constMPMediaItemPropertyPlaybackDuration; 
NSString*constMPMediaItemPropertyAlbumTrackNumber; 
NSString*constMPMediaItemPropertyAlbumTrackCount; 
NSString*constMPMediaItemPropertyDiscNumber; 
NSString*constMPMediaItemPropertyDiscCount; 
NSString*constMPMediaItemPropertyArtwork; 
NSString*constMPMediaItemPropertyLyrics; 
NSString*constMPMediaItemPropertyIsCompilation;// filterable
NSString*constMPMediaItemPropertyReleaseDate; 
NSString*constMPMediaItemPropertyBeatsPerMinute; 
NSString*constMPMediaItemPropertyComments; 
NSString*constMPMediaItemPropertyAssetURL; 

MPMediaItemPropertyPersistentID
メディアアイテムの永続的な識別子です。
値はuint64_t(unsigned long long)のNSNumberオブジェクトです。
MPMediaItemPropertyPersistentID識別子の値は永続的なもので、アプリケーションの起動や同期に関わらず、メディアアイテムの同期状態で変更されません。
同期/非同期/同期サイクルを経て値が永続することは保証されません。
メディアプロパティ述語の構築に使用することができます。

MPMediaItemPropertyMediaType
メディアアイテムのメディアタイプです。
値はNSIntegerデータ型のNSNumberオブジェクトです。
NSInteger値は『Media Item Type Flags』のビットフィールドフラグまたはフラグのセットを表します。
メディアプロパティ述語の構築に使用することができます。

MPMediaItemPropertyTitle
メディアアイテムのタイトル(または名前)です。
このプロパティはMPMediaItemPropertyAlbumTitleプロパティと関連はありません。
値はNSStringオブジェクトです。
メディアプロパティ述語の構築に使用することができます。

MPMediaItemPropertyAlbumTitle
アルバムのタイトルです。
アルバムの個々の曲のタイトルは、MPMediaItemPropertyTitleプロパティを指定します。
値はNSStringオブジェクトです。
メディアプロパティ述語の構築に使用することができます。

MPMediaItemPropertyArtist
メディアアイテムの演奏するアーティストです。
メディアアイテムに属する名前なので、アルバムの主要なアーティストと異なる場合があります。
例えばアルバム『THE IDOLM@STER MASTER SPECIAL 04』のアーティストが『萩原雪歩 (落合祐里香) & 四条貴音 (原由実)』で、アルバムのその内の一曲『ALRIGHT*』のアーティストは『萩原雪歩 (落合祐里香)』という場合です。
値はNSStringオブジェクトです。
メディアプロパティ述語の構築に使用することができます。

MPMediaItemPropertyAlbumArtist
アルバムで主に演奏するアーティストです。
値はNSStringオブジェクトです。
メディアプロパティ述語の構築に使用することができます。

MPMediaItemPropertyGenre
ミュージカルまたは映画といったメディアアイテムのジャンルです。
値はNSStringオブジェクトです。
メディアプロパティ述語の構築に使用することができます。

MPMediaItemPropertyComposer
メディアアイテムのミュージカルの作曲家です。
値はNSStringオブジェクトです。
メディアプロパティ述語の構築に使用することができます。

MPMediaItemPropertyPlaybackDuration
メディアアイテムの再生時間です。
値は再生時間をNSTimeIntervalの秒単位で表したNSNumberオブジェクトです。

MPMediaItemPropertyAlbumTrackNumber
メディアアイテムがアルバムの一部の場合、メディアアイテムのトラック番号を表します。
値はNSUIntegerデータ型のNSNumberオブジェクトです。

MPMediaItemPropertyAlbumTrackCount
メディアアイテムが入っているアルバムのトラック数です。
値はNSUIntegerデータ型のNSNumberオブジェクトです。

MPMediaItemPropertyDiscNumber
メディアアイテムがマルチディスクアルバムの一部の場合、メディアアイテムのディスク番号を表します。
値はNSUIntegerデータ型のNSNumberオブジェクトです。

MPMediaItemPropertyDiscCount
メディアアイテムが入っているアルバムのディスク数です。
値はNSUIntegerデータ型のNSNumberオブジェクトです。

MPMediaItemPropertyArtwork
メディアアイテムのアートワーク画像です。
値はメディアアイテムの画像で詳細は『MPMediaItemArtwork Class Reference』を参照してください。

MPMediaItemPropertyLyrics
メディアアイテムの歌詞です。
値はNSStringオブジェクトです。

MPMediaItemPropertyIsCompilation
メディアアイテムがコンピレーションの一部かどうかをブール値で表し、コンピレーションの一部であればYES、そうでなければNOになります。
iTunesの『情報見る(Get Info)』ダイアログ内の『情報(Info)』タブにある、『コンピレーションの一部(Part of a compilation)』のチェックボックスに対応しています。
値はBOOLデータ型のNSNumberオブジェクトです。

MPMediaItemPropertyReleaseDate
メディアアイテムの最初のリリース日です。
値はNSDateオブジェクトです。

MPMediaItemPropertyBeatsPerMinute
メディアアイテムのBPM(1分あたりの拍数)で、iTunesの『情報見る(Get Info)』ダイアログ内の『情報(Info)』タブにある、『BPM』の欄に対応しています。
値はNSUIntegerデータ型のNSNumberオブジェクトです。

MPMediaItemPropertyComments
メディアアイテムに関するテキスト情報で、iTunesの『情報見る(Get Info)』ダイアログ内の『情報(Info)』タブにある、『コメント(Comments)』の欄に対応しています。
値はNSStringオブジェクトです。

MPMediaItemPropertyAssetURL
メディアアイテムの指すURLで、AVAssetオブジェクト(または他のURLベースのAV Foundationオブジェクト)を任意のオプションを必要に応じて使用して生成できます。
値はNSURLオブジェクトです。
URLはipod-libraryのカスタムスキームを持ちます。
例えば、URLは次のようになります。
ipod-library://item/item.m4a?id=12345
URLの外側の処理は、AV Foundationフレームワークはサポートしません。


・imageWithSize:
(MPMediaItemArtworkクラス)

- (UIImage *)imageWithSize:(CGSize)size

指定したサイズのUIImageオブジェクトを生成して返します。

size:新しいUIImageオブジェクトのサイズをポイント単位で指定します。


●didItemChanged

awakeFromNibメソッドで通知センターにセレクタとして登録したメソッドで、現在再生中の曲が変わった場合にMPMusicPlayerControllerNowPlayingItemDidChangeNotification通知を受けて呼び出されます。

通知を受けるとupdateViewメソッドを呼び出し、制御パネルの情報を更新します。

- (void)didItemChanged:(NSNotification *)aNote {
    // 通知名を取得
    NSString *noteName = [aNote name];

    // 通知が『現在再生中の曲の変化』なら画面を更新
    if ([noteName isEqualToString:MPMusicPlayerControllerNowPlayingItemDidChangeNotification]) {
        [self updateView];    // 曲情報表示を更新
    }
}

589


・name
(NSNotificationクラス)

- (NSString *)name

通知の名前を返します。

戻り値は通常、通知を受け取る時にどのような処理をする通知かを調べるため、このメソッドを使用します。

通知名には任意の文字列を指定できます。

名前の衝突を回避するため、アプリケーション固有のプレフィックス(接頭辞)を付けた方が望ましい場合があります。


●dealloc

アプリケーション終了時に不要になる通知、awakeFromNibで生成・登録した通知センターやオブザーバを解放します。

手順としてはawakeFromNibと逆になり、

・beginGeneratingPlaybackNotificationsで開始した通知の停止
(endGeneratingPlaybackNotifications)

・addObserver:selector:name:object:でディスパッチテーブルに登録したオブザーバの解除
(removeObserver:)

という順序になります。

- (void)dealloc {
    // 通知の停止を指示
    [player endGeneratingPlaybackNotifications];

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

    // 通知先の登録を解除
    [noteCenter removeObserver:self];

    [super dealloc];
}

590


・endGeneratingPlaybackNotifications
(MPMusicPlayerControllerクラス)

- (void)endGeneratingPlaybackNotifications

再生通知の生成を終了します。


・removeObserver:
(NSNotificationCenterクラス)

- (void)removeObserver:(id)notificationObserver

レシーバのディスパッチテーブルから指定登録したオブザーバを全て削除します。

このメソッド(またはremoveObserver:name:object:)を呼び出す前に、notificationObserverまたはaddObserver:selector:name:object:で指定した任意のオブジェクトを解放してください。

以下に、事前に登録していた全ての通知someObserverの登録を解除について示します。

[[NSNotificationCenter defaultCenter] removeObserver:someObserver];

notificationObserver:削除するオブザーバを指定します。
nilを指定してはいけません。


●flipToMoreSide

制御パネルのMoreボタンをタップした際に、表側から裏側に移行するアクションメソッドです。

ウィンドウの制御パネルの位置にある表側のサブビューviewMainSideを取り外し、裏側のサブビューviewMoreSideを貼付け直すもので、その貼り替えをフリップのトランジションアニメーションで包んでいます。

- (IBAction)flipToMoreSide {
    // アニメーションの準備
    [UIView setAnimationsEnabled:YES];
    [UIView beginAnimations:@"Flip" context:nil];
    [UIView setAnimationDuration:0.5f];

    // トランジションアニメーションの設定
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:viewPlace cache:YES];

    // ビューの貼り替え
    [viewMainSide removeFromSuperview];    // 表側の制御パネルを外す
    [viewPlace addSubview:viewMoreSide];    // 裏側の制御パネルを貼り付ける

    // アニメーション実行
    [UIView commitAnimations];
}

・removeFromSuperview
(UIViewクラス)

スーパービューとウィンドウからレシーバのリンクを解除し、レスポンダチェーンから削除します。

レシーバのスーパービューがnilではない場合、このメソッドはレシーバを解放します。

ビューを再利用する予定の場合、このメソッドを呼び出す前に保持して適切な所で解放するか、別のビュー階層に後で追加してください。

決して表示しながらこのメソッドを呼び出さないでください。


トランジションアニメーション(2)』で説明しましたが、setAnimationsEnabled:、beginAnimations:context:、setAnimationTransition:forView:cache:、commitAnimationsメソッドはiOS 4で非推奨となっているので、transitionWithView:duration:options:animations:completion:メソッドに置換します。
(太字が修正した部分)

- (IBAction)flipToMoreSide {
    // トランジションアニメーションの設定
    [UIView transitionWithView:viewPlace duration:0.5f options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{

        // ビューの貼り替え
        [viewMainSide removeFromSuperview];    // 表側の制御パネルを外す
        [viewPlace addSubview:viewMoreSide];    // 裏側の制御パネルを貼り付ける
    }
    completion:NULL];
}

591


●flipToMainSide

制御パネルの裏面のBackボタンをタップした際に裏側から表側に移行するアクションメソッドです。

flipToMoreSideと同様に、裏側のサブビューviewMoreSideを取り外し、表側のサブビューviewMainSideを貼付け直すもので、その貼り替えをフリップのトランジションアニメーションで包んでいます。

- (IBAction)flipToMainSide {
    // アニメーションの準備
    [UIView setAnimationsEnabled:YES];
    [UIView beginAnimations:@"Flip" context:nil];
    [UIView setAnimationDuration:0.5f];

    // トランジションアニメーションの設定
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:viewPlace cache:YES];

    // ビューの貼り替え
    [viewMoreSide removeFromSuperview];    // 裏側の制御パネルを外す
    [viewPlace addSubview:viewMainSide];    // 表側の制御パネルを貼り付ける

    // アニメーション実行
    [UIView commitAnimations];
}

こちらもtransitionWithView:duration:options:animations:completion:メソッドに置換します。
(太字が修正した部分)

- (IBAction)flipToMainSide {
    // トランジションアニメーションの設定
    [UIView transitionWithView:viewPlace duration:0.5f options:UIViewAnimationOptionTransitionFlipFromRight animations:^{

        // ビューの貼り替え
        [viewMoreSide removeFromSuperview];    // 裏側の制御パネルを外す
        [viewPlace addSubview:viewMainSide];    // 表側の制御パネルを貼り付ける
    }
    completion:NULL];
}

592



参考文献

MPMusicPlayerController Class Reference

UIView Class Reference

MPMediaItem Class Reference

MPMediaItemArtwork Class Reference

NSNotificationCenter Class Reference

NSNotification Class Reference

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

商品詳細を見る






QuietControl 30 wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
04 | 2017/05 | 06
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 31 - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

QuietControl 30 wireless headphones
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