先做個(gè)簡(jiǎn)單的了解,F(xiàn)LASH中經(jīng)常用到的聲音的控制命令以及聲音的屬性有哪些:
1.new Sound()//創(chuàng)建一個(gè)新的聲音對(duì)象;
2.mysound.attachSound()//加載庫(kù)里的聲音
3.mysound.start()//播放聲音;
4.mysound.getVolume()//讀取聲音的音量
5.mysound.setVolume()//設(shè)置音量
6.mysound.getPan()//讀取聲音的平衡值
7.mysound.setPan()//設(shè)置聲音的平衡值
8.mysound.position//聲音播放的當(dāng)前位置
9.mysound.duration//聲音的總長(zhǎng)度;
下面,我們用一個(gè)具體的例子來(lái)學(xué)習(xí)這些命令以及屬性的用法:
各元件的實(shí)例名參看圖1
screen.width-333)this.width=screen.width-333" border=0>
為方便學(xué)習(xí),我們結(jié)合一個(gè)具體的例子來(lái)實(shí)踐一下代碼的編寫(xiě).讀者朋友可以先到這里下載源文件,下面我將對(duì)這個(gè)例子中牽涉到的AS做些解釋?zhuān)詭椭蠹依斫猓?/P>
點(diǎn)這里下載演示效果文件
點(diǎn)這里下載源文件
1.首先看action層的代碼:
mysound.attachSound("sound");//復(fù)制庫(kù)里的聲音給mysound對(duì)象,庫(kù)里的目標(biāo)聲音輸出標(biāo)示符為sound,關(guān)于輸出標(biāo)示符的添加方法,
參看圖2;
screen.width-333)this.width=screen.width-333" border=0>
_root.total=int(mysound.duration/1000/60)+"分"+""+(int(mysound.duration/1000)-int(mysound.duration/1000/60)*60)+"秒"http://這里是在total文本框內(nèi)顯示音樂(lè)的總廠,具體的原理參看注意點(diǎn)3;
_root.onEnterFrame=function(){//每播放一幀都觸發(fā)下面的函數(shù);
mysound.setVolume((a._x-30));//設(shè)置音量,30為音量線的最左端坐標(biāo),音量線總長(zhǎng)為100,a._x表示滑塊的X坐標(biāo),該坐標(biāo)減去初始位置的坐標(biāo)30就得到當(dāng)前應(yīng)有的音量;
mysound.setPan((b._x-80)*2);//設(shè)置當(dāng)前聲音的平衡值,相對(duì)于平衡線的中間位置坐標(biāo)(80)進(jìn)行調(diào)節(jié),范圍(-100,100),-100為左聲道出聲,100為右聲道,0為左右平衡;
txt1=mysound.getVolume();//讀取當(dāng)前音量并在txt1文本框內(nèi)顯示
txt2=mysound.getPan();//讀取當(dāng)前平衡值并在txt2文本框內(nèi)顯示
}
k=0;//初始化k變量,其作用將在下面說(shuō)明;
_root.bb="正在播放";//讓bb文本框顯示正在播放字樣;
2.控制音量的滑塊上的代碼:
on(press){
startDrag(a,true,30,147,130,147);//按下按鈕不放,則開(kāi)始拖動(dòng)滑塊a,拖動(dòng)范圍 左上右下依次為:30,147,130,147。這些數(shù)值的獲得方法,你可以在源文件相應(yīng)元件的屬性面板里看到;
}
on(release){
stopDrag();//松下按鈕則停止拖動(dòng)
}
3.控制平衡的滑塊上的代碼:
startDrag(b,true,30,179,130,179);//按下按鈕不放,則開(kāi)始拖動(dòng)滑塊a,拖動(dòng)范圍 左上右下依次為:30,179,130,179。
}
on(release){
stopDrag();//松下按鈕則停止拖動(dòng)
}
4.暫停按鈕的代碼:
k=k+1;//k是用來(lái)統(tǒng)計(jì)當(dāng)前點(diǎn)擊暫停按鈕次數(shù)的變量;
if(k%2==1){//奇偶判斷;
mysound.stop();//若為奇數(shù)則停止音樂(lè);
_root.b=int(mysound.position/1000);//記錄下停止時(shí)播放的位置,賦值給變量b;
_root.bb="停在第"+_root.b+"秒";//在bb文本框內(nèi)顯示當(dāng)前停止的位置;
}else{
mysound.start(_root.b);//從上一次停止的位置開(kāi)始繼續(xù)播放;
_root.bb="正在播放";
}
}
5.停止按鈕上的代碼:
mysound.stop();//停止音樂(lè)
_root.bb="已停止";//顯示音樂(lè)停止;
_root.b=0;//點(diǎn)擊次數(shù)清零;以便下次統(tǒng)計(jì);
_root.k=1//這點(diǎn)的解釋參看注意點(diǎn)1;
}
6.播放按鈕的代碼:
mysound.stop()//為了避免當(dāng)前正在播放音樂(lè)的音樂(lè)和再次開(kāi)始的音樂(lè)重復(fù),所以先停止當(dāng)前音樂(lè);
mysound.start();//開(kāi)始播放新的音樂(lè)
_root.bb="正在播放";
k=0//關(guān)于這里為什么重新給k賦值,請(qǐng)參看*的注意點(diǎn)2;
}
注意:
1.把這里的k賦值為1,是為了讓音樂(lè)停止后,清除前面對(duì)暫停按鈕的操作引起的k值的變化,并且可以讓下一步點(diǎn)暫停按鈕的時(shí)候,讓其執(zhí)行mysound.start(_root.b),從而具有播放按鈕的功能,因?yàn)閯倓倛?zhí)行了停止命令。再執(zhí)行暫停命令是沒(méi)有意義的!
2.把k重新賦值為0,是為了清除前面對(duì)暫停按鈕的操作引起的k值的變化.讀者朋友可以去除這句,然后測(cè)試,你會(huì)發(fā)現(xiàn)點(diǎn)了播放按鈕后再點(diǎn)暫停按鈕,會(huì)有兩個(gè)聲音混雜在一起,這個(gè)BUG的出現(xiàn),正是因?yàn)閗值在作怪,具體的講,當(dāng)你進(jìn)行了若干操作,把k的值變?yōu)槠鏀?shù)后,在點(diǎn)播放按鈕,此時(shí)音樂(lè)開(kāi)始播放,然后你再點(diǎn)下暫停按鈕,這時(shí)候的k值為偶數(shù),那么會(huì)執(zhí)行mysound.start(_root.b),也就是再開(kāi)始播放一個(gè)音樂(lè),從而導(dǎo)致兩個(gè)聲音混雜的現(xiàn)象;
到這里,基本上結(jié)束了這些常用命令的介紹,希望對(duì)各位讀者有幫助,