我正在开发录音应用程序,我想在录音开始时播放声音。
不幸的是,从iOS 5开始,当带有音频设备的AVCaptureSession
处于活动状态时,无法播放系统声音。
这是我正在使用的代码的相关部分
- (void)viewDidLoad {
[super viewDidLoad];
NSURL * soundURL = [[NSBundle mainBundle] URLForResource:@"recording-starts" withExtension:@"aif"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &_recStartSound);
//...
if ([self.captureManager setupSession]) {
// ...
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self.captureManager.session startRunning];
});
// ...
}
}
稍后,我只是致电AudioServicesPlaySystemSound(_recStartSound)
,但没有任何事情继续下去。
但是,如果我在会话设置之前进行相同的呼叫,则会按预期播放声音。
我发现这个bug report与我的问题以及this和this问题完全相关,但我找不到任何解决方法。< / p>
如何在开始录制AV之前播放短音?
答案 0 :(得分:0)
使用AVAudioPlayer播放声音。
答案 1 :(得分:0)
扩展sc0rp10n的答案,对问题中代码的更改只会是:
初始化声音播放器(_recStartSound属于AVAudioPlayer *类型):
- (void)viewDidLoad {
[super viewDidLoad];
NSURL * soundURL = [[NSBundle mainBundle] URLForResource:@"recording-starts" withExtension:@"aif"];
_recStartSound = [[AVAudioPlayer alloc] initWithContentsOfURL: soundURL error: NULL];
...
}
当你想播放声音时:
[_recStartSound play];
答案 2 :(得分:0)
请参阅Are there any other iOS system sounds available other than 'tock'?
在系统声音可用的一些试验和错误之后,在iOS 8.1.3 / iPhone 6上,我能够播放这两个:
AudioServicesPlaySystemSound(1114);
和
AudioServicesPlaySystemSound(1113);
链接后,只需要一行代码即可播放声音:
AudioToolbox / AudioToolbox.h
(见上文链接了解更多详情)
这里有可用声音的部分列表(来自上面的评论) http://iphonedevwiki.net/index.php/AudioServices