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

2010. 07. 23
前回の『音楽プレイヤで使用しているクラス』の中で紹介したMPMediaPlaylistクラスは、今回使用していませんでした。
(MPMediaItemクラスのvalueForProperty:と同名のメソッドがMPMediaPlaylistクラスにも有り、検索でMPMediaPlaylistクラスが先にリストアップされていたために誤って紹介した次第です)

それはさておき、続いて『音楽プレイヤの作成』で使用しているメソッドについて説明します。


●awakeFromNib

awakeFromNibはNSObjectクラスに追加されているメソッドで、Interface Builderで作成したnibファイルをアプリケーションが展開した後に行う処理を記述しています。

詳細は『スライドショーのメソッド(2)』のawakeFromNibの項を参照していただくとしまして、よく見るとスーパークラスによる初期化を行っていなかったので追加しました。
(太字が追加した部分)

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

    // プレイヤ生成
    player = [MPMusicPlayerController iPodMusicPlayer];

    // 音楽再生
    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];
}

584

ここでは音楽プレイヤと、音楽プレイヤに表示する情報の変化を通知する通知センターの生成と初期化を行っています。

Media PlayerフレームワークのMPMusicPlayerControllerクラスで、iPodライブラリを使った音楽プレイヤの生成を行っています。
(『音楽プレイヤで使用しているクラス』の『MPMusicPlayerControllerクラス』の説明にある『iPod音楽再生プレイヤ』に該当します)

音楽プレイヤの生成後、リピートとシャッフルのモードを設定し、再生を開始します。

ウィンドウのアウトレットとして指定したviewPlaceの位置に、サブビューとして制御パネルの表側を追加し、後述するupdateViewメソッドで表示情報を更新します。

その後、(曲名やアルバム名などの)表示情報を更新するために、通知センターのインスタンスを生成します。

通知センターには自身をオブザーバ(通知先)とし、呼び出すメソッドとして後述するdidItemChanged:を指定、音楽プレイヤ(player)の現在再生中の曲が変わった場合のみに通知するよう登録しています。

登録後、MPMusicPlayerControllerによる通知の開始を行います。


・iPodMusicPlayer
(MPMusicPlayerControllerクラス)

+ (MPMusicPlayerController *)iPodMusicPlayer

iPodアプリケーションの状態を制御する、iPod音楽プレイヤを返します。

iPodアプリケーションの代わりとしてiPod音楽プレイヤを利用できます。

インスタンスはアプリケーションの実行時に、現在のiPodアプリケーションの状態と制御を取得します。

具体的な共有する状態を以下に示します。

・リピートモード(『Repeat Modes』参照)
・シャッフルモード(『Shuffle Modes』参照)
・現在再生しているアイテム(『nowPlayingItem』参照)
・再生状態(『playbackState』参照)

他のiPodの状態、例えばon-the-goプレイリストなどは共有されません。

アプリケーションが終了しても、再生状態の音楽は再生され続けます。


・repeatMode
(MPMusicPlayerControllerクラス)

@property (nonatomic) MPMusicRepeatMode repeatMode

音楽プレイヤの現在のリピートモードです。

利用できるリピートモードは『Repeat Modes』を参照してください。

リピートモードが明示されていない場合、repeatModeはデフォルトでMPMusicRepeatModeDefaultを設定します。


・Repeat Modes
(MPMusicPlayerControllerクラス)

repeatModeプロパティの値です。

enum {
    MPMusicRepeatModeDefault,
    MPMusicRepeatModeNone,
    MPMusicRepeatModeOne,
    MPMusicRepeatModeAll
};
typedef NSInteger MPMusicRepeatMode;

MPMusicRepeatModeDefault
ユーザの好みのリピートモード。

MPMusicRepeatModeNone
音楽プレイヤは現在の曲またはプレイリストを繰り返しません。

MPMusicRepeatModeOne
音楽プレイヤは現在の曲を繰り返します。

MPMusicRepeatModeAll
音楽プレイヤは現在のプレイリストを繰り返します。


・shuffleMode
(MPMusicPlayerControllerクラス)

@property (nonatomic) MPMusicShuffleMode shuffleMode

