2010-05-29 49 views
10

試圖找出爲什麼需要將setloopback設置爲真 來檢測麥克風活動。沒有麥克風活動,並將setLoopBack設置爲false - AS3

問題是使用帶有內置麥克風的Macbook時的回聲反饋。

如果有人對此有一些想法,請告訴我。

現在我正在試驗切換增益,這取決於模擬回聲降低的活動。雖然不是最優的。

@lessfame

+0

我有同樣的問題。我需要顯示麥克風活動而不將音頻發送到揚聲器。回聲呈現Flash音頻錄製無用... – 2011-07-25 17:19:51

回答

13

我一直在尋找類似的解決方案這一個,然後我找到了你,你可以申請一個聲音轉換成麥克風控制麥克風輸入的輸出音量的音量。

所以可以這樣很容易做到:

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

我知道你在一年前問這個問題了,但以爲我把它放在任何人尋找一個答案。
乾杯,
意願

4

我知道這是一個老問題,但剛剛遇到問題。

沒有與Speex編解碼器中的錯誤作爲這裏要注意:Microphone soundTransform and SPEEX codec bug

這個錯誤基本上說,使用Speex編解碼忽略的聲音轉換。作爲解決這個問題的方法之一,我設置了一個切換功能來切換麥克風的設置,以在音頻連接到NetStream之前顯示活動並解決錯誤。

注意:當應用程序監視麥克風時,麥克風對象只會分派活動事件。因此,如果您不調用setLoopBack(true),爲示例數據事件添加偵聽器,或者將麥克風附加到NetStream對象,則不會分派任何活動事件。 AS3 Docs

設置麥克風:(m是一個實例變量)

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! 

切換爲 '離線' 和 '在線' 活動監控

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; 
    } 
} 

切換編解碼器有助於減少帶寬。

希望這有助於節省一些人的時間。