AVFoundationを使ってBGMを再生する


タイマーが0になると、アラーム音を鳴らす処理が必要になったので、BGMの再生方法を調べてみた。
どうやら、「AVFoundation」というフレームワークを使うらしい。
もう一つ似たようなフレームワークに「MediaPlayer」というものがあるけど、こっちは30秒ほどの短いBGM用みたい。

まずはヘッダをインポートする。

#import <AVFoundation/AVFoundation.h>

オブジェクトの生成はこんな感じ。

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"alert" ofType:@"wav"]];
NSError *error = nil;
AVAudioPlayer *player;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];

ここまで書くと、あとは…再生するだけ。

[player start];

でも、ここでちょっと問題が…。再生する直前に少し待ち時間ができてしまう。。。
事前にオブジェクトは生成しているのに、何をしてるんだろう…。
ってことで調べてみると、再生する前に音楽ファイルが再生可能かどうかの判断をしているみたい。
なので、以下の処理をオブジェクトの生成後に加えると事前に再生可能かを判断して、あとは再生するだけ!って状態になる。

[player prepareToPlay];

これで、BGMの再生が完了!
あとは、再生停止なりループ再生なりは好きに出来るので、用途に合わせて使っていこう。

この記事を書いた人

Hoge Huga