flash.media
public final class SoundMixer
继承SoundMixer Inheritance Object

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

SoundMixer 类包含 SWF 文件中全局声音控件的静态属性和方法。 SoundMixer 类控制 SWF 中嵌入的声音流;它并不控制动态创建的 Sound 对象(即在 ActionScript 中创建的 Sound 对象)。



公共 属性
 属性定义方
  bufferTime : int
[static] 在开始传输嵌入的声音流之前,将其预加载到缓冲区中所用的秒数。
SoundMixer
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
 Inheritedprototype : Object
[static] 对类或函数对象的原型对象的引用。
Object
  soundTransform : SoundTransform
[static] 控制全局声音属性的 SoundTransform 对象。
SoundMixer
公共 方法
 方法定义方
  
[static] 确定是否因安全限制而无法访问任何声音。
SoundMixer
  
computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
[static] 获取当前声音波形的快照,并将其放在指定的 ByteArray 对象中。
SoundMixer
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
设置循环操作动态属性的可用性。
Object
  
[static] 停止当前正在播放的所有声音。
SoundMixer
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
属性详细信息
bufferTime属性
bufferTime:int  [read-write]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

在开始传输嵌入的声音流之前,将其预加载到缓冲区中所用的秒数。 除非实现了一个跨域策略文件,否则已加载声音中的数据(包括其缓冲时间)无法被位于其它域的 SWF 文件访问。 有关安全性和声音的详细信息,请参阅 Sound 类说明。

SoundMixer.bufferTime 属性只会影响 SWF 中嵌入声音流的缓冲时间,该属性与动态创建的 Sound 对象(即在 ActionScript 中创建的 Sound 对象)无关。 SoundMixer.bufferTime 的值无法覆盖或设置传递到 Sound.load() 方法的 SoundLoaderContext 对象中指定的缓冲时间默认值。


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

另请参见

soundTransform属性 
soundTransform:SoundTransform  [read-write]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

控制全局声音属性的 SoundTransform 对象。 SoundTransform 对象包含用于设置音量、平移、左扬声器指定和右扬声器指定的属性。 SoundTransform 对象只会影响 SWF 文件内嵌入的声音。 在此属性中使用的 SoundTransform 对象提供最终声音设置,这些设置将在应用了任何个别声音设置之后应用于所有声音。


实现
    public static function get soundTransform():SoundTransform
    public function set soundTransform(value:SoundTransform):void

另请参见

方法详细信息
areSoundsInaccessible()方法
public static function areSoundsInaccessible():Boolean

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

确定是否因安全限制而无法访问任何声音。 例如,如果声音的服务器没有跨域策略文件(该文件用于授予对 SWF 文件域的访问权限),则无法访问从 SWF 文件域以外的域中加载的声音。 仍然可以加载和播放声音,但无法对不可访问的声音执行低级操作,如获取声音的 ID3 元数据。

返回
Boolean

另请参见

computeSpectrum()方法 
public static function computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

获取当前声音波形的快照,并将其放在指定的 ByteArray 对象中。 这些值已设置为标准浮点值(范围为 -1.0 到 1.0)格式。新值覆盖了传递到 outputArray 参数的 ByteArray 对象。 创建的 ByteArray 对象的大小固定为 512 个浮点值,其中前 256 个值表示左声道,后 256 个值表示右声道。

注意:此方法受本地文件安全性限制和跨域加载限制的约束。 如果正在使用本地 SWF 文件或从服务器(该服务器与执行调用的 SWF 在不同的域中)中加载的声音,则可能需要通过跨域策略文件来解决沙箱限制问题。 有关详细信息,请参阅 Sound 类说明。

在 Flash Player Update 3 及更高版本中,通过 RTMP 支持此方法。 在 Flash Media Server 上,可以在服务器端脚本中控制对流的访问。 有关详细信息,请参阅 Server-Side ActionScript Language Reference for Adobe Flash Media Server(《Adobe Flash Media Server 服务器端 ActionScript 语言参考》)中的 Client.audioSampleAccessClient.videoSampleAccess 属性。

