| 包 | flash.media |
| 类 | public final class SoundChannel |
| 继承 | SoundChannel EventDispatcher Object |
| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
stop() 方法、用于监控声道幅度(音量)的属性以及用于对声道指定 SoundTransform 对象的属性。
另请参见
| 属性 | 定义方 | ||
|---|---|---|---|
![]() | constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | |
| leftPeak : Number [只读 (read-only)] 左声道的当前幅度(音量),范围从 0(静音)至 1(最大幅度)。 | SoundChannel | ||
| position : Number [只读 (read-only)] 当播放声音时,position 属性指示声音文件中当前播放的位置。 | SoundChannel | ||
![]() | prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object | |
| rightPeak : Number [只读 (read-only)] 右声道的当前幅度(音量),范围从 0(静音)至 1(最大幅度)。 | SoundChannel | ||
| soundTransform : SoundTransform 分配给该声道的 SoundTransform 对象。 | SoundChannel | ||
| 方法 | 定义方 | ||
|---|---|---|---|
![]() | addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | |
![]() | 将事件调度到事件流中。 | EventDispatcher | |
![]() | 检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | |
![]() |
指示对象是否已经定义了指定的属性。 | Object | |
![]() |
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | |
![]() |
指示指定的属性是否存在、是否可枚举。 | Object | |
![]() | 从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | |
![]() |
设置循环操作动态属性的可用性。 | Object | |
停止在该声道中播放声音。 | SoundChannel | ||
![]() |
返回指定对象的字符串表示形式。 | Object | |
![]() |
返回指定对象的原始值。 | Object | |
![]() | 检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。 | EventDispatcher | |
| 事件 | 摘要 | 定义方 | ||
|---|---|---|---|---|
![]() | [广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | ||
![]() | [广播事件] 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.Eventflash.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 对象。 |
在构造函数中,定义了一个用于保存歌曲列表的文本字段和一个用于选择播放的行。(通常,使用按钮来表示歌曲列表的播放和列表框。)定义了一个文本格式对象,以便在选择歌曲行后将其格式更改为斜体。当用户单击该文本字段时,将调用 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);
}
}
}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();
}
}
}