1

ActionScript 3 と Adob​​e 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);
}

それで、誰かがこの問題に取り組み、回避策を持っていますか?

4

1 に答える 1