2010-05-29 10 views
10

Próbuję ustalić, dlaczego setloopback musi być ustawiony na wartość true , aby wykryć aktywność mikrofonu.Brak aktywności mikrofonu z ustawieniem setLoopBack na false - AS3

Problem polega na sprzężeniu echa podczas korzystania z macbook z wbudowanym mikrofonem.

Jeśli ktoś ma jakieś pomysły na ten temat, daj mi znać.

W tej chwili eksperymentuję z przełączaniem wzmocnienia, w zależności od aktywności, aby symulować redukcję echa. Nie jest to optymalne.

@lessfame

+0

Mam ten sam problem. Muszę wyświetlić aktywność mikrofonu bez wysyłania dźwięku do głośników. Echo renderuje nagrywanie dźwięku Flash bezużyteczne ... –

Odpowiedz

13

szukałem podobnego rozwiązania tego jednego, potem znalazłem, że można zastosować transformację dźwięku mikrofonu do kontrolowania głośności podawanych objętości wejścia mikrofonowego.

Więc można to zrobić to w prosty sposób:

var st:SoundTransform = new SoundTransform(0); 
mic.soundTransform = st; 

wiem, że zadał to pytanie prawie rok temu, ale pomyślałem, że umieścić go dla nikogo szuka odpowiedzi.
Pozdrowienia,
Będzie

4

Wiem, że to stare pytanie, ale właśnie natknąłem się na problem.

Jest to błąd z kodekiem SPEEX jak wspomniano tutaj: Microphone soundTransform and SPEEX codec bug

Ten błąd w zasadzie mówi, że przy użyciu kodeka SPEEX ignoruje dźwięk przekształcać. W ramach tej pracy ustawiam funkcję przełączania, aby zmienić ustawienia mikrofonu, aby wyświetlać aktywność, zanim dźwięk zostanie dołączony do NetStream i obejść problem.

Uwaga: Obiekt Mikrofon wysyła tylko zdarzenia aktywności, gdy aplikacja monitoruje mikrofon. Jeśli więc nie wywołasz funkcji setLoopBack (true), dodaj detektor zdarzeń przykładowych danych lub podłącz mikrofon do obiektu NetStream, a następnie nie zostaną wysłane żadne zdarzenia działań. AS3 Docs

Konfiguracja Mic: (m jest zmienną instancji)

m = Microphone.getMicrophone(); 
m.setSilenceLevel(0); 
m.gain = 75; 
m.setUseEchoSuppression(true); 
m.rate = 16; //rate only applies to NELLYMOSER Codec - but 16 kHz matches SPEEX default setting 
m.setLoopBack(true); //necessary to get activity 
m.codec = SoundCodec.NELLYMOSER; //this is default 
m.soundTransform = new SoundTransform(0); //mute so you don't get crazy echo! 

Przełącz do trybu offline 'i' działalności 'on-line' Monitorowanie

protected function audioMeterToggle(switch:String) { 
    if(switch == "offline") { 
     m.setLoopBack(true); 
     m.soundTransform.volume = 0; 
     m.codec = SoundCodec.NELLYMOSER; 
    } else { 
     m.setLoopBack(false); 
     m.soundTransform.volume = 1; 
     m.codec = SoundCodec.SPEEX; 
    } 
} 

kodeki Przełączanie pomaga zmniejszyć przepustowość.

Mam nadzieję, że pomoże to komuś zaoszczędzić trochę czasu.

Powiązane problemy