範例: http://mcr.tw/stu/gjun/carino/flash/%E9%9F%B3%E6%A8%82%E6%92%AD%E6%94%BE/%E6%96%B0%E5%A2%9E%E9%9F%B3%E6%A8%82XML.swf

檔案下載: http://mcr.tw/stu/gjun/carino/flash/%E9%9F%B3%E6%A8%82%E6%92%AD%E6%94%BE/   (下載 mp3及fla)

 

AS3:

//import--------------------------------------------------------------
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundChannel;
import fl.events.SliderEvent;
import flash.media.SoundTransform;

//宣告變數-----------------------------------------------------------
var ldr:URLLoader = new URLLoader ;
var path:URLRequest = new URLRequest ;
var musicpath:URLRequest = new URLRequest ;
var snd:Sound = new Sound ;
var sndChannel:SoundChannel = new SoundChannel ;
var sndTransform:SoundTransform = new SoundTransform ;
var playsec:Number = 0;
var mute:int = 0;

//監聽---------------------------------------------------------------------
ldr.addEventListener(Event.COMPLETE,FnXML);
play_btn.addEventListener(MouseEvent.CLICK,FnPlay);
stop_btn.addEventListener(MouseEvent.CLICK,FnStop);
pause_btn.addEventListener(MouseEvent.CLICK,FnPause);
up.addEventListener(MouseEvent.CLICK,FnUp);
down.addEventListener(MouseEvent.CLICK,FnDown);
mute_btn.addEventListener(MouseEvent.CLICK,FnMute);

bar.addEventListener(MouseEvent.MOUSE_DOWN,FnMouseDown)
bar.addEventListener(SliderEvent.CHANGE,FnSlideUp)/*用SliderEvent.CHANGE會比用MouseEvent.MOUSE_UP好,因為用SliderEvent.CHANGE可以在舞台上任何位置放開滑鼠右鍵,滑桿鈕都還偵測的到,但SliderEvent.CHANGE無法*/

for (var i:int=1; i<=3; i++)
{
this["b" + i].addEventListener(MouseEvent.CLICK,FnClick);
}

//尋找路徑,不能包在COMPLETE FN中不然會找不到路徑;
path.url = "mp3/music.xml";
ldr.load(path);

//載入XML的訊息
function FnXML(e:Event)
{
var xml:XML = new XML(ldr.data);
musicpath.url = "mp3/" + xml["music"]["path"][0];
snd.load(musicpath);
snd.addEventListener(Event.COMPLETE,FnComplete);
}

//載入音訊檔的內容
function FnComplete(e:Event)
{
songNametxt.text = snd.id3.songName;
genretxt.text = snd.id3.genre;
artisttxt.text = snd.id3.artist;
lenthTXT.text = String(Math.floor(snd.length / 1000)) + "秒";
txt1.text = String(Math.floor(snd.length / 1000)) + "秒";
txt2.text = String(playsec);
}//以上如果不放在此fn內會出現Null的錯誤訊息

//換不同首歌-------------------------------------------------------------------------
function FnClick(e:MouseEvent)
{
removeEventListener(Event.ENTER_FRAME,FnEnter);
play_btn.enabled = true;
bar.value = 0;
playsec = 0;
sndChannel.stop();
snd=new Sound();//如果不加此行,會出現Error #2037,若要載入另一个聲音文件,要建立新的 Sound
var xml:XML = new XML(ldr.data);
musicpath.url = "mp3/" + xml["music"]["path"][e.currentTarget.name.substr(1,1) - 1];
snd.load(musicpath);
snd.addEventListener(Event.COMPLETE,FnComplete);
mute_btn.enabled=false
}

//音樂播放---------------------------------------------------------------------
function FnPlay(e:MouseEvent)
{
mute_btn.enabled=true
sndChannel = snd.play(playsec);
sndTransform = sndChannel.soundTransform;
play_btn.enabled = false;
addEventListener(Event.ENTER_FRAME,FnEnter);
sndChannel.addEventListener(Event.SOUND_COMPLETE,FnSoundComplete);//SOUND_COMPLETE是在音樂全播完之後重設用;
}

