flash.media
public final class Microphone
继承Microphone Inheritance EventDispatcher Inheritance Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

使用 Microphone 类可从连接到运行 Adobe AIR 的计算机的麦克风中捕获音频。使用 Microphone 类可在本地监视音频。使用 NetConnection 和 NetStream 类可将音频传输到 Flash Media Server。Flash Media Server 可以将音频发送到其他服务器,并向运行 Adobe AIR 的其他客户端广播此音频。

有关捕获视频的信息,请参阅 Camera 类。

重要说明:Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问麦克风。请确保应用程序窗口大小至少为 215 x 138 像素,这是显示对话框所需的最小尺寸。

若要创建或引用 Microphone 对象,请使用 Microphone.getMicrophone() 方法。

警告:对于应用程序安全沙箱以外的内容,会显示“隐私”对话框,用户可以从中选择是允许还是拒绝对麦克风的访问。此对话框要求应用程序窗口大小至少为 215 x 138 个像素。对于应用程序安全沙箱内的 Adobe AIR 内容,将允许访问麦克风,且不再显示该对话框。

查看示例

另请参见

flash.media.Camera
Basics of working with sound


公共属性
 属性定义方
  activityLevel : Number
[只读 (read-only)] 麦克风正在检测的音量。
Microphone
  codec : String
要用于压缩音频的编解码器。
Microphone
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  encodeQuality : int
使用 Speex 编解码器时的编码语音品质。
Microphone
  framesPerPacket : int
在一个包(消息)中传输的 Speex 语音帧的数目。
Microphone
  gain : Number
麦克风增益,即麦克风在传送信号之前将信号放大的倍数。
Microphone
  index : int
[只读 (read-only)] 麦克风的索引,它反映在 Microphone.names 返回的数组中。
Microphone
  muted : Boolean
[只读 (read-only)] 指定用户是已经拒绝对麦克风的访问 (true) 还是已经允许对麦克风的访问 (false)。
Microphone
  name : String
[只读 (read-only)] 当前声音捕获设备的名称,它由声音捕获硬件返回。
Microphone
  names : Array
[静态] [只读 (read-only)] 包含所有可用声音捕获设备名称的字符串数组。
Microphone
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
  rate : int
麦克风捕获声音时使用的频率,单位是 kHz。
Microphone
  silenceLevel : Number
[只读 (read-only)] 激活麦克风并调度 activity 事件所需的音量。
Microphone
  silenceTimeout : int
[只读 (read-only)] 麦克风停止检测声音的时间和调度 activity 事件的时间之间相差的毫秒数。
Microphone
  soundTransform : SoundTransform
在此麦克风对象处于环回模式时,控制它的声音。
Microphone
  useEchoSuppression : Boolean
[只读 (read-only)] 如果启用了回音抑制,则设置为 true;否则,设置为 false。
Microphone
公共方法
 方法定义方
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
EventDispatcher
 Inherited
将事件调度到事件流中。
EventDispatcher
  
[静态] 返回对用于捕获音频的 Microphone 对象的引用。
Microphone
 Inherited
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
EventDispatcher
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
EventDispatcher
  
setLoopBack(state:Boolean = true):void
将麦克风捕获的音频传送到本地扬声器。
Microphone
 Inherited
设置循环操作动态属性的可用性。
Object
  
setSilenceLevel(silenceLevel:Number, timeout:int = -1):void
设置可认定为有声的最低音量输入水平,以及实际静音前需经历的无声时间长度(可选)。
Microphone
  