参数

outputArray:ByteArray — 用于保存与声音关联的值的 ByteArray 对象。 如果由于安全性限制 (areSoundsInaccessible == true) 而导致任何声音不可用,则 outputArray 对象将保持不变。 如果停止了所有声音,则用零填充 outputArray 对象。
 
FFTMode:Boolean (default = false) — 一个用于指示是否首先对声音数据执行 Fourier 转换的布尔值。 将此参数设置为 true 会导致方法返回的是频谱而不是原始声音波形。 在频谱中,左侧表示的是低频,右侧表示的是高频。
 
stretchFactor:int (default = 0) — 声音采样的分辨率。 如果将 stretchFactor 值设置为 0,则会按 44.1 KHz 对数据进行采样;如果值为 1,则按 22.05 KHz 对数据进行采样;如果值为 2,则按 11.025 KHz 对数据进行采样;依此类推。

另请参见


示例

在下面的示例中,使用 computeSpectrum() 方法生成声音波形数据的图形表示形式。

在构造函数中,加载了一个声音文件,并将其设置为播放。 (此示例中没有任何错误处理代码,并假定该声音文件位于与 SWF 文件相同的目录中。) 该示例在播放声音时侦听 Event.ENTER_FRAME 事件,从而反复触发 onEnterFrame() 方法以绘制声音数据值的图表。 在播放完声音后,onPlaybackComplete() 方法可通过删除 Event.ENTER_FRAME 事件的侦听器以停止绘制过程。

onEnterFrame() 方法中,computeSpectrum() 方法在 bytes 字节数组对象中存储原始声音。 数据是按 44.1 KHz 进行采样的。 包含 512 字节数据的字节数组,每个数组包含一个介于 -1 和 1 之间的浮点值。 第一组 256 字节值表示左声道,而第二组 256 字节值表示右声道。 第一个 for 循环读取第一组 256 字节数据值(表示左立体声道),然后使用 Graphics.lineTo() 方法绘制一条从每个点到下一个点的直线。 (声音波形的矢量图形显示内容直接写入到类的 Sprite 对象中。) 声音字节是作为 32 位浮点数从字节流中读取的,并乘以绘制高度以使其位于图表垂直范围内。 宽度被设置为声道长度的两倍。 第二个 for 循环读取下一批 256 字节值(右立体声道),并按相反的顺序绘制直线。 g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);g.lineTo(0, PLOT_HEIGHT); 方法绘制波形的基线。 生成的波形图会产生镜像效果。