//音樂播完後---------------------------------------------------------------------------------------------------
function FnSoundComplete(e:Event)
{
removeEventListener(Event.ENTER_FRAME,FnEnter);//不移除的話會出現錯誤訊號Error #1009: 無法存取 Null 物件參考的屬性或方法
playsec = 0;
bar.value = 0;//Slider bar的三角箭頭跳回0
txt2.text = String(playsec);//數字變回0
play_btn.enabled = true;//play按鈕可以按
mute_btn.label="靜音"
mute_btn.enabled=false
up.enabled=true
down.enabled=true
}

//EnterFrame----------------------------------------------------------------------------------------------------------
function FnEnter(e:Event)
{
bar.minimum = 0;
bar.maximum = snd.length;
bar.value = sndChannel.position;
playsec = sndChannel.position;
txt2.text = String(Math.floor(sndChannel.position / 1000));
}

//音樂停止--------------------------------------------------------------
function FnStop(e:MouseEvent)
{
removeEventListener(Event.ENTER_FRAME,FnEnter);
sndChannel.removeEventListener(Event.SOUND_COMPLETE,FnSoundComplete);
bar.value = 0;
playsec = 0;
txt2.text = String(playsec);
sndChannel.stop();
play_btn.enabled = true;
mute_btn.enabled=false
}

//音樂暫停---------------------------------------------------------------
function FnPause(e:MouseEvent)
{
removeEventListener(Event.ENTER_FRAME,FnEnter);
sndChannel.stop();
play_btn.enabled = true;
mute_btn.enabled=false
}

//增加音量-------------------------------------------------------------------------
function FnUp(e:MouseEvent)
{
sndTransform.volume += 0.1;//音量每按一次增加0.1
sndChannel.soundTransform = sndTransform;//需要寫此行,不然對聲音大小的控制會沒作用
}

//降低音量------------------------------------------------------------------------
function FnDown(e:MouseEvent)
{
if(sndTransform.volume>=0)//不寫此判斷式的話,當聲音小於0時,反而會增加音量
{
sndTransform.volume -= 0.1;//音量每按一次降低0.1
sndChannel.soundTransform = sndTransform;//需要寫此行,不然對聲音大小的控制會沒作用
}
}

//靜音-----------------------------------------------------------------------
function FnMute(e:MouseEvent)
{
switch (mute)
{
case 0 ://按第一次,靜音
sndTransform.volume = 0;
sndChannel.soundTransform = sndTransform;//需要寫此行,不然對聲音大小的控制會沒作用
mute = 1;
mute_btn.label="靜音解除"
up.enabled=false
down.enabled=false
break;
case 1 ://再按一次,靜音解除
sndTransform.volume = 1;
sndChannel.soundTransform = sndTransform;//需要寫此行,不然對聲音大小的控制會沒作用
mute = 0;
mute_btn.label="靜音"
up.enabled=true
down.enabled=true
break;
}
}

mute_btn.enabled=false//靜音按鈕一開始要是不能按的狀態

 

//以下語法是想讓滑桿可以被控制拖曳 

 

//當滑桿的控制鈕被滑鼠按下的時候---------------------------------------------------------------
function FnMouseDown(e:MouseEvent)
{
trace("被壓了")
removeEventListener(Event.ENTER_FRAME,FnEnter);
sndChannel.removeEventListener(Event.SOUND_COMPLETE,FnSoundComplete);
sndChannel.stop();//當滑鼠按在滑桿鈕上,音樂要停止
bar.minimum = 0;
bar.maximum = snd.length;//滑桿的最大與最小值要寫在滑鼠左鍵按下的這個fn中,如果放在FnSlideUp中的話,第一次放開左鍵是會偵測到slider屬性面板上的數值。
play_btn.enabled=false
}

 

//當放在滑桿控制鈕上的滑鼠被放開後----------------------------------------------------------
function FnSlideUp(e:SliderEvent)
{
trace("放開了")
playsec = bar.value
trace(playsec)
sndChannel = snd.play(playsec);//要加這句不然滑桿游標不會跟著音樂移動
txt2.text = String(Math.floor(bar.value / 1000));
addEventListener(Event.ENTER_FRAME,FnEnter);//要加這句不然滑桿游標不會跟著音樂移動
sndChannel.addEventListener(Event.SOUND_COMPLETE,FnSoundComplete);
}

 

 

未完成:歌曲選單以Combobox製作

arrow
arrow
    文章標籤
    AS3 flash 音樂播放
    全站熱搜

    mosquitoyo 發表在 痞客邦 留言(0) 人氣()