as3中操作Sound
作者:Rogiture 日期:2007-11-05
今天了解下在ActionScript3中如何加载外部mp3并对其进行操作,主要用到了两个类:Sound,SoundChannel。
新建个Flash CS3文档,在属性中将文档类设置为:As3Sound。
拖个mp3文件至同一级目录中,取名为MySound.mp3(最好是有id3信息的mp3文件)。
在同一级目录中新建个as文档,取名为As3Sound.as,输入如下代码:
程序代码
源文件下载
新建个Flash CS3文档,在属性中将文档类设置为:As3Sound。
拖个mp3文件至同一级目录中,取名为MySound.mp3(最好是有id3信息的mp3文件)。
在同一级目录中新建个as文档,取名为As3Sound.as,输入如下代码:

package
{
import flash. display. Sprite;
import flash. events.*;
import flash. media. Sound;
import flash. media. SoundChannel;
import flash. net. URLRequest;
import flash. utils. Timer;
import flash. text. TextField;
public class As3Sound extends Sprite
{
private var url: String = "MySound.mp3";
private var soundFactory: Sound;
private var channel: SoundChannel;
private var positionTimer: Timer;
private var play_btn: Sprite;
private var stop_btn: Sprite;
//用于记录音乐现在是否为暂停状态
private var bSoundStop: Boolean = false;
public function As3Sound()
{
var mp3_request: URLRequest = new URLRequest( url);
soundFactory = new Sound();
//成功加载数据后
soundFactory. addEventListener( Event. COMPLETE, completeHandler);
//在存在可用于 MP3 声音的 ID3 数据时
soundFactory. addEventListener( Event. ID3, id3Handler);
//加载音乐错误时
soundFactory. addEventListener( IOErrorEvent. IO_ERROR, ioErrorHandler);
//音乐加载中...
soundFactory. addEventListener( ProgressEvent. PROGRESS, progressHandler);
soundFactory. load(mp3_request);
channel = soundFactory. play();
//音乐播放完成
channel. addEventListener( Event. SOUND_COMPLETE, soundCompleteHandler);
//用Timer监听音乐的播放进度
positionTimer = new Timer(1000);
positionTimer. addEventListener( TimerEvent. TIMER, positionTimerHandler);
positionTimer. start();
//创建一个按钮,用于播放音乐
play_btn = new Sprite();
play_btn. graphics. beginFill(0xCCCCCC);
play_btn. graphics. drawRoundRect(0, 0, 80, 18, 10, 10);
play_btn. graphics. endFill();
var play_txt: TextField = new TextField();
play_txt. text = " 播放";
play_txt. selectable = false;
play_btn. addChild(play_txt);
play_btn. addEventListener( MouseEvent. CLICK, soundPlay);
addChild(play_btn);
//创建一个按钮,用于停止音乐
stop_btn = new Sprite();
stop_btn. graphics. beginFill(0xCCCCCC);
stop_btn. graphics. drawRoundRect(0, 0, 80, 18, 10, 10);
stop_btn. graphics. endFill();
stop_btn.x = 100;
var stop_txt: TextField = new TextField();
stop_txt. text = " 暂停";
stop_txt. selectable = false;
stop_btn. addChild(stop_txt);
stop_btn. addEventListener( MouseEvent. CLICK, soundStop);
addChild(stop_btn);
}
//监听音乐的播放进度
private function positionTimerHandler( event: TimerEvent):void
{
var ybf: int = channel. position. toFixed(0);
var zcd: int = soundFactory. length;
var bfs: int = Math. floor(ybf/zcd*100);
trace( "音乐总长度:"+zcd, "音乐已播放:"+ybf, "播放进度为:"+bfs+ "%");
}
//加载音乐完成时
private function completeHandler( event: Event):void
{
trace( "加载音乐完成: " + event);
}
//在存在可用于MP3声音的ID3数据时
private function id3Handler( event: Event):void
{
trace( "音乐的ID3信息如下:");
for ( var s in soundFactory. id3) {
trace( "/t", s, ":", soundFactory. id3[s]);
}
trace( "关于ID3信息介绍,请参见Sound类-->属性-->id3");
}
//加载音乐错误时
private function ioErrorHandler( event: Event):void
{
trace( "加载音乐错误,错误信息如下:" + event);
positionTimer. stop();
}
//加载音乐时
private function progressHandler( event: ProgressEvent):void
{
var yjz: int = event. bytesLoaded;
var zcd: int = event. bytesTotal;
var bfs: int = Math. floor(yjz/zcd*100);
trace( "音乐总长度:"+zcd, "已加载: "+yjz, "加载进度为:"+bfs+ "%");
}
//音乐播放完成
private function soundCompleteHandler( event: Event):void
{
trace( "音乐播放完成: " + event);
positionTimer. stop();
}
//点击播放按钮事件
private function soundPlay( event: MouseEvent):void
{
if (bSoundStop) {
bSoundStop = false;
channel = soundFactory. play(channel. position. toFixed(0));
}
}
//点击停止按钮事件
private function soundStop( event: MouseEvent):void
{
if (!bSoundStop) {
bSoundStop = true;
channel. stop();
}
}
}
}
{
import flash. display. Sprite;
import flash. events.*;
import flash. media. Sound;
import flash. media. SoundChannel;
import flash. net. URLRequest;
import flash. utils. Timer;
import flash. text. TextField;
public class As3Sound extends Sprite
{
private var url: String = "MySound.mp3";
private var soundFactory: Sound;
private var channel: SoundChannel;
private var positionTimer: Timer;
private var play_btn: Sprite;
private var stop_btn: Sprite;
//用于记录音乐现在是否为暂停状态
private var bSoundStop: Boolean = false;
public function As3Sound()
{
var mp3_request: URLRequest = new URLRequest( url);
soundFactory = new Sound();
//成功加载数据后
soundFactory. addEventListener( Event. COMPLETE, completeHandler);
//在存在可用于 MP3 声音的 ID3 数据时
soundFactory. addEventListener( Event. ID3, id3Handler);
//加载音乐错误时
soundFactory. addEventListener( IOErrorEvent. IO_ERROR, ioErrorHandler);
//音乐加载中...
soundFactory. addEventListener( ProgressEvent. PROGRESS, progressHandler);
soundFactory. load(mp3_request);
channel = soundFactory. play();
//音乐播放完成
channel. addEventListener( Event. SOUND_COMPLETE, soundCompleteHandler);
//用Timer监听音乐的播放进度
positionTimer = new Timer(1000);
positionTimer. addEventListener( TimerEvent. TIMER, positionTimerHandler);
positionTimer. start();
//创建一个按钮,用于播放音乐
play_btn = new Sprite();
play_btn. graphics. beginFill(0xCCCCCC);
play_btn. graphics. drawRoundRect(0, 0, 80, 18, 10, 10);
play_btn. graphics. endFill();
var play_txt: TextField = new TextField();
play_txt. text = " 播放";
play_txt. selectable = false;
play_btn. addChild(play_txt);
play_btn. addEventListener( MouseEvent. CLICK, soundPlay);
addChild(play_btn);
//创建一个按钮,用于停止音乐
stop_btn = new Sprite();
stop_btn. graphics. beginFill(0xCCCCCC);
stop_btn. graphics. drawRoundRect(0, 0, 80, 18, 10, 10);
stop_btn. graphics. endFill();
stop_btn.x = 100;
var stop_txt: TextField = new TextField();
stop_txt. text = " 暂停";
stop_txt. selectable = false;
stop_btn. addChild(stop_txt);
stop_btn. addEventListener( MouseEvent. CLICK, soundStop);
addChild(stop_btn);
}
//监听音乐的播放进度
private function positionTimerHandler( event: TimerEvent):void
{
var ybf: int = channel. position. toFixed(0);
var zcd: int = soundFactory. length;
var bfs: int = Math. floor(ybf/zcd*100);
trace( "音乐总长度:"+zcd, "音乐已播放:"+ybf, "播放进度为:"+bfs+ "%");
}
//加载音乐完成时
private function completeHandler( event: Event):void
{
trace( "加载音乐完成: " + event);
}
//在存在可用于MP3声音的ID3数据时
private function id3Handler( event: Event):void
{
trace( "音乐的ID3信息如下:");
for ( var s in soundFactory. id3) {
trace( "/t", s, ":", soundFactory. id3[s]);
}
trace( "关于ID3信息介绍,请参见Sound类-->属性-->id3");
}
//加载音乐错误时
private function ioErrorHandler( event: Event):void
{
trace( "加载音乐错误,错误信息如下:" + event);
positionTimer. stop();
}
//加载音乐时
private function progressHandler( event: ProgressEvent):void
{
var yjz: int = event. bytesLoaded;
var zcd: int = event. bytesTotal;
var bfs: int = Math. floor(yjz/zcd*100);
trace( "音乐总长度:"+zcd, "已加载: "+yjz, "加载进度为:"+bfs+ "%");
}
//音乐播放完成
private function soundCompleteHandler( event: Event):void
{
trace( "音乐播放完成: " + event);
positionTimer. stop();
}
//点击播放按钮事件
private function soundPlay( event: MouseEvent):void
{
if (bSoundStop) {
bSoundStop = false;
channel = soundFactory. play(channel. position. toFixed(0));
}
}
//点击停止按钮事件
private function soundStop( event: MouseEvent):void
{
if (!bSoundStop) {
bSoundStop = true;
channel. stop();
}
}
}
}
