7

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

AVCaptureSession不幸的是,从 iOS 5 开始,当带有音频设备的设备处于活动状态时,它似乎无法播放系统声音。

这是我正在使用的代码的相关部分

- (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),没有任何进展。但是,如果我在会话设置之前进行相同的调用,声音会按预期播放。

我发现了这个错误报告,它与我的问题以及这个这个问题完全相关,但我在其中都找不到任何解决方法。

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

4

3 回答 3

1

改为使用 AVAudioPlayer 播放声音。

于 2013-08-08T19:38:57.597 回答
0

请参阅除“tock”之外还有其他可用的 iOS 系统声音吗?

在对可用的系统声音进行了一些试验和错误之后,在 iOS 8.1.3 / iPhone 6 上,我能够播放这两个:

音频服务播放系统声音(1114);

音频服务播放系统声音(1113);

链接后只需一行代码即可播放声音

  • 音频工具箱/AudioToolbox.h

    (有关详细信息,请参阅上面的链接)

这是可用声音的部分列表(来自上面的评论) http://iphonedevwiki.net/index.php/AudioServices

于 2015-03-09T11:26:15.360 回答
-1

扩展 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];
于 2014-08-30T11:12:27.763 回答