[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クラスを使って、ミュージックライブラリの楽曲を再生する。

macでスクリーンショットをとる方法&簡単な画像加工(矢印、テキスト書き込みなど)をする方法

macでスクリーンショットをとる方法

アップル – Macを使いこなそう – Macの基本

commandキー + shiftキー + 3 : 画面全体をスクリーンショット
commandキー + shiftキー + 4 : 範囲を自由に決めてスクリーンショット
commandキー + shiftキー + 4 のすぐあとに spaceキー : ウィンドウを選択してスクリーンショット

簡単な画像加工(矢印やテキスト書き込み)をする方法

「プレビュー」を使う

画像をプレビュー.appで開く。

画像をctrl+クリックして「情報を見る」を開いて、
スクリーンショット 2013-08-11 6.51.07
「このアプリケーションで開く」が「プレビュー.app」になっていれば、画像をダブルクリックで自動的にプレビュー.appが起動します。
スクリーンショット 2013-08-11 6.51.53

そうなっていない場合は、アプリケーションフォルダにプレビュー.appがあります。ここから開いてください。
スクリーンショット 2013-08-11 6.42.30

「ツール」->「注釈」と開くと、線や長方形、テキスト、吹き出しなどのメニューが現れ書き入れることが出来ます。
screenshot_previewapp

Skitchを使う

Skitch | Evernote
Skitch for Mac の使い方 | Evernote

[Objective-C]iOSで、リソースファイルから音楽を再生する

リソースファイルから音楽を再生。

「再生」「一時停止」「停止」ができればOK。生のオーディオデータを加工したりはしない。という条件ならば、AVFoundationフレームワークのAVAudioPlayerを用いると簡便。

まずは、SingleApplicationでプロジェクトを作成。プロジェクト名はSampleAVAudioPlayerにしてみた。
2013-08-08_01.0createProject
2013-08-08_01.1createProject

AVFoundationフレームワークを加える。
2013-08-08_02addFramework

ViewController.hにAVFoundationフレームワークをimportする。
2013-08-09_02.1importFramework

ボタンを配置。
2013-08-08_03layoutBtn

ボタンとViewController.m間に、Actionを作成してつなげる。
2013-08-08_05action

使用するオーディオファイルをプロジェクトに加える。
2013-08-08_06addSound

オーディオプレイヤーを現すpropertyをViewController.mに加える。
2013-08-08_07addProperty

オーディオプレイヤーにオーディオファイルをセットするコード。
2013-08-08_08viewdidload

各ボタンのアクションに、「再生」「一時停止」「停止」機能を加える。
2013-08-08_09btnActionCord

Playボタンを押すと、オーディオファイルの再生。Pauseボタンで一時停止。Stopボタンで停止し、オーディファイルの再生位置を冒頭に戻します。

手を加えたソースコードは以下のようになります。
ViewController.h

//
//  ViewController.h
//  sampleAVAudioPlayer

#import 
#import 

@interface ViewController : UIViewController

@end

ViewController.m

//
//  ViewController.m
//  sampleAVAudioPlayer

#import "ViewController.h"

@interface ViewController ()
@property AVAudioPlayer* player;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    
    // リソースファイルをAVAudioPlayerにセット。
    NSString *path = [[NSBundle mainBundle] pathForResource:@"testSound" ofType:@"mp3"];
    NSURL *url = [NSURL fileURLWithPath: path];
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL: url error:nil];
}

- (IBAction)pushPlay:(id)sender {
    if(!self.player.isPlaying){
        [self.player play];
    }
}
- (IBAction)pushPause:(id)sender {
    if(self.player.isPlaying){
        [self.player pause];
    }
}
- (IBAction)pushStop:(id)sender {
    if(self.player.isPlaying){
        [self.player stop];
        self.player.currentTime = 0.0;
    }
}

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

@end

iOSアプリを開発しはじめるにあたってまず読んだ本

前回紹介したObjective-Cの基本を解説した記事を読んだ後、本を読んだらサンプルコードの意味が分かった。

買ってた本は、
新居雅行「iOSアプリケーション開発入門」と、國井貴浩「iPhoneアプリ開発のコツとツボ」

 

新居雅行「iOSアプリケーション開発入門」
2012年8月10日初版第一刷。ARC使用。

「クラウド住所録を作ろう」というのが、三章に渡ってある。ネットワークにアクセスしてデータをやりとりする方法。ここで、Amazon Web ServiceのSimpleDBを用いるんだけど、この登録から利用開始までの流れがスムーズすぎてびっくりした。電話確認がオートマティック。

テーブル、画面遷移。データの保存、変更、削除。をあつかう。

あと、縞板風の模様があしらってあるカバー、凹凸があって手触りがおもしろい。

 

 

國井貴浩「iPhoneアプリ開発のコツとツボ」
2012年4月10日初版第一刷。ARC使わない。

「落書きアプリケーション」の作成を通して、Objective-C、iPhoneアプリの作り方を学ぶ。

