[AS3]as3检测麦克风活动
检测麦克风活动
为节省带宽和处理资源,Flash Player 将尝试检测何时麦克风不传输声音。当麦克风的活动级别处于静音级别阈值以下一段时间后,Flash Player 将停止传输音频输入,并改为调度一个简单的 ActivityEvent。如果使用 Speex 编解码器(Flash Player 10 或更高版本和 Adobe AIR 1.5 或更高版本中提供),请将静音级别设置为 0,以确保应用程序持续传输音频数据。Speex 语音活动检测将自动减少带宽。
Microphone 类的以下三个属性用于监视和控制活动检测:
-
activityLevel 只读属性指示麦克风检测的音量,范围从 0 到 100。
-
silenceLevel 属性指定激活麦克风并调度 ActivityEvent.ACTIVITY 事件所需的音量。silenceLevel 属性也使用从 0 到 100 的范围,默认值为 10。
-
silenceTimeout 属性描述活动级别处于静音级别以下多长时间(以毫秒为单位)后,才会调度 ActivityEvent.ACTIVITY 事件以指示麦克风现在处于静音状态。silenceTimeout 默认值是 2000。
Microphone.silenceLevel 属性和 Microphone.silenceTimeout 属性都是只读的,但可以使用 Microphone.setSilenceLevel() 方法来更改它们的值。
在某些情况下,在检测到新活动时激活麦克风的过程可能会导致短暂的延迟。通过将麦克风始终保持活动状态,可以消除此类激活延迟。应用程序可以调用 Microphone.setSilenceLevel() 方法并将 silenceLevel 参数设置为零,以通知 Flash Player 将麦克风保持活动状态并持续收集音频数据,即使未检测到任何声音也是如此。反之,如果将 silenceLevel 参数设置为 100,则可以完全禁止激活麦克风。
以下示例显示了有关麦克风的信息,并报告 Microphone 对象调度的 activity 事件和 status 事件:
- import flash.events.ActivityEvent;
- import flash.events.StatusEvent;
- import flash.media.Microphone;
- var deviceArray:Array = Microphone.names;
- trace("Available sound input devices:");
- for (var i:int = 0; i < deviceArray.length; i++)
- {
- trace(" " + deviceArray[i]);
- }
- var mic:Microphone = Microphone.getMicrophone();
- mic.gain = 60;
- mic.rate = 11;
- mic.setUseEchoSuppression(true);
- mic.setLoopBack(true);
- mic.setSilenceLevel(5, 1000);
- mic.addEventListener(ActivityEvent.ACTIVITY, this.onMicActivity);
- mic.addEventListener(StatusEvent.STATUS, this.onMicStatus);
- var micDetails:String = "Sound input device name: " + mic.name + '\n';
- micDetails += "Gain: " + mic.gain + '\n';
- micDetails += "Rate: " + mic.rate + " kHz" + '\n';
- micDetails += "Muted: " + mic.muted + '\n';
- micDetails += "Silence level: " + mic.silenceLevel + '\n';
- micDetails += "Silence timeout: " + mic.silenceTimeout + '\n';
- micDetails += "Echo suppression: " + mic.useEchoSuppression + '\n';
- trace(micDetails);
- function onMicActivity(event:ActivityEvent):void
- {
- trace("activating=" + event.activating + ", activityLevel=" +
- mic.activityLevel);
- }
- function onMicStatus(event:StatusEvent):void
- {
- trace("status: level=" + event.level + ", code=" + event.code);
- }
在运行上面的示例时,对着系统麦克风说话或发出噪音,并观察所生成的、显示在控制台或调试窗口中的 trace 语句。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例