当AVCaptureSession处于活动状态时,AudioServicesPlaySystemSound

时间:2013-07-30 20:13:30

标签: ios avcapturesession audiotoolbox

我正在开发录音应用程序,我想在录音开始时播放声音。

不幸的是,从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与我的问题以及thisthis问题完全相关,但我找不到任何解决方法。< / p>

如何在开始录制AV之前播放短音?

3 个答案:

答案 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