没有将setLoopBack设置为false的麦克风活动 - AS3

时间:2010-05-29 23:18:45

标签: flash actionscript-3 audio

试图找出为什么需要将setloopback设置为true 用于检测麦克风活动。

问题是使用内置麦克风的macbook时的回声反馈。

如果有人对此有任何想法,请告诉我。

现在我正在尝试切换增益,这取决于模拟回声减少的活动。虽然不是最佳的。

@lessfame

2 个答案:

答案 0 :(得分:13)

我正在寻找类似的解决方案,然后我发现你可以对麦克风应用声音变换来控制麦克风输入的输出音量。

因此可以轻松完成:

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

我知道你差不多一年前就问过这个问题了,但我想我会为任何寻找答案的人提出这个问题。
干杯,

答案 1 :(得分:4)

我知道这是一个古老的问题但只是遇到了问题。

SPEEX编解码器存在错误,如下所示:Microphone soundTransform and SPEEX codec bug

这个bug基本上说使用SPEEX编解码器会忽略声音转换。为解决这个问题,我设置了一个切换功能,可以在将音频附加到NetStream之前切换麦克风的设置以显示活动,并解决错误。

  

注意:当您的应用程序监控麦克风时,Microphone对象仅调度Activity事件。因此,如果不调用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;
    }
}

切换编解码器有助于减少带宽。

希望这有助于节省一些时间。