iPhoneアプリで簡単に効果音などを再生するには?(AudioToolbox編)
先日iPhoneで音を簡単に鳴らす方法を書いた。
琴線探査: iPhoneアプリで簡単に効果音などを再生するには?
これはAVAudioPlayerを使う方法だったのだが、その後一つ問題があることがわかった。
iPodをバックグラウンドで再生している状態でAVAudioPlayerを使って音を再生すると、iPodの音が自動的にフェードアウトして停止してしまうのだ。
これが都合がよい場合もあるが、そうでない場合もある。今回は都合が悪かった。そこで、AVAudioPlayerと同様に簡単なAudioToolboxを使う方法に変更した。
例えばこのようにする。
このコードをコンパイルするには、AudioToolbox.frameworkをリンクして、ヘッダーに「AudioToolbox/AudioToolbox.h」をimportしておく必要がある。
iPodの音をフェードアウトさせずに音を鳴らすことができた。
琴線探査: iPhoneアプリで簡単に効果音などを再生するには?
これはAVAudioPlayerを使う方法だったのだが、その後一つ問題があることがわかった。
iPodをバックグラウンドで再生している状態でAVAudioPlayerを使って音を再生すると、iPodの音が自動的にフェードアウトして停止してしまうのだ。
これが都合がよい場合もあるが、そうでない場合もある。今回は都合が悪かった。そこで、AVAudioPlayerと同様に簡単なAudioToolboxを使う方法に変更した。
例えばこのようにする。
/**
*
* システムサウンド再生完了時のコールバック用関数(Cスタイル)
* (このコールバックを使うメソッドの前に定義を書く必要がある。
* ヘッダーに関数の登録をする必要は無いようだ)
*
*/
static void onSoundFinished(SystemSoundID sndId, void *info) {
//サウンドIDの割り当てを解除
NSLog(@"システムサウンド割り当て解除");
AudioServicesDisposeSystemSoundID(sndId);
}
/**
*
* サウンド再生ボタンタッチアップ時
*
*/
- (IBAction)onTouchUpInsideBtnPlaySound {
//サウンドのURLを構築
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"sound" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:path];
//システムサウンドIDの割り当て
SystemSoundID sndId;
OSStatus err = AudioServicesCreateSystemSoundID((CFURLRef)url, &sndId);
if (err) {
NSLog(@"システムサウンド割り当て失敗:%@\n", err);
} else {
//サウンド再生完了時のコールバックを追加
AudioServicesAddSystemSoundCompletion(sndId, NULL, NULL, onSoundFinished, NULL);
//サウンド再生
AudioServicesPlaySystemSound(sndId);
}
}
このコードをコンパイルするには、AudioToolbox.frameworkをリンクして、ヘッダーに「AudioToolbox/AudioToolbox.h」をimportしておく必要がある。
iPodの音をフェードアウトさせずに音を鳴らすことができた。
コメント
コメントを投稿