ActionScript 3 및 Adobe AIR을 사용하여 마이크 레벨을 측정하려고합니다. 과정은 아주 간단해야하지만, 결과는 기괴합니다. 코드를 실행하는 동안 잡음이 꾸준히 발생하면 (예 : 마이크를 불거나 군중을 녹음하는 경우) 몇 초 후에 마이크에서보고 된 레벨이 완전히 떨어집니다. 노이즈 플로어를 멈추었다가 다시 시작하면 마이크 레벨이 다시 올라갑니다.AS3 시간이 지남에 따라 마이크 레벨이 감소합니다 - 내장 노이즈 보상?
마이크 입력에서 추가 처리가 진행된 것처럼 보입니다. 그러나 마이크 입력을 끄는 방법을 모르겠습니다. 나는 시도했다 :
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);
}
그래서, 누군가는이 문제를 해결하고, 해결 방법이 있습니까?
Gerry에게 답변하기 위해 스윙 해 주셔서 감사합니다. 내 생각 엔 당신이 맞다. 바탕 화면과 iOS 및 iOS에서 동일한 코드를 실행 중이며 Mac/Win AIR에서는 설명하는 드롭 아웃이 표시되지 않습니다. 하드웨어/OS와 관련이 있어야합니다. –