package {
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;
    import flash.text.TextField;

    public class SoundMixer_computeSpectrumExample extends Sprite {

        public function SoundMixer_computeSpectrumExample() {
            var snd:Sound = new Sound();
            var req:URLRequest = new URLRequest("Song1.mp3");
            snd.load(req);
            
            var channel:SoundChannel;
            channel = snd.play();
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
        }

        private function onEnterFrame(event:Event):void {
            var bytes:ByteArray = new ByteArray();
            const PLOT_HEIGHT:int = 200;
            const CHANNEL_LENGTH:int = 256;

            SoundMixer.computeSpectrum(bytes, false, 0);
            
            var g:Graphics = this.graphics;
            
            g.clear();
       
            g.lineStyle(0, 0x6600CC);
            g.beginFill(0x6600CC);
            g.moveTo(0, PLOT_HEIGHT);
            
            var n:Number = 0;
            
            for (var i:int = 0; i < CHANNEL_LENGTH; i++) {
                n = (bytes.readFloat() * PLOT_HEIGHT);
                g.lineTo(i * 2, PLOT_HEIGHT - n);
            }

            g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
            g.endFill();
 
            g.lineStyle(0, 0xCC0066);
            g.beginFill(0xCC0066, 0.5);
            g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
            
            for (i = CHANNEL_LENGTH; i > 0; i--) {
                n = (bytes.readFloat() * PLOT_HEIGHT);
                g.lineTo(i * 2, PLOT_HEIGHT - n);
            }
  
            g.lineTo(0, PLOT_HEIGHT);
            g.endFill();
        }
        
        private function onPlaybackComplete(event:Event):void {
            removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
    }
}

stopAll()方法 
public static function stopAll():void

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

停止当前正在播放的所有声音。

此方法不停止播放头。 设置到流的声音在播放头移过它们所在的帧时将恢复播放。

使用此属性时,请考虑 Flash Player 安全模型:

有关详细信息,请参阅以下部分:


示例

在下面的示例中,使用 stopAll() 方法将同时播放的两种声音静音。

在构造函数中,加载了两个不同的声音文件,并将其设置为播放。 第一种声音是本地加载的,并将其分配给一个声道。 (假定该文件位于与 SWF 文件相同的目录中。) 第二个文件是从 Adobe 站点加载并流式传输的。 若要使用 SoundMixer.stopAll() 方法,必须能够访问所有声音。 (可以使用 SoundLoaderContext 对象来检查跨域策略文件。) 每种声音还包含一个事件侦听器,如果在加载声音文件时发生 IO 错误,则会调用该事件侦听器。 还创建了一个 muteButton 文本字段。 它侦听鼠标单击,这将调用 muteButtonClickHandler() 方法。

muteButtonClickHandler() 方法中,如果文本字段的内容为“MUTE”,areSoundsInaccessible() 方法将检查混音器是否具有文件的访问权限。 如果可以访问文件,stopAll() 方法将停止播放声音。 通过再次单击文本字段,将开始播放第一种声音,并再次将文本字段的内容更改为“MUTE”。 此时,stopAll() 方法将正在播放的那种声音静音。 请注意,也可以使用声道的 stop() 方法停止播放为声道分配的特定声音。 (若要使用声道功能,每次调用 play() 方法时,都需要为声道重新分配声音。)

package {
    import flash.display.Sprite;
    import flash.net.URLRequest;
    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.MouseEvent;
    import flash.events.IOErrorEvent;

    public class SoundMixer_stopAllExample extends Sprite  {
        private var firstSound:Sound = new Sound();
        private var secondSound:Sound = new Sound();
        private var muteButton:TextField = new TextField();
        private var channel1:SoundChannel = new SoundChannel();
        
        public function SoundMixer_stopAllExample() {
            firstSound.load(new URLRequest("mySound.mp3"));
            secondSound.load(new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"));

            firstSound.addEventListener(IOErrorEvent.IO_ERROR, firstSoundErrorHandler);
            secondSound.addEventListener(IOErrorEvent.IO_ERROR, secondSoundErrorHandler);
            
            channel1 = firstSound.play();
            secondSound.play();
            
            muteButton.autoSize = TextFieldAutoSize.LEFT;
            muteButton.border = true;
            muteButton.background = true;
            muteButton.text = "MUTE";
        
            muteButton.addEventListener(MouseEvent.CLICK, muteButtonClickHandler);         
        
            this.addChild(muteButton);
        }

        private function muteButtonClickHandler(event:MouseEvent):void {

            if(muteButton.text == "MUTE") {        
  
                if(SoundMixer.areSoundsInaccessible() == false) {
                    SoundMixer.stopAll();
                    muteButton.text = "click to play only one of sound.";
                }
                else {
                    muteButton.text = "The sounds are not accessible.";
                }
            }
           else {
                firstSound.play();        
                muteButton.text = "MUTE";
           }
        } 

        private function firstSoundErrorHandler(errorEvent:IOErrorEvent):void {
            trace(errorEvent.text);
        }

        private function secondSoundErrorHandler(errorEvent:IOErrorEvent):void {
            trace(errorEvent.text);
        }
    }
}




 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/9.0_cn/ActionScriptLangRefV3/flash/media/SoundMixer.html