音楽プレイヤで使用しているクラス

2010. 07. 22
前回の『音楽プレイヤの作成』で使用したクラスを説明します。


●Media Playerフレームワーク

このドキュメントのコレクションは、動画や音楽、音楽ポッドキャスト、オーディオブックファイルの再生についての基本的な機能を提供する、Media Playerフレームワークについて説明します。

このフレームワークは、アプリケーションからiPodライブラリへのアクセスも提供します。

ユーザのiTunesライブラリからオーディオベースのメディアアイテムを同期した、検索と再生に使用することができます。

iPodライブラリへのアクセスは読み込みのみです。

またこのフレームワークのMPVolumeViewクラスを使って、システムのオーディオ出力の音量レベルをユーザが調整できるようにすることもできます。


●MPMusicPlayerControllerクラス

MPMusicPlayerControllerオブジェクトまたは音楽プレイヤは、iPodライブラリのメディアアイテムの再生に使用します。

音楽プレイヤには二種類あります。

・『アプリケーション音楽プレイヤ』はアプリケーション内のローカルで音楽を再生します。
iPodアプリケーションの現在の再生アイテムに関知せず、iPodの状態に影響されません。

・『iPod音楽再生プレイヤ』はビルトインされているiPodアプリケーションを利用します。
インスタンスは現在のiPodアプリケーションの状態、例えば現在再生されているアイテムの識別をすることができます。
ユーザが音楽の再生中にアプリケーションを終了しても、音楽を再生し続けます。
iPodアプリケーションは、音楽プレイヤアプリケーションのリピートモード、シャッフルモード、再生状態、現在再生中のアイテムの直近の設定を持ちます。


●MPMediaPlaylistクラス

MPMediaPlaylistオブジェクトまたはメディアプレイリストは、関連メディアアイテムの再生コレクションです。

(メディアアイテムは『MPMediaItem Class Reference』で説明しています)

各プレイリストは名前、属性の設定、アプリケーションの起動間で保持している固有の識別子を持っています。

ユーザはデスクトップのiTunesを使用してプレイリストを構成したり、またはデバイス上でon-the-goプレイリストを生成します。

貴方のiOSアプリケーションではプレイリストは読み込みのみです。

プレイリストを入手するにはプレイリスト毎にグループ化されているメディアクエリを設定します。

返される各メディアアイテムのコレクションはメディアのプレイリストです。

Xcodeのデバッガコンソールにプレイリストと曲名を出力するコードを以下に示します。

MPMediaQuery *myPlaylistsQuery = [MPMediaQuery playlistsQuery];
NSArray *playlists = [myPlaylistsQuery collections];

for (MPMediaPlaylist *playlist in playlists) {
    NSLog (@"%@", [playlist valueForProperty: MPMediaPlaylistPropertyName]);

    NSArray *songs = [playlist items];
    for (MPMediaItem *song in songs) {
        NSString *songTitle =
            [song valueForProperty: MPMediaItemPropertyTitle];
        NSLog (@" %@", songTitle);
    }
}

メディアクエリを構築するためのAPIは『MPMediaPropertyPredicate Class Reference』と『MPMediaQuery Class Reference』で説明しています。


●MPMediaItemクラス

MPMediaItemオブジェクトまたはメディアアイテムは、iPodライブラリ内にある曲などの一つのアイテムを表します。

メディアアイテムは固有の識別子を持ち、MPMediaItemPropertyPersistentIDプロパティキーを使ってアクセスできます。

この識別子はアプリケーションの起動間で保持します。

メディアアイテムは広範囲のメタデータを関連付けすることができます。

メタデータにアクセスするには、valueForProperty:メソッドとこのドキュメントで説明するプロパティキーを一緒に使います。

またバッチ方式でメタデータにアクセスする場合はenumerateValuesForProperties:usingBlock:メソッドを使います。

いくつかの場合、この方が効率的です。

メディアアイテムの属性はiPodライブラリを検索してメディアクエリを構築するために使用します。

これらの属性は『Media Item Type Flags』、『General Media Item Property Keys』、『Podcast Item Property Keys』で説明しています。

メディアクエリについては『MPMediaQuery Class Reference』で説明しています。


●MPMediaItemArtworkクラス

MPMediaItemArtworkオブジェクトまたはメディアアイテムアートワークは、音楽アルバムのカバーアートなどのメディアアイテムに関連付けされた、グラフィカルな画像を表します。

メディアアイテムについては『MPMediaItem Class Reference』で説明しています。


●NSNotificationCenterクラス

NSNotificationCenterオブジェクト(または単に通知センター)は、タスク内の情報をブロードキャストする機構を提供します。

NSNotificationCenterオブジェクトは基本的に通知ディスパッチテーブルです。

オブジェクトを通知センターに登録して通知(NSNotificationオブジェクト)を受け取るには、addObserver:selector:name:object:またはaddObserverForName:object:queue:usingBlock:メソッドを使用します。

これらのメソッドの呼び出しでは、通知セットを指定します。

したがって、場合に応じてこれらのメソッドを呼び出し、異なる通知セットのオブザーバ(通知先)としてオブジェクトを登録することができます。

(通知センダーとして知られる)オブジェクトが通知をする場合、通知センターにNSNotificationオブジェクトを送信します。

通知センターは指定された通知メッセージが送信されると、基準登録で指定された通知対象である任意のオブザーバに通知し、唯一の引数として通知を渡します。

