·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3检测麦克风活动

时间:2016-05-13 09:36酷播
为节省带宽和处理资源,Flash Player 将尝试检测何时麦克风不传输声音。当麦克风的活动级别处于静音级别阈值以下一段时间后

检测麦克风活动

为节省带宽和处理资源,Flash Player 将尝试检测何时麦克风不传输声音。当麦克风的活动级别处于静音级别阈值以下一段时间后,Flash Player 将停止传输音频输入,并改为调度一个简单的 ActivityEvent。如果使用 Speex 编解码器(Flash Player 10 或更高版本和 Adobe AIR 1.5 或更高版本中提供),请将静音级别设置为 0,以确保应用程序持续传输音频数据。Speex 语音活动检测将自动减少带宽。

注: 当应用程序监视麦克风时,Microphone 对象只调度 Activity 事件。因此,如果不调用 setLoopBack( true )、为示例数据事件添加侦听器、将麦克风附加到 NetStream 对象,则不调度任何活动事件。

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 事件:

  1. import flash.events.ActivityEvent;  
  2. import flash.events.StatusEvent;  
  3. import flash.media.Microphone;  
  4.   
  5. var deviceArray:Array = Microphone.names;  
  6. trace("Available sound input devices:");  
  7. for (var i:int = 0; i < deviceArray.length; i++)  
  8. {  
  9.     trace(" " + deviceArray[i]);  
  10. }  
  11.   
  12. var mic:Microphone = Microphone.getMicrophone();  
  13. mic.gain = 60;  
  14. mic.rate = 11;  
  15. mic.setUseEchoSuppression(true);  
  16. mic.setLoopBack(true);  
  17. mic.setSilenceLevel(5, 1000);  
  18.       
  19. mic.addEventListener(ActivityEvent.ACTIVITY, this.onMicActivity);  
  20. mic.addEventListener(StatusEvent.STATUS, this.onMicStatus);  
  21.       
  22. var micDetails:String = "Sound input device name: " + mic.name + '\n';  
  23. micDetails += "Gain: " + mic.gain + '\n';  
  24. micDetails += "Rate: " + mic.rate + " kHz" + '\n';  
  25. micDetails += "Muted: " + mic.muted + '\n';  
  26. micDetails += "Silence level: " + mic.silenceLevel + '\n';  
  27. micDetails += "Silence timeout: " + mic.silenceTimeout + '\n';  
  28. micDetails += "Echo suppression: " + mic.useEchoSuppression + '\n';  
  29. trace(micDetails);  
  30.   
  31. function onMicActivity(event:ActivityEvent):void  
  32. {  
  33.     trace("activating=" + event.activating + "activityLevel=" +   
  34.         mic.activityLevel);  
  35. }  
  36.   
  37. function onMicStatus(event:StatusEvent):void  
  38. {  
  39.     trace("status: level=" + event.level + "code=" + event.code);  

在运行上面的示例时,对着系统麦克风说话或发出噪音,并观察所生成的、显示在控制台或调试窗口中的 trace 语句。

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器