[Objective-C]iOSで、ミュージックライブラリにアクセスして音楽を再生する

(2015年9月14日追記。
Swift版の記事を書きました。
[iOS][Swift]ミュージックライブラリにアクセスして音楽を再生する(MPMusicPlayerController使用) | nackpan Blog
ごらんください。)


iOSで、ミュージックライブラリにアクセスして音楽を再生する方法。
このappleのドキュメントにライブラリにアクセスして再生する方法、必要な曲を選択する方法、現在再生中の音楽の情報を知る方法等、まとめてある。
(ちなみに、日本語ドキュメント – Apple DeveloperのページにappleのiOS用日本語ドキュメントがまとめてある。英語版へのリンクもある)
今回は、ミュージックライブラリから音楽を選択すると音楽がスタートするようにし、再生、一時停止、停止ができるようにする。
iOSシミュレータでは動作しないので、実機を用いてください。

Single View Applicationでプロジェクトを作成。名前はsampleMusicPlayerにしてみた。 スクリーンショット 2013-08-11 21.37.44

MediaPlayerフレームワークを加える。 スクリーンショット 2013-08-11 21.39.39 「+」ボタンを押すと、フレームワークがずらりと現れるので、そのなかから、MediaPlayer.frameworkを加える。 スクリーンショット 2013-08-11 21.40.19 ViewController.hにMediaPlayerフレームワークをimportする。 スクリーンショット 2013-08-11 21.41.07

ボタンを配置。 スクリーンショット 2013-08-12 11.38.12

ボタンとViewController.mにactionを作成してつなげる。 スクリーンショット 2013-08-12 11.38.27

プレイヤーを表すpropertyをViewController.mに加える。 スクリーンショット 2013-08-12 12.07.33

プレイヤーのインスタンスを作成。 スクリーンショット 2013-08-12 12.18.01 (ここで、applicationMusicPlayerではなく、ipodMusicPlayerを用いると、「ミュージック」での再生状況(再生アイテムや、シャッフル、リピートなどのモード)を反映したものになる)

曲を選択するために、メディアアイテムピッカーを用いる。
(メディアアイテムピッカーというのは、iOSで用意されているあらかじめ設定済みのModalViewController。ミュージックライブラリの選択画面と同じようなことが出来る) スクリーンショット 2013-08-12 13.30.57

(iPodライブラリアクセスプログラミングガイドより)

メディアアイテムピッカーでの「選択完了したとき」や「キャンセルされたとき」のイベントを、ViewControllerで受け取れるようにする。
そのために、ViewControllerをメディアアイテムピッカーのデリゲートとして設定する。
「選曲」ボタンを押すと、メディアアイテムピッカーを作成して、デリゲートの設定を行い、ライブラリの曲を選択できるようにする。
「選択完了したとき」「キャンセルされたとき」のメソッドを記述する。 ViewController.h スクリーンショット 2013-08-12 15.15.51 ViewController.m スクリーンショット 2013-08-12 16.21.34

各ボタンのアクションに、「再生」「一時停止」「停止」機能を加える。 スクリーンショット 2013-08-12 19.47.50

iOSシミュレータでは動作しません。実機を用いてください。 「選曲」ボタンを押すと、メディアアイテムピッカーが表示され、曲を選択すると音楽がスタートします。「再生」ボタンで音楽の再生。「一時停止」ボタンで一時停止。「停止」ボタンで音楽を止めて、再生位置を一番始めに戻します。
ViewController.h

//
//  ViewController.h
//  sampleMusicPlayer
//

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>

@interface ViewController : UIViewController<MPMediaPickerControllerDelegate>

@end

ViewController.m

//
//  ViewController.m
//  sampleMusicPlayer
//

#import "ViewController.h"

@interface ViewController ()
@property MPMusicPlayerController* player;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.player = [MPMusicPlayerController applicationMusicPlayer];
}

- (IBAction)pick:(id)sender {
    // MPMediaPickerControllerのインスタンスを作成
    MPMediaPickerController *picker = [[MPMediaPickerController alloc]init];
    // ピッカーのデリゲートを設定
    picker.delegate = self;
    // 複数選択を不可にする。(YESにすると、複数選択できる)
    picker.allowsPickingMultipleItems = NO;
    // ピッカーを表示する
    [self presentViewController:picker animated:YES completion:nil];
}

// メディアアイテムピッカーでアイテムを選択完了したときに呼び出される
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{
    // 選択した曲情報がmediaItemCollectionに入っているので、これをplayerにセット。
    [self.player setQueueWithItemCollection:mediaItemCollection];
    // 再生開始
    [self.player play];
    // ピッカーを閉じ、破棄する
    [mediaPicker dismissViewControllerAnimated:YES completion:nil];
}

//選択がキャンセルされた場合に呼ばれる
- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{
    // ピッカーを閉じ、破棄する
    [mediaPicker dismissViewControllerAnimated:YES completion:nil];
}

- (IBAction)pushPlay:(id)sender {
    [self.player play];
}
- (IBAction)pushPause:(id)sender {
    [self.player pause];
}
- (IBAction)pushStop:(id)sender {
    [self.player stop];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

関連記事

[iOS]AVPlayerを使う | nackpan Blog AVFoundationフレームワークのAVPlayerクラスを使って、ミュージックライブラリの楽曲を再生する。

「[Objective-C]iOSで、ミュージックライブラリにアクセスして音楽を再生する」への2件のフィードバック

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください