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