【问题标题】:IOS AVAudioRecorder, How to record only when audio input present (non-silence)IOS AVAudioRecorder,如何仅在存在音频输入时录制(非静音)
【发布时间】:2010-10-04 13:57:35
【问题描述】:

我正在使用 AVAudioRecorder 录制来自 iphone 麦克风的音频,但我想放弃静音时段:在检测到声音时开始录制,并在下次静音时停止录制。

不知道怎么做

有什么建议吗?

谢谢!

【问题讨论】:

    标签: ios avaudiorecorder


    【解决方案1】:

    也许您可以使用 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];
    }
    

    或者类似的东西。

    【讨论】:

    • 杰克,谢谢你的回答。不能使用测光,因为它测量的是平均值和峰值。如果有混合的静音和音频输入字符串,则在静音音频之后出现新的静音时,它不会注意到。
    • 另外,仪表似乎只在 AVAudioRecorder 录制时更新。
    • 阈值是多少?
    【解决方案2】:

    我找到了基于音频队列服务的方法。当您为传入的音频数据包定义队列缓冲区时,它更复杂但也更有趣。

    如果缓冲区已满,您需要定义回调,因此缓冲区中充满了您可以根据需要处理的数据包,在我的情况下是为了检测静音和其他一些事情。

    稍后有更多时间发布解决方案。如果有人催促,那就等不及给我发电子邮件,我很乐意提供帮助。

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

    【讨论】:

    • “如果有人催促,等不及给我发一封电子邮件,我很乐意提供帮助”那么您的电子邮件 ID 在哪里?
    • @玛莎。我可以在我的项目中使用 SpeakHear 示例吗?
    【解决方案3】:

    在开始真正录制之前,您可以通过录制到垃圾文件来确定背景音频电平:

    AVAudioRecorder stops working when writing to /dev/null on iPhone 5s with iOS 7

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2012-05-06
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多