8.8.访问用户的麦克风并创建声音显示

8.8.1. 问题
我需要访问用户的麦克风并使用麦克风的音量绘制一个音量。
8.8.2. 解决办法
使用Microphone.getMicrophone 方法访问microphone。访问音量方法使用Microphone 类的mic.activityLevel 属性监测定期区间。
8.8.3. 讨论
麦克风类提供了访问用户的麦克风和计算机的方法,用户必须允许你的Flash Player 程序使用类访问。Microphone 类显示麦克风检测的音量,在开始时和一段时间内没有声音时触发事件。

Microphone 类的3 个属性监视和控制着监测活动。只读的activityLevel 属性表示从麦克风监测到的声音音量,范围从0 到100。silenceLevel 属性表示活动的麦克风需要的音量并且触发ActivityEvent.ACTIVITY 事件。silenceLevel 属性同样使用0 到100 范围,默认值是10。

silenceTimeout 属性描述活动级别低于安静水平的毫秒数,直到ActivityEvent.ACTIVITY 事件被触发, 表明该麦克风现在处于无声。默认的silenceTimeout 值是2000 。虽然Microphone.silenceLevel 和Microphone.silenceTimeout 都是只读, 你仍然可以使用Microphone.setSilenceLevel 方法改变他们的值。

接下来的例子创建一个Microphone 对象,这将提示用户接受或拒绝的Flash Player 访问麦克风。于是,以后的麦克风的活动通过检测Activity 事件被检测, 一个enter frame 事件监听器被添加,并将在Canvas 中绘制一个麦克风音量。
+展开
-XML
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxmlwidth="400"
height="300creationComplete="createMic()">

<mx:Script>
<![CDATA[
import flash.media.Microphone;
import flash.events.ActivityEvent;
import flash.events.Event;
import flash.events.StatusEvent;
public var mic:Microphone;
public function createMic():void
{
mic = Microphone.getMicrophone();
mic.setLoopBack(true);
mic.addEventListener(ActivityEvent.ACTIVITY, activity);
mic.addEventListener(StatusEvent.STATUS, status);
mic.addEventListener(Event.ACTIVATE, active);
}
private function active(event:Event):void
{
trace(' active ');
}
private function status(event:StatusEvent):void
{
trace("status");
}
private function activity(event:ActivityEvent):void
{
trace("active ");
addEventListener(Event.ENTER_FRAME, showMicLevel);
}
private function showMicLevel(event:Event):void
{
trace(mic.gain+" "+mic.activityLevel+" "+mic.silenceLevel+
" "+mic.rate);
level.graphics.clear();
level.graphics.beginFill(0xccccff, 1);
level.graphics.drawRect(0, 0, (mic.activityLevel * 30),
100);
level.graphics.endFill();
}

]]>
</mx:Script>
<mx:Canvas width="300height="50id="level"/>
</mx:VBox>

加支付宝好友偷能量挖...


评论(0)网络
阅读(95)喜欢(0)flash/flex/fcs/AIR