setUseEchoSuppression(useEchoSuppression:Boolean):void
指定是否使用音频编解码器的回音抑制功能。
Microphone
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
 Inherited
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
EventDispatcher
事件
 事件 摘要 定义方
 Inherited[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
  在麦克风开始或结束会话时调度。Microphone
 Inherited[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。EventDispatcher
  在麦克风报告其状态时调度。Microphone
属性详细信息
activityLevel属性
activityLevel:Number  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

麦克风正在检测的音量。值的范围为 0(未检测到声音)到 100(检测到非常大的声音)。此属性的值有助于确定向 Microphone.setSilenceLevel() 方法传递的适当值。

如果麦克风可用,但却因为尚未调用 Microphone.getMicrophone() 而未被使用,则此属性设置为 -1。



实现
    public function get activityLevel():Number

另请参见

codec属性 
codec:String  [读写]

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

要用于压缩音频的编解码器。使用的默认编解码器为 Nellymoser 编解码器。枚举类 SoundCodec 包含各种对 codec 属性有效的值。



实现
    public function get codec():String
    public function set codec(value:String):void

另请参见

encodeQuality属性 
encodeQuality:int  [读写]

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

使用 Speex 编解码器时的编码语音品质。可能值为从 0 到 10 的值。默认值为 6。数字越大,表示品质越高,但需要更多的带宽,如下表所示。列出的比特率值表示净比特率,并不包括信息分包开销。

品质值所需的比特率(KB/秒)
03.95
15.75
27.75
39.80
412.8
516.8
620.6
723.8
827.8
934.2
1042.2



实现
    public function get encodeQuality():int
    public function set encodeQuality(value:int):void

另请参见

framesPerPacket属性 
framesPerPacket:int  [读写]

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

在一个包(消息)中传输的 Speex 语音帧的数目。每帧长 20 ms。默认值为每个包两帧。

消息中包含的 Speex 帧越多,需要的带宽就越小,但发送消息延迟的时间就越长。Speex 帧越少,需要的带宽就越大,而延迟的时间就会越短。



实现
    public function get framesPerPacket():int
    public function set framesPerPacket(value:int):void
gain属性 
gain:Number  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

麦克风增益,即麦克风在传送信号之前将信号放大的倍数。值为 0 指示 Flash Player 将其乘以 0;即麦克风不传送声音。

您可以将此设置想象为立体声音响上的音量旋钮:0 表示没有音量,50 表示正常音量。 小于 50 的数字表示低于正常音量,大于 50 的数字表示高于正常音量。有效值为 0 到 100,默认值为 50。用户可以在 Flash Player 的“麦克风设置”面板中更改此值。



实现
    public function get gain():Number
    public function set gain(value:Number):void

另请参见

index属性 
index:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

麦克风的索引,它反映在 Microphone.names 返回的数组中。



实现
    public function get index():int

另请参见

muted属性 
muted:Boolean  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指定用户是已经拒绝对麦克风的访问 (true) 还是已经允许对麦克风的访问 (false)。当该值发生变化时,将调度 status 事件。有关详细信息,请参阅 Microphone.getMicrophone()



实现
    public function get muted():Boolean

另请参见

name属性 
name:String  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

当前声音捕获设备的名称,它由声音捕获硬件返回。



实现
    public function get name():String

另请参见

names属性 
names:Array  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

包含所有可用声音捕获设备名称的字符串数组。返回名称,但不必向用户显示 Flash Player 的“专用设置”面板。此数组通过 Microphone.names.length 属性提供每个声音捕获设备的从零开始的索引和系统上声音捕获设备的数量。有关详细信息,请参阅 Array 类条目。

调用 Microphone.names 要求全面检查硬件,并可能需要几秒钟时间才能生成数组。大多数情况下,使用默认麦克风即可。

注意:若要确定当前麦克风的名称,请使用 name 属性。



实现
    public static function get names():Array

另请参见

rate属性 
rate:int  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

麦克风捕获声音时使用的频率,单位是 kHz。允许的值是声音设备支持的任何以下值:5、8、11、22 或 44。

如果您的声音捕获设备支持 8 kHz,则默认值为 8 kHz。否则,默认值为您的声音捕获设备支持且高于 8 kHz 的下一个可用捕获级别,通常为 11 kHz。



实现
    public function get rate():int
    public function set rate(value:int):void
silenceLevel属性 
silenceLevel:Number  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

激活麦克风并调度 activity 事件所需的音量。默认值为 10。



实现
    public function get silenceLevel():Number

另请参见

silenceTimeout属性 
silenceTimeout:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

麦克风停止检测声音的时间和调度 activity 事件的时间之间相差的毫秒数。默认值为 2000(2 秒)。

若要设置此值,请使用 Microphone.setSilenceLevel() 方法。



实现
    public function get silenceTimeout():int

另请参见

soundTransform属性 
soundTransform:SoundTransform  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在此麦克风对象处于环回模式时,控制它的声音。



实现
    public function get soundTransform():SoundTransform
    public function set soundTransform(value:SoundTransform):void
useEchoSuppression属性 
useEchoSuppression:Boolean  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

如果启用了回音抑制,则设置为 true;否则,设置为 false。除非用户已经在 Flash Player 的“麦克风设置”面板中选择了“降低回音”,否则默认值为 false



实现
    public function get useEchoSuppression():Boolean

另请参见

方法详细信息
getMicrophone()方法
public static function getMicrophone(index:int = -1):Microphone

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

返回对用于捕获音频的 Microphone 对象的引用。若要开始捕获音频,您必须将 Microphone 对象附加到 NetStream 对象(请参阅 NetStream.attachAudio())。

Microphone.get() 的多次调用会引用同一个麦克风。因此,如果代码包含 mic1 = Microphone.get()mic2 = Microphone.get() 行,则 mic1mic2 将引用同一个(默认)麦克风。

如果要获取默认的麦克风,则需要使用 -1 调用 getMicrophone()。如果调用此方法时不使用任何参数,则会返回列表中的第一个麦克风。

可以使用 index 属性来获取当前 Microphone 对象的索引值。然后,可以将该值传递给 Microphone 类的其它方法。

通常,不应传递 index 的值。只需使用 Microphone.getMicrophone() 方法即可返回对默认麦克风的引用。通过使用“麦克风设置”面板,用户可以指定应用程序应使用的默认麦克风。如果传递 index 的值,则可能会引用非用户选择的其它麦克风。在极少数情况下(例如,应用程序同时从两个麦克风捕获音频),您可能会使用 index

当 SWF 文件尝试访问 Microphone.getMicrophone() 返回的对象时(例如,在调用 NetStream.attachAudio() 时),Flash Player 将显示“隐私”对话框,用户可从中选择是允许还是拒绝访问麦克风。(确保舞台大小至少为 215 x 138 个像素;这是 Flash Player 显示该对话框所需的最小大小。)

当用户对此对话框做出响应时,将调度 status 事件以指示用户的响应。还可以检查 Microphone.muted 属性以确定用户是允许还是拒绝访问麦克风。

如果 Microphone.getMicrophone() 返回 null,则表明麦克风正由其他应用程序使用,或者系统上没有安装任何麦克风。若要确定是否安装了任何麦克风,请使用 Microphones.names.length。若要显示 Flash Player 的“麦克风设置”面板(用户可从中选择 Microphone.getMicrophone 所引用的麦克风),请使用 Security.showSettings()

参数

index:int (default = -1) — 麦克风的索引值。

返回
Microphone — 对用于捕获音频的 Microphone 对象的引用。

事件
status:StatusEvent — 在麦克风报告其状态时调度。如果 code 属性的值为“Microphone.Muted”,则表示用户拒绝 SWF 文件访问其麦克风。如果 code 属性的值为“Microphone.Unmuted”,则表示用户允许 SWF 文件访问其麦克风。

另请参见

setLoopBack()方法 
public function setLoopBack(state:Boolean = true):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

将麦克风捕获的音频传送到本地扬声器。

参数

state:Boolean (default = true)

setSilenceLevel()方法 
public function setSilenceLevel(silenceLevel:Number, timeout:int = -1):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

设置可认定为有声的最低音量输入水平,以及实际静音前需经历的无声时间长度(可选)。

活动检测是检测声音级别在何时表示某人正在谈话的功能。当某人没有谈话时,由于不需要发送关联的音频流,因此可以节约带宽。此信息也可用于视频反馈,以便让用户知道他们(或其他人)没有谈话。

静音值与活动值直接对应。完全静音对应于活动值 0。持续噪音(根据当前增益设置可以检测到的噪音)对应于活动值 100。当增益得到适当调整之后,在您没有说话时,活动值将小于静音值;在您说话时,活动值将大于静音值。

此方法与 Camera.setMotionLevel() 类似;这两种方法都用于指定何时调度 activity 事件。不过,这两种方法在对发布流的影响上具有显著的差异:

参数

silenceLevel:Number — 激活麦克风并调度 activity 事件所需的音量。可接受值的范围为 0 到 100。
 
timeout:int (default = -1) — 在没有活动的情况下经过的毫秒数,必须经过这么长的时间,Flash Player 或 Adobe AIR 才会认为声音已停止并调度 dispatch 事件。默认值为 2000(2 秒)。(注意:在签名中显示的默认值 -1 是一个内部值,用于指示 Flash Player 或 Adobe AIR 使用 2000。)

另请参见

setUseEchoSuppression()方法 
public function setUseEchoSuppression(useEchoSuppression:Boolean):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

指定是否使用音频编解码器的回音抑制功能。除非用户已经在 Flash Player 的“麦克风设置”面板中选择了“降低回音”,否则默认值为 false

回音抑制是指降低音频回馈效果,当扬声器发出的声音由同一台计算机上的麦克风拾取时,将导致音频回馈。(这不同于回音消除,后者完全消除回馈。)

通常情况下,当通过同一台计算机上的扬声器(而不是耳机)播放所捕获的声音时,建议使用回音抑制。如果您的 SWF 文件允许用户指定声音输出设备,则当他们指定使用扬声器并且还将使用麦克风时,您可能需要调用 Microphone.setUseEchoSuppression(true)

用户也可以在 Flash Player 的“麦克风设置”面板中调整这些设置。

参数

useEchoSuppression:Boolean — 一个用于指示是应该使用 (true) 还是不应该使用 (false) 回音抑制的布尔值。

另请参见

事件详细信息
activity 事件
事件对象类型: flash.events.ActivityEvent
属性 ActivityEvent.type = flash.events.ActivityEvent.ACTIVITY

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在麦克风开始或结束会话时调度。

若要指定触发 activating 属性值为 true 的此事件所需的音量,或者指定在没有声音的情况下经过多长时间才会触发 activating 属性值为 false 的此事件,请使用 Microphone.setSilenceLevel()

ActivityEvent.ACTIVITY 常数定义 activity 事件对象的 type 属性值。

此事件具有以下属性:

属性
activating 如果设备已激活则为 true,如果被取消激活则为 false
bubbles false
cancelable false;没有要取消的默认行为。
currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
target 开始或结束会话的对象,如 Camera 或 Microphone 对象。

另请参见

status 事件  
事件对象类型: flash.events.StatusEvent
属性 StatusEvent.type = flash.events.StatusEvent.STATUS

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在麦克风报告其状态时调度。如果 code 属性的值为“Microphone.Muted”,则表示用户拒绝 SWF 文件访问麦克风。如果 code 属性的值为“Microphone.Unmuted”,则表示用户允许 SWF 文件访问麦克风。

定义 status 事件对象的 type 属性值。

此事件具有以下属性:

属性
bubbles false
cancelable false;没有要取消的默认行为。
code 对象状态的描述。
currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
level 消息类别,例如 "status""warning""error"
target 报告其状态的对象。

另请参见

示例 如何使用示例
MicrophoneExample.as

以下示例在用户允许访问其计算机的麦克风后通过使用麦克风的回音抑制捕获声音。Security.showSettings() 方法显示 Flash Player 对话框,请求提供对用户的麦克风的访问权限。对 setLoopBack(true) 的调用会将输入重新发送到本地扬声器,以便在运行示例时可以听到声音。

有两个侦听器用于侦听 activitystatus 事件。activity 事件在会话开始和结束(如果有)时被调度,并由 activityHandler() 方法捕获(此方法跟踪有关该事件的信息)。status 事件在附加的 Microphone 对象报告任何状态信息时被调度;将使用 statusHandler() 方法捕获并跟踪此信息。

注意:必须将麦克风与计算机连接,此示例才能正常运行。

package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.media.Microphone;
    import flash.system.Security;

    public class MicrophoneExample extends Sprite {
        public function MicrophoneExample() {
            var mic:Microphone = Microphone.getMicrophone();
            Security.showSettings("2");
            mic.setLoopBack(true);
                    
            if (mic != null) {
                mic.setUseEchoSuppression(true);
                mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
                mic.addEventListener(StatusEvent.STATUS, statusHandler);
            }
        }

        private function activityHandler(event:ActivityEvent):void {
            trace("activityHandler: " + event);
        }

        private function statusHandler(event:StatusEvent):void {
            trace("statusHandler: " + event);
        }
    }
}