我正在尝试使用 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);
}
那么,有人解决这个问题并有解决方法吗?