音楽プレイヤの現在のシャッフルモードです。

利用できるシャッフルモードは『Shuffle Modes』を参照してください。

シャッフルモードが明示されていない場合、shuffleModeはデフォルトでMPMusicShuffleModeDefaultを設定します。


・Shuffle Modes
(MPMusicPlayerControllerクラス)

shuffleModeプロパティの値です。

enum {
    MPMusicShuffleModeDefault,
    MPMusicShuffleModeOff,
    MPMusicShuffleModeSongs,
    MPMusicShuffleModeAlbums
};
typedef NSInteger MPMusicShuffleMode;

MPMusicShuffleModeDefault
ユーザの好みのシャッフルモード。

MPMusicShuffleModeOff
プレイリストはシャッフルされません。

MPMusicShuffleModeSongs
プレイリストの曲をシャッフルします。

MPMusicShuffleModeAlbums
プレイリストのアルバムをシャッフルします。


・play
(MPMusicPlayerControllerクラス)

- (void)play

現在の再生キューからメディアアイテムを再生し、可能であれば一時停止を再開して再生します。


・addSubview:
(UIViewクラス)

- (void)addSubview:(UIView *)view

レシーバの姉妹より上に表示するサブビューとして、ビューを追加します。

このメソッドは、viewの次のレスポンダとしてレシーバを設定します。

レシーバはviewを保持します。

ビュー階層からremoveFromSuperviewを使ってviewを削除する場合、viewは解放されます。

ビュー階層から削除した後もviewを保持して使用したい場合(例えば、ビューの番号を通して交換するなど)、removeFromSuperViewを呼び出す前にretainする必要があります。

ビューはスーパービューを一つだけ持つことができます。

viewのスーパービューがnilではなく現在のビューと同じではない場合、このメソッドは現在のビューのサブビューを作る前に、以前のスーパービューから削除します。


・defaultCenter
(NSNotificationCenterクラス)

+ (id)defaultCenter

タスクのデフォルトの通知センターを返します。

戻り値は現在のタスクのデフォルトの通知センターで、システムの通知に使用されます。


・addObserver:selector:name:object:
(NSNotificationCenterクラス)

- (void)addObserver:(id)notificationObserver selector:(SEL)notificationSelector name:(NSString *)notificationName object:(id)notificationSender

レシーバのディスパッチテーブルに、オブザーバと通知セレクタ、オプションの基準として通知名とセンダーを追加登録します。

addObserver:selector:name:object:で指定したnotificationObserverやその他のオブジェクトは、removeObserver:またはremoveObserver:name:object:を呼び出す前に解放してください。

notificationObserver:オブザーバとして登録するオブジェクト。
この値はnilにしないでください。

notificationSelector:セレクタは、レシーバがnotificationObserverに通知を送信するための、メッセージを指定します。
メソッドはnotificationSelectorで(NSNotificationのインスタンスの)引数を一つだけ指定する必要があります。

notificationName:登録するオブザーバ用に、通知の名前を指定します。
つまり、この名前の通知のみオブザーバに配信されます。
nilを渡した場合、通知センターはオブザーバへの配信に通知名を使用しません。

notificationSender:オブザーバに通知を受信させたいオブジェクトを指定します。
このセンダーの送信する通知のみ、オブザーバに配信されます。
nilを渡した場合、通知センターはオブザーバへの配信にセンダーを使用しません。


・MPMusicPlayerControllerNowPlayingItemDidChangeNotification
(MPMusicPlayerControllerクラス)

現在再生しているメディアアイテムが変更された場合に投稿します。


・beginGeneratingPlaybackNotifications
(MPMusicPlayerControllerクラス)

- (void)beginGeneratingPlaybackNotifications

再生通知の生成を開始します。


●playOrPause

制御パネルの再生/一時停止ボタンのアクションメソッドです。

playbackStateプロパティで音楽プレイヤの現在の再生状態を取得し、一時停止状態なら再生、再生状態なら一時停止にします。

// 再生/一時停止
- (IBAction)playOrPause {
    // 現在の再生状態を取得
    MPMusicPlaybackState state = player.playbackState;

    // 一時停止中なら再生
    if (state == MPMusicPlaybackStatePaused) {
        [player play];
    }
    // 再生中なら一時停止
    else if (state == MPMusicPlaybackStatePlaying) {
        [player pause];
    }
}

