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編)
コメント
コメントを投稿