通知センターは各オブザーバの通知セットを指定する、通知ディスパッチテーブルを保持します。

通知セットは、通知センターに通知を行うサブセットです。

各テーブルには3つのアイテムが登録されています。

通知オブザーバ(Notification observer):必須
通知センターに条件を満たした通知を投稿するオブジェクト。

通知名(Notification name):オプション
通知セットに指定した名前の通知だけ絞り込むように登録します。

通知センダー(Notification sender):オプション
通知セットに指定したセンダーだけに送信するように登録します。

表1にディスパッチテーブルに登録する4つのタイプと通知セットを示します。
(このテーブルは常に通知オブザーバを省略しています)

表1 ディスパッチテーブルに登録するタイプ

通知名通知センダー指定された通知セット
指定指定指定したセンダーから特定の名前の通知
指定指定せず任意のセンダーから特定の名前の通知
指定せず指定指定したセンダーからの通知
指定せず指定せず全ての通知

表2に4つのオブザーバのディスパッチテーブルの例を示します。

表2 通知ディスパッチテーブルの例

オブザーバ通知名通知センダー
observerANSFileHandleReadCompletionNotificationnil
observerBniladdressTableView
observerCNSWindowDidChangeScreenNotificationdocumentWindow
observerCniladdressTableView
observerDnilnil

通知センターから通知される時、表2のそれぞれのオブザーバは以下のような通知を行います。

・observerA:NSFileHandleReadCompletionNotificationで名付けられた通知

・observerB:addressTableViewによる通知の送信

・observerC:NSWindowDidChangeScreenNotificationで名付けられた通知をdocumentWindowで送信し、addressTableViewで通知の送信

・observerD:全ての通知

通知を受け取るオブザーバは未定義です。

投稿可能なオブジェクトとオブザーバオブジェクトは同一です。

通知センターはオブザーバに同期した通知を提供します。

言い換えると、全てのオブザーバが通知を受け取って処理するまで、postNotification:メソッドは返せません。

非同期で通知を送信するにはNSNotificationQueueを使用してください。

マルチスレッドアプリケーションの場合、通知は全て通知が投稿されたスレッドに提供され、オブザーバ自身が登録された同じスレッドではありません。

重要:通知センターはオブザーバを保持しないため、解放する前に(removeObserver:またはremoveObserver:name:object:を使って)オブザーバの登録を解除する必要があります。
(事前に登録の解除を行わない場合、通知センターは解放されたオブジェクトにメッセージを送信してしまい、ランタイムエラーが発生します)

各タスクはデフォルトで通知センターを持っています。

通常は独自に生成しないでください。

NSNotificationCenterオブジェクト一つのタスク内でのみ通知を提供することができます。

他のタスクに通知を投稿したり他のタスクから通知を受け取りたい場合は、NSDistributedNotificationCenterオブジェクトを使用します。


●NSNotificationクラス

NSNotificationオブジェクトは、NSNotificationCenterオブジェクトによる他オブジェクトへのブロードキャストをできるようにするため、情報をカプセル化します。

NSNotificationオブジェクト(通知とも呼ばれる)は名前とオブジェクト、オプションの辞書を含みます。

名前は通知を識別するタグです。

オブジェクトは、通知のオブザーバに送信したい通知を投稿する任意のオブジェクトです。
(通常はこのオブジェクトが通知を投稿します)

辞書は他の関連するオブジェクトがあれば、それを格納します。

NSNotificationオブジェクトは不変オブジェクトです。

通知オブジェクトは、notificationWithName:object:またはnotificationWithName:object:userInfo:クラスメソッドで生成できます。

ただし、通常は自身で直接通知を生成しないでください。

NSNotificationCenterメソッドのpostNotificationName:object:とpostNotificationName:object:userInfo:は、最初に生成せずに通知を投稿することができる便利なメソッドです。

NSCopyingプロトコル

NSNotificationクラスはNSCopyingプロトコルを採用し、通知として扱うことが可能なコンテキスト独立値のコピーや再利用で作ることができます。

後に使用する、または分散オブジェクトシステムを使って他のプロセスに通知を送信するために、通知を格納することができます。

NSCopyingプロトコルは基本的に、コレクションでコピーできる最初のクラスの値として、通知を処理してクライアントに提供します。

配列内に通知を置いたり、配列にコピーメッセージを送信するなど、全てのアイテムは再帰的にコピーできます。

サブクラスの生成

NSNotificationは、追加した通知名、オブジェクト、辞書の情報を含めてサブクラス化することができます。

追加したデータは、通知とオブザーバ間で一致している必要があります。

NSNotificationはインスタンス変数の無いクラスクラスタです。

そのため、NSNotificationのサブクラス化は元のメソッドのname、object、userInfoをオーバーライドする必要があります。

初期化には好きな指定イニシャライザを選択できますが、イニシャライザがNSNotificationのinitの実装([super init])を呼び出さないようにしてください。

NSNotificationは直接インスタンス化するものではなく、initメソッドは例外を発生させます。



参考文献

Media Player Framework Reference

MPMusicPlayerController Class Reference

MPMediaPlaylist Class Reference

MPMediaItem Class Reference

MPMediaItemArtwork Class Reference

NSNotificationCenter Class Reference

NSNotification Class Reference

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

商品詳細を見る






SoundLink Mini Bluetooth speaker_ii_limited
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
05 | 2017/06 | 07
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

SoundLink Mini Bluetooth speaker_ii_limited
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