flex4 中获取Microphone,抑制回声和使用Speex编码音频的方法,该方法经过本人测试可用。
一、如果你不关心请直接把代码复制,如果想要了解细节的请继续往下看
private function getMicrophone(codec:String):Microphone { var mic:Microphone = null; mic = Microphone.getEnhancedMicrophone(); if (mic) { var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions(); options.mode = MicrophoneEnhancedMode.FULL_DUPLEX; options.autoGain = false; options.echoPath = 128; options.nonLinearProcessing = true; microphone.enhancedOptions=options; mic.setUseEchoSuppression(true); } else { mic = Microphone.getMicrophone(); } if (mic == null) { trace("No microphone! <o>"); } else { mic.addEventListener(StatusEvent.STATUS, onMicStatusEvent); mic.setLoopBack(false); mic.setSilenceLevel(0, 20000); mic.gain = 60; if (codec == "SPEEX") { mic.encodeQuality = 8; mic.codec = SoundCodec.SPEEX; mic.framesPerPacket = 2; mic.rate = 16; trace("Using SPEEX wideband codec"); } else { mic.codec = SoundCodec.NELLYMOSER; mic.rate = 8; trace("Using Nellymoser codec"); } } return mic; } protected function onMicStatusEvent(event:StatusEvent):void { trace("New microphone status event"); //trace(ObjectUtil.toString(event)); switch (event.code) { case "Microphone.Muted": break; case "Microphone.Unmuted": break; default: break; } }二、针对上面的参数进行说明.
1、Microphone提供了 getEnhancedMicrophone 方法(最好是升级到flex4.6以上,flex3肯定是没有这个api的),能够返回一个“增强麦克风",ADOBE声称可以用来创建不用头戴式耳机麦克风的音视频应用程序,用这个效果比之前的Microphone.getMicrophone()都要很多改善,包括获取音频和音频编码,还有抑制回声等.
2、mic.setLoopBack(false); 设置为false 就是禁止将麦克风捕获的音频传送到本地扬声器.如果不设置为false,你会听到自己说话的声音的。默认值是true。
3、mic.setUseEchoSuppression(true);指定是否使用音频编解码器的回音抑制功能。除非用户已经在 Flash Player 的“麦克风设置”面板中选择了“降低回音”,否则默认值为
false
。三、参考资料文献,
1、Adobe® Flex® 4 Beta 语言参考 http://www.fising.cn/docs/AS3_Reference/flash/media/Microphone.html
2、参照bigbluebutton远程教育系统的源码 https://github.com/bigbluebutton/bigbluebutton/blob/master/clients/flash/common-library/src/org/bigbluebutton/lib/voice/services/VoiceStreamManager.as
3、 Flex客户端设置speex编码时Red5对音频数据的处理以及将speex解码