AS3麦克风电平随时间降低 - 内置噪声补偿?

时间:2014-07-07 21:14:17

标签: flash audio air microphone noise-reduction

我正在尝试使用ActionScript 3和Adobe AIR测量麦克风级别。这个过程应该很简单,但我得到的结果很奇怪。执行代码时,如果我创建稳定的噪音流(例如,吹入麦克风或录制人群),几秒钟后,麦克风报告的电平完全下降。如果我停止本底噪声然后重新启动,话筒电平会再次上升。

看起来在麦克风输入上有一些额外的处理,但我不知道如何关闭它。我试过了:

setSilenceLevel(0)
setUseEchoSuppression(false)

甚至

codec = SoundCodec.SPEEK
enableVAR = false;
noiseSuppressionLevel = 0;

这种现象似乎与基本的microphone.activityLevel以及对样本数据ByteArray的更全面的分析一起发生。

看看这个例子:http://www.audiostretch.com/spectrum/这不是我的代码,但说明了这种现象。尝试吹入麦克风,同时保持稳定音量约2秒钟。突然间光谱刚刚下降。停止吹,再次启动,它又回来了!

更新 我甚至尝试定期更改silenceLevel,如下所示。这似乎解决了初始测试中的问题,但随后的测试表明情况并非如此。

var resetTimer = new Timer(2500);
resetTimer.addEventListener(TimerEvent.TIMER, resetMicrophone);
resetTimer.start();

// later...
private function resetMicrophone(event:TimerEvent):void {
    trace("Microphone OFF");
    microphone.setSilenceLevel(100);

    setTimeout(function() {
        microphone.setSilenceLevel(0);
        trace("Microphone ON");
    }, 250);
}

那么,有人解决这个问题并有一个解决方法吗?

1 个答案:

答案 0 :(得分:1)

它必须是特定于平台的问题。我刚刚在Safari中使用最新的(调试器)Flash播放器版本(14,0,0,145)进行测试,使用Logitech C170网络摄像头进行麦克风;声源稳定,即使一分钟后,频谱分析仪的电平也没有下降。我建议您检查一下您的系统偏好设置(在Mac上)或控制面板(Windows),并在音频设置中查找“自动增益控制”(AGC),“背景噪音抑制”或类似的任何内容,然后转向它关闭。