AudioPlayerを使っての音を鳴らしてみた
AudioPlayerを使って「笛」の音を鳴らしてみたので調べたことをメモ。
肝心の笛(ホイッスル)の音声をどう作ったかはそのうち書きます。
今回使うAudioPlayerはAVFoundationというフレームワークに入っています。
(上の画像で赤い所にあたります。)
音楽再生のプログラミングはC言語で書かなければいけないものが多くて、コードが複雑になりがちです。
「AVAudioPlayer」はそんなオーディオ再生を「Objective-C」で扱えるようにしたクラスです。
Appleの「Multimedia Programing Guide」を読んだら、
ステレオ再生とか正確な同期、ネットからストリーム再生をしないなら、
これ使ったらいいよ的な内容の文がありました。
If your application does not require stereo positioning or precise synchronization, and if you are not playing audio captured from a network stream, Apple recommends that you use this class for playback.
ざっくりとできること
topへ・持続時間を指定した再生
・ファイルまたはメモリバッファからの音声の再生
・音楽のループ
・複数の音声の同時再生(正確な同期でなくてよければ)
・相対的な音声の再生レベルのコントロール
・音声ファイル内の指定位置へのシーク、早送りや巻き戻しとか
・オーディオレベルのメータリングに使えるオーディオパワーの取得
なにはなくとも早速準備してみます。
まず以下の画像のように音源ファイルをiTuensから適当に取り出して、
プロジェクトにドロップします。
次にボタンを一つおいて「Action」をつなげます。(.mファイルにつなげています)
(参考:OutletとActionの作成)
今回試したコード
topへ簡単に試すために全部.mファイルの中に突っ込んでます。
動かすためにはAVFoundationフレームワークを追加しないとだめです。
(参考:フレームワークを追加する。)
#import "WhistleViewController.h" //フレームワークのインポート文 #import <AVFoundation/AVFoundation.h> @interface WhistleViewController () { AVAudioPlayer *player; } @property (nonatomic, retain) AVAudioPlayer *player; - (IBAction)playWhistle:(id)sender; @end @implementation WhistleViewController @synthesize player; - (void)viewDidLoad { [super viewDidLoad]; NSString *soundFilePath = [[NSBundle mainBundle] pathForResource: @"whistle1" ofType: @"mp3"]; NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath]; AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: nil]; self.player = newPlayer; [player prepareToPlay]; } //笛をならすボタン - (IBAction)playWhistle:(id)sender{ [player play]; }
iOSで音声を再生するプログラミングをするには以下のドキュメントが参考になりそう。
(Multimedia Programing Guideは英語です。)