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の音をフェードアウトさせずに音を鳴らすことができた。
コメント
コメントを投稿