585

・playbackState
(MPMusicPlayerControllerクラス)

@property (nonatomic, readonly) MPMusicPlaybackState playbackState

音楽プレイヤの現在の再生状態を示します。

利用できる再生状態は『Playback States』を参照してください。


・Playback States
(MPMusicPlayerControllerクラス)

playbackStateプロパティの値です。

enum {
    MPMusicPlaybackStateStopped,
    MPMusicPlaybackStatePlaying,
    MPMusicPlaybackStatePaused,
    MPMusicPlaybackStateInterrupted,
    MPMusicPlaybackStateSeekingForward,
    MPMusicPlaybackStateSeekingBackward
};
typedef NSInteger MPMusicPlaybackState;

playbackStateプロパティをチェックして、音楽プレイヤの状態を確認します。

プロパティの値によって、アプリケーションのユーザインターフェイスまたは他の適切な動作を更新することができます。

MPMusicPlaybackStateStopped
音楽プレイヤは停止しています。

MPMusicPlaybackStatePlaying
音楽プレイヤは再生しています。

MPMusicPlaybackStatePaused
音楽プレイヤは一時停止しています。

MPMusicPlaybackStateInterrupted
音楽プレイヤは電話の呼び出しなどで中断しています。

MPMusicPlaybackStateSeekingForward
音楽プレイヤは前方へシーク(早送り)しています。

MPMusicPlaybackStateSeekingBackward
音楽プレイヤは後方へシーク(巻き戻し)しています。


・pause
(MPMusicPlayerControllerクラス)

- (void)pause

音楽プレイヤが再生中の場合、一時停止します。

playを再度呼び出した場合、一時停止した場所から再生を開始します。


●skipToNext

制御パネルの次の曲にスキップするボタンのアクションメソッドです。

// 次の曲へスキップ
- (IBAction)skipToNext {
    [player skipToNextItem];
}

586


・skipToNextItem
(MPMusicPlayerControllerクラス)

- (void)skipToNextItem

再生キュー内の次のメディアアイテムの再生を開始、または音楽プレイヤが再生していない場合はその次に再生可能な以降のメディアアイテムを指定します。

再生キューが既に最後のアイテムである場合、このメソッドは再生を終了します。


●skipToPrevious

制御パネルの前の曲にスキップするボタンのアクションメソッドです。

skipToNextと異なり、現在の再生状態によって場合分けを行っており、曲の開始から3秒未満なら前の曲へ、3秒以上なら曲の先頭へ戻る制御を行っています。

// 前の曲へスキップ
- (IBAction)skipToPrevious {
    // 再生位置が曲の先頭から3秒未満なら前の曲へスキップ
    if (player.currentPlaybackTime < 3.0) {
        [player skipToPreviousItem];
    }
    // 再生位置が曲の先頭から3秒以上なら曲の先頭にスキップ
    else {
        [player skipToBeginning];
    }
}

587


・currentPlaybackTime
(MPMusicPlayerControllerクラス)

@property (nonatomic) NSTimeInterval currentPlaybackTime

現在再生しているメディアアイテムの、開始から現在の再生時間までを秒単位で測定します。

以下の理由により、このプロパティのアクセスは読み書き可能です。

・データを取得して、現在の再生時間をユーザに提供する。
・メディアアイテムの特定の時点にシークする。


・skipToPreviousItem
(MPMusicPlayerControllerクラス)

- (void)skipToPreviousItem

再生キュー内の前のメディアアイテムの再生を開始、または音楽プレイヤが再生していない場合はその次に再生可能な以前のメディアアイテムを指定します。

再生キューが既に最初のアイテムである場合、このメソッドは再生を終了します。


・skipToBeginning
(MPMusicPlayerControllerクラス)

- (void)skipToBeginning

現在再生しているメディアアイテムを最初から再生し直します。



参考文献

Media Player Framework Reference

MPMusicPlayerController Class Reference

UIView Class Reference

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

商品詳細を見る






Wave SoundTouch music system IV
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
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

Wave SoundTouch music system IV
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