iPhoneの標準カメラアプリのシャッター音の鳴り方と同様にアプリで効果音を鳴らすには?
さっき書いた記事で、iPhoneの標準カメラアプリのシャッター音の扱いは盗撮対策としては不十分であることがわかったが、せめて標準カメラアプリのシャッター音と同様に効果音を鳴らすようにすることは抑止につながる。
琴線探査: iPhoneの標準カメラアプリのシャッター音の鳴り方を調べる
では、どのように鳴らせばよいのか?
このコードをコンパイルするには、AVFoundation.frameworkとAudioToolbox.frameworkをリンクし、AVFoundation/AVFoundation.hとAudioToolbox/AudioToolbox.hをimportしておく必要がある。
ポイントは
・AudioSessionを使うこと
・AudioSessionのカテゴリーとしてMediaPlaybackを使うこと
・MediaPlaybackのカテゴリーを上書きしてiPodとの共存を可能にすること
同様な動作が可能なカテゴリーとしてPlayAndRecordがあるが、このカテゴリーを設定した場合はiPodの音が極端に小さくなることがわかった。
また、AudioToolboxのAudioServicesPlaySystemSound()で同様にできればよいのだが、これはAudioSessionの設定が反映されないため、簡単に音を再生するにはAVFoundationを使うのが良いとわかった。
琴線探査: iPhoneアプリで簡単に効果音などを再生するには?
琴線探査: iPhoneアプリで簡単に効果音などを再生するには?(AudioToolbox編)
琴線探査: iPhoneの標準カメラアプリのシャッター音の鳴り方を調べる
では、どのように鳴らせばよいのか?
//AudioSession初期化 AudioSessionInitialize(NULL, NULL, NULL, NULL); //AudioSessionカテゴリーをMediaPlaybackにセット(サイレントモードに従わない、iPodと共存不可) UInt32 ssnCate = kAudioSessionCategory_MediaPlayback; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(ssnCate), &ssnCate); //MediaPlaybackカテゴリーを上書きしてiPodとの再生を共存させる UInt32 mixWithOthers = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(mixWithOthers), &mixWithOthers); //AudioSession有効化 AudioSessionSetActive(YES); //AVAudioPlayerの初期化と音再生 NSError *errPlayer; NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle pathForResource:@"shutter" ofType:@"wav"]; NSURL *url = [NSURL fileURLWithPath:path]; AVAudioPlayer player = [AVAudioPlayer alloc]; [player initWithContentsOfURL:url error:&errPlayer]; if (errPlayer) { NSLog(@"AVAudioPlayer初期化失敗:%@\n", errPlayer); } else { [player prepareToPlay]; [player play]; }
このコードをコンパイルするには、AVFoundation.frameworkとAudioToolbox.frameworkをリンクし、AVFoundation/AVFoundation.hとAudioToolbox/AudioToolbox.hをimportしておく必要がある。
ポイントは
・AudioSessionを使うこと
・AudioSessionのカテゴリーとしてMediaPlaybackを使うこと
・MediaPlaybackのカテゴリーを上書きしてiPodとの共存を可能にすること
同様な動作が可能なカテゴリーとしてPlayAndRecordがあるが、このカテゴリーを設定した場合はiPodの音が極端に小さくなることがわかった。
また、AudioToolboxのAudioServicesPlaySystemSound()で同様にできればよいのだが、これはAudioSessionの設定が反映されないため、簡単に音を再生するにはAVFoundationを使うのが良いとわかった。
琴線探査: iPhoneアプリで簡単に効果音などを再生するには?
琴線探査: iPhoneアプリで簡単に効果音などを再生するには?(AudioToolbox編)
コメント
コメントを投稿