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

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

SoundChannel 类控制应用程序中的声音。每个声音均分配给一个声道,而且应用程序可以具有混合在一起的多个声道。SoundChannel 类包含 stop() 方法、用于监控声道幅度(音量)的属性以及用于对声道指定 SoundTransform 对象的属性。

查看示例

另请参见

Sound
SoundTransform


公共属性
 属性定义方
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  leftPeak : Number
[只读 (read-only)] 左声道的当前幅度(音量),范围从 0(静音)至 1(最大幅度)。
SoundChannel
  position : Number
[只读 (read-only)] 当播放声音时,position 属性指示声音文件中当前播放的位置。
SoundChannel
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
  rightPeak : Number
[只读 (read-only)] 右声道的当前幅度(音量),范围从 0(静音)至 1(最大幅度)。
SoundChannel
  soundTransform : SoundTransform
分配给该声道的 SoundTransform 对象。
SoundChannel
公共方法
 方法定义方
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
EventDispatcher
 Inherited
将事件调度到事件流中。
EventDispatcher
 Inherited
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
EventDispatcher
 Inherited
指示对象是否已经定义了指定的属性。
Object
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
EventDispatcher
 Inherited
设置循环操作动态属性的可用性。
Object
  
停止在该声道中播放声音。
SoundChannel
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
 Inherited
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
EventDispatcher
事件
 事件 摘要 定义方
 Inherited[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
 Inherited[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。EventDispatcher
  在声音完成播放后调度。SoundChannel
属性详细信息
leftPeak属性
leftPeak:Number  [只读 (read-only)]

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

左声道的当前幅度(音量),范围从 0(静音)至 1(最大幅度)。



实现
    public function get leftPeak():Number
position属性 
position:Number  [只读 (read-only)]

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

当播放声音时,position 属性指示声音文件中当前播放的位置。当停止或暂停播放声音时,position 属性指示声音文件中上次播放的位置。

一种常见使用情形是,在停止播放声音时保存 position 属性的值。以后,您可以从保存的位置重新开始以恢复播放声音。

如果循环播放声音,则在每次循环开始时,将 position 重置为 0。



实现
    public function get position():Number
rightPeak属性 
rightPeak:Number  [只读 (read-only)]

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

右声道的当前幅度(音量),范围从 0(静音)至 1(最大幅度)。



实现
    public function get rightPeak():Number
soundTransform属性 
soundTransform:SoundTransform  [读写]

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

分配给该声道的 SoundTransform 对象。SoundTransform 对象包含用于设置音量、平移、左扬声器指定和右扬声器指定的属性。



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

另请参见

方法详细信息
stop()方法
public function stop():void

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

停止在该声道中播放声音。


示例

在下面的示例中,用户可以单击按钮来暂停并重放声音文件。

在构造函数中,加载了该声音文件。(本示例假定该文件位于与 SWF 文件相同的目录中。)将一个文本字段用作按钮,供用户播放或暂停声音时使用。当用户单击 button 文本字段时,将调用 clickHandler() 方法。

clickHandler() 方法中,当用户第一次单击该文本字段时,会将声音设置为播放并将声音分配给声道。然后,当用户再次单击该文本字段时,则会将声音设置为暂停,声音将停止播放。声道的 position 属性记录声音停止时的位置。此属性用于在用户单击该文本字段以重新开始播放后从该位置开始恢复播放声音。每次调用 Sound.play() 方法时,将创建一个新的 SoundChannel 对象并将其分配给 channel 变量。若要使用声道的 stop() 方法暂停声音,必须将 Sound 对象分配给 SoundChannel 对象。

package {
    import flash.display.Sprite;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.events.MouseEvent;
    import flash.text.TextFieldAutoSize;
            
    public class SoundChannel_stopExample extends Sprite {
        private var snd:Sound = new Sound();
        private var channel:SoundChannel = new SoundChannel();
        private var button:TextField = new TextField();

        public function SoundChannel_stopExample() {
            var req:URLRequest = new URLRequest("MySound.mp3");
            snd.load(req);
            
            button.x = 10;
            button.y = 10;
            button.text = "PLAY";
            button.border = true;
            button.background = true;
            button.selectable = false;
            button.autoSize = TextFieldAutoSize.CENTER;

            button.addEventListener(MouseEvent.CLICK, clickHandler);

            this.addChild(button);
        }

        private function clickHandler(e:MouseEvent):void {
            var pausePosition:int = channel.position;

            if(button.text == "PLAY") {
                channel = snd.play(pausePosition);
                button.text = "PAUSE";
            } 
            else {
                channel.stop();
                button.text = "PLAY";
            }
        }
    }
}
事件详细信息
soundComplete 事件
事件对象类型: flash.events.Event
属性 Event.type = flash.events.Event.SOUND_COMPLETE

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

在声音完成播放后调度。

Event.SOUND_COMPLETE 常量定义 soundComplete 事件对象的 type 属性值。

此事件具有以下属性:

属性
bubbles false
cancelable false;没有要取消的默认行为。
currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
target 已结束声音播放的 Sound 对象。

示例

在下面的示例中,用户从播放列表中选择一些歌曲,然后单击“Play”(播放)以按选定的顺序播放歌曲。

在构造函数中,定义了一个用于保存歌曲列表的文本字段和一个用于选择播放的行。(通常,使用按钮来表示歌曲列表的播放和列表框。)定义了一个文本格式对象,以便在选择歌曲行后将其格式更改为斜体。当用户单击该文本字段时,将调用 clickHandler() 方法。

clickHandler() 方法中,文本字段对象的 getLineIndexAtPoint() 方法返回用户所单击的行的索引。通过使用行索引,getLineText() 方法可获取文本的内容。if 语句检查用户是否已选择播放歌曲或将歌曲添加到播放列表中。如果用户已选择播放并选择了歌曲,则会删除鼠标单击的事件侦听器,然后调用 playNext() 方法以开始播放歌曲。如果用户已选择歌曲名称,则会将该行的内容添加到 songList 数组中,并将行的格式设置为斜体。

playNext() 方法循环访问数组列表以加载并播放每首歌曲。还会将歌曲分配给声道。添加了一个声道事件侦听器,以便在播放完歌曲时做出响应,然后调度 Event.SOUND_COMPLETE 事件。soundCompleteHandler() 方法随后调用 playNext() 方法以播放下一首歌曲。此过程继续进行,直至播放完数组中列出的所有歌曲。

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

    public class SoundChannel_event_soundCompleteExample extends Sprite {
        private var channel:SoundChannel = new SoundChannel();
        private var songList:Array = new Array();
        private var listTextField:TextField = new TextField();
        private var songFormat:TextFormat = new TextFormat();
        private var arrayIndex:int = 0;
        private var songSelected:Boolean = false;
        
        public function SoundChannel_event_soundCompleteExample() {
            
            listTextField.autoSize = TextFieldAutoSize.LEFT;
            listTextField.border = true
            listTextField.background = true;
            listTextField.text = "Song1.mp3\n" + "Song2.mp3\n" 
                                + "Song3.mp3\n" + "Song4.mp3\n" + "PLAY";
        
            songFormat.italic = true;
 
            listTextField.addEventListener(MouseEvent.CLICK, clickHandler);
                        
            addChild(listTextField);
        }
        
        private function clickHandler(e:MouseEvent):void {
            var index:int = listTextField.getLineIndexAtPoint(e.localX, e.localY);
            var line:String = listTextField.getLineText(index);
            var firstIndex:uint = listTextField.getLineOffset(index);
            var playLine:uint = listTextField.numLines - 1;

                if((index == playLine) && (songSelected == true)) {
                    listTextField.removeEventListener(MouseEvent.CLICK, clickHandler);
                    playNext();       

                } else if (index != playLine) {
                     songList.push(line.substr(0, (line.length - 1)));
                     listTextField.setTextFormat(songFormat, firstIndex, 
                                (firstIndex + listTextField.getLineLength(index)));     
                    songSelected = true;
                 }
        }

        private function playNext():void {
 
             if(arrayIndex < songList.length) {
                var snd:Sound = new Sound();
                snd.load(new URLRequest(songList[arrayIndex]));
                channel = snd.play();
                
                channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
                arrayIndex++;
 
            } else {
                songSelected = false;
                    
                while(arrayIndex > 0) {
                    songList.pop();
                    arrayIndex--;
                }
            }
        }    

        private function soundCompleteHandler(e:Event):void {
            playNext();
        }

        private function errorHandler(errorEvent:IOErrorEvent):void {
            trace(errorEvent.text);
        }
    }
}
示例 如何使用示例
SoundChannelExample.as

以下示例加载一个 MP3 文件,进行播放,并显示在加载和播放该 MP3 文件时所发生的声音事件的相关信息。Timer 对象每 50 毫秒提供一次有关播放头位置的更新信息。若要运行此示例,请将一个名为 MySound.mp3 的文件放在 SWF 文件所在的同一目录中。
package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLRequest;
    import flash.utils.Timer;

    public class SoundChannelExample extends Sprite {
        private var url:String = "MySound.mp3";
        private var soundFactory:Sound;
        private var channel:SoundChannel;
        private var positionTimer:Timer;

        public function SoundChannelExample() {
            var request:URLRequest = new URLRequest(url);
            soundFactory = new Sound();
            soundFactory.addEventListener(Event.COMPLETE, completeHandler);
            soundFactory.addEventListener(Event.ID3, id3Handler);
            soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            soundFactory.load(request);

            channel = soundFactory.play();
            channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);

            positionTimer = new Timer(50);
            positionTimer.addEventListener(TimerEvent.TIMER, positionTimerHandler);
            positionTimer.start();
        }
        

        private function positionTimerHandler(event:TimerEvent):void {
            trace("positionTimerHandler: " + channel.position.toFixed(2));
        }

        private function completeHandler(event:Event):void {
            trace("completeHandler: " + event);
        }

        private function id3Handler(event:Event):void {
            trace("id3Handler: " + event);
        }

        private function ioErrorHandler(event:Event):void {
            trace("ioErrorHandler: " + event);
            positionTimer.stop();       
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("progressHandler: " + event);
        }

        private function soundCompleteHandler(event:Event):void {
            trace("soundCompleteHandler: " + event);
            positionTimer.stop();
        }
    }
}