特徴。Xcodeであらかじめ用意されているいろいろ機能つきひな形、ボタンなどのUIを用いない。

Empty Applicationからはじめる。「落書きアプリケーション」で必要な機能を順を追って、付け加えていく。

色を選択するパレットを描くには?  選ばれたものを知るには?
描いた画像を保存するには?  画像をロードするには?
サムネイル画像が並んだ画面を作るには?  スクロールはどうする?
・・・と、ステップを踏みながら、進めていく。

UIViewに機能を付け加えて、ボタンの役割を果たせるようにする。
など、自作していくことによって、iPhoneアプリの仕組みが理解できる。

CALayerについて詳しい記述がある。例えば、ハート型を描いてグラデーションをかけて塗りつぶすには?考え方、手順を解説。

iOSアプリを作り始めて、Objective-Cってどういう言語なんだ?ってなったとき参考になったサイト

iOSアプリを作ろうと思い立って、本を買った。

サンプルプログラムをぺちぺち打ち込んでいく。打ち込んでいくうちにObjective-Cがどういうものか分かってくるだろう。
とおもってたけど、さっぱり何をやっているのかつかめない。

「なんだ、このinterfaceは?(←Javaのinterfaceと混同している)」「関数名が長い?というか、ものすごくずらずらとくっついてきてるのは?」
など、混乱。

そういうわけで、Objective-Cの基本を解説した記事

Cocoaの素、Objective-Cを知ろう(1):Objective-Cは特殊な言語? (1/2) – @IT

を読んだ。

「@interface」でクラスを宣言し、そのクラスがどんな変数やメソッドを保持しているかを示します。「@implementation」ではメソッドの具体的な処理内容を実装します。

Objective-Cでは、メソッドの引数の1つ1つに、メッセージ式で利用するためのキーワード(メッセージキーワード)を指定することができます。メッセージキーワードは、上記のmyIntのように:(コロン)の前に記述します。そして、それらすべてのキーワードをつないだものが、そのメソッドのメソッド名ということになります。

この連載記事で、ようやっとObjective-Cのソースコードの意味が分かるようになってきた。めっちゃ、勉強になった。

この連載は、8回連載で記事一覧はこちら。

「Cocoaの素、Objective-Cを知ろう」最新記事一覧

Xcodeのショートカットキーやmac操作のtips

mac、Xcodeでカーソルを操作する際

ctrl + P : 上の行にカーソルを移動する。
ctrl + N : 下の行にカーソルを移動する。
(Xcodeで、コード補完機能での選択の際にも使える。)

cttl + D : カーソルの右側の文字を消去する。fn + deleteキーと同じ効果。(Windowsでのdeleteキー)
ctrl + H : カーソルの左側の文字を消去する。deleteキーと同じ効果。(Windowsでのbackspaceキー)

ctrl + K : カーソルの右側の文字を行末まで削除する。

command + shift + →(右矢印) : 選択開始位置から、行末までのテキストを選択。
command + shift + ←(右矢印) : 選択開始位置から、その行の先頭までのテキストを選択。

ctrl + J : ひらがなに変換。
ctrl + K : カタカナに変換。

mac

「右クリック」と指示があったなら、macでは、ctrl + クリック と同等。

ファイルやアプリケーションを選択しているとき、command+Oで開く(Open)。ダブルクリックでの挙動と同じ。

新規フォルダ作成 : shift + command + N

ファイルを選択しているとき、enterキー(returnキー)を押すと、名前の変更。(WindowsでいうF2キー)

ゴミ箱に入れる : ファイルを選択して、command + delete。

記号、特殊文字を入力

Mac 記号や特殊文字のキーボードショートカットまとめ(133種類) / Inforati

• : option + 8 (ビュレット(Bullet (typography) – Wikipedia, the free encyclopedia)。箇条書きのさいに使う)
· : shift + option + 9 (中黒)

safari

更新 : command + R (WindowsでいうF5キー)

次のタブに移動 : ctrl + tab
前のタブに移動 : ctrl + shift + tab
タブを閉じる : command + W

Finder

• 開いたときに表示されるフォルダを設定する
デフォルトでは、Finder開始したときに表示されるのは「マイファイル」だが、

Finder > 環境設定 > 新規Finderウィンドウで次を表示:

から、任意のフォルダを設定することができる

• Finderのフォルダ、ファイルをコピーしたもの(ショートカット:ctrl + C)はターミナルに貼り付けると、pathを貼り付けることができる

Finder関連のショートカットキー
  • 新規Finderウィンドウのショートカットキー : command + N
  • 新規フォルダの作成 : command + shift + N

ロシア語アルファベットの大まかな発音(iPhone用)

前回つくった、ロシア語アルファベットの大まかな発音が練習できるflash。

flashが、iPhoneでは見ることが出来ないというのを実際に体験してかなしい気持ち。

かなしいけど、これは変えられないので、javascriptで作ってみよう。

ということで、javascriptで作った

ロシア語アルファベットの大まかな発音