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);
}
それで、誰かがこの問題に取り組み、回避策を持っていますか?