iOS AVAudioRecorder,如何仅在音频输入存在时(非静音状态)录制?

18

我正在使用AVAudioRecorder从iPhone的麦克风录制音频,但我想丢弃静音期:当检测到声音时开始录制,下一个静默时停止录制。

不知道如何实现

有什么建议吗?

谢谢!

3个回答

13

或许您可以利用AVAudioRecorder对音频水平计量的支持来跟踪音频水平,并在音频水平高于给定阈值时启用录制。您需要使用以下命令启用计量:

[anAVAudioRecorder setMeteringEnabled:YES];

然后你可以定期调用:

[anAVAudioRecorder updateMeters];
power = [anAVAudioRecorder averagePowerForChannel:0];
if (power > threshold && anAVAudioRecorder.recording==NO) {
    [anAVAudioRecorder record];
} else if (power < threshold && anAVAudioRecorder.recording==YES) {
    [anAVAudioRecorder stop];
}

或者类似于此。


2
Jake,谢谢你的回答。不能使用计量作为它所测量的是平均值和峰值。如果有一串静音和音频输入的混合字符串,当在静音-音频之后出现新的静音时,它不会注意到。 - Martha
3
看起来仪表只有在AVAudioRecorder录制时才会更新。 - arlomedia
阈值是多少? - Saurabh Jain

4

我已经找到一种基于音频队列服务的方法。虽然它更加复杂,但也更有趣,因为您可以定义传入音频数据的队列缓冲区。

您需要定义当缓冲区满时的回调函数,这样您就可以处理缓冲区中的音频数据包,以便按照您的需求进行处理,就像我的情况一样,用于检测静默和其他一些东西。

稍后,我会发布解决方案。如果有人急需帮助,可以给我发电子邮件,我很乐意提供帮助。

在此处查看SpeakHere示例:http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html


3
如果有人着急需要帮助,请发邮件给我,我很乐意提供帮助。那么你的电子邮件地址在哪里? - Dinesh Raja
@Martha。我可以在我的项目中使用SpeakHear示例吗? - Gajendra K Chauhan

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接