我們看到在網(wǎng)上有許多用Flash制作的MTV作品,做MTV最重要的一個(gè)元素當然是從外部導入的音樂(lè )文件,今天我們著(zhù)重說(shuō)說(shuō)最常見(jiàn)的聲音控制:包括聲音的開(kāi)始和停止、控制音量、控制左右聲道平衡等。
有關(guān)Flash中聲音的控制語(yǔ)句請參考《Flash音頻使用詳解:聲音函數》。
這里主要使用了以下聲音控制語(yǔ)句:
mysound=new Sound(target);
mysound.attachSound("idname");
mysound.start(secondOffet,loop);
sound.setVolume(volume);
sound.setPan(pan);
示例效果如下:
一、音樂(lè )的播放和停止
(1)首先從外部導入一個(gè)音樂(lè ),也就是用File>Import導入?;蛑苯訌腤indow>Common Libraie>Sounds中拖一個(gè)到舞臺上。
(2)然后選擇Window>Library。從中選中你剛導入的音樂(lè ),并按鼠標右鍵,選中其中的Linkage,如下圖:
(3)在跳出的Symbol Linkage Properties對話(huà)框中,在Linkage中選Export this symbol,在identifier中輸入你想要取的音樂(lè )名字,如"likesound"。如果你用的是flash mx,則選擇Export for ActionScript。如下圖:
(4)接著(zhù)從庫中選擇兩個(gè)按鈕,并放在舞臺上,如下圖:
(5)在*個(gè)開(kāi)始按鈕上捆綁如下代碼:
on (release) {
s=new Sound();
s.attachSound("likesound");
s.start(0,6);
}
(6)在第二個(gè)停止按鈕上捆綁如下代碼:
on (release) {
s.stop()
}
代碼說(shuō)明:其中s=new Sound()是創(chuàng )建一個(gè)聲音對象,用法是mysound=new Sound(target);,target是你希望聲音創(chuàng )建到哪個(gè)電影剪輯中,默認的是創(chuàng )建在主Timeline中。
第二句mysound.attachSound("idname")的作用是指定Library中聲音的調用,idname就是剛才我們在Symbol Linkage Properties中取的名字。
要使聲音開(kāi)始播放還要用第三句mysound.start(secondOffet,loop);其中secondOffet,就是指定聲音從第幾秒開(kāi)始播放,Loop就是播放后的循環(huán)次數。*s.stop()就是停止音樂(lè )播放。你也可在括號中指定要停止播放的音樂(lè )的idname,在這里就不需要了。
上面實(shí)現了對音樂(lè )的播放和停止控制,接著(zhù)我們看看實(shí)現如何來(lái)控制音量。
二、音量的控制(6)從庫中選一個(gè)按鈕放在舞臺上,把這個(gè)按鈕轉換成MovieClip。這樣做的目的是能把這個(gè)按鈕既可以接受電影事件也能接受按鈕事件,如下圖:
(7)在這個(gè)按鈕的電影剪輯上加入以下代碼
onClipEvent (load) {
top = _y;
left = _x;
right = _x;
bottom = _y+100;
}
onClipEvent (enterFrame) {
if (dragging=true) {
_root.s.setVolume(100-(_y-top));
}
}
(8)通過(guò)雙擊這個(gè)電影剪輯,或通過(guò)選中這個(gè)電影后再選Edit>Edit Symbol,進(jìn)入該電影剪輯的編輯狀態(tài),選中按鈕本身,在這個(gè)按鈕上捆綁以下代碼
on (press) {
startDrag ("", false, left, top, right, bottom);
dragging = true;
}
on (release) {
stopDrag ();
dragging = false;
}
代碼解釋?zhuān)?/STRONG>首先是在電影上的Load事件下,這里做的是初始化的工作,這里的left和right是同一個(gè)值,它的作用是使按鈕只能在上下被拖動(dòng),不能左右移動(dòng)。而bottom是比top多了100,這樣按鈕只能被向下拖動(dòng)100個(gè)像素的位置。
然后在enterFrame事件中,是一個(gè)判斷語(yǔ)句,dragging=true就是按鈕正在被拖動(dòng),它是被設置在下面的按鈕里的,當按鈕在拖動(dòng)時(shí),draggin=true;當stopDrag()時(shí),dragging=false。如果判斷是true時(shí)執行root.s.setVolume(100-(_y-top));這個(gè)語(yǔ)句的作用是當按鈕在被拖動(dòng)時(shí),根據此時(shí)按鈕的_y位置,來(lái)設置音量。
這里用到了sound.setVolume(volume)這個(gè)新的語(yǔ)句,sound是你是你建件的new sound()的名稱(chēng),我們這里是s,volume是一個(gè)從0-100的數字,0為聲音最小,100為*。
現在你知道為什么一開(kāi)始就用bottom=_y+100吧?看看100-(_y-top)在原始狀態(tài)下是100,但只要隨著(zhù)按鈕的拖動(dòng),_y越來(lái)越大,而top是一個(gè)固定的初始值。兩者的差越來(lái)越大,這樣整個(gè)值就越來(lái)越小,*至0,取值范圍在0-100間。
下面接著(zhù)來(lái)做調節聲音的平衡。
三、調節聲音的平衡
(9)從庫中選一個(gè)按鈕放在舞臺上,把這個(gè)按鈕轉換成MovieClip。這樣做的目的是能把這個(gè)按鈕既可以接受電影事件也能接受按鈕事件。(此例是最下的那個(gè)按鈕,既橫向的那個(gè))做好后如下圖:
(10)在這個(gè)按鈕的電影剪輯上加入以下代碼
onClipEvent (load) {
top = _y;
bottom = _y;
left = _x-50;
right = _x+50;
center = _x;
}
onClipEvent (enterFrame) {
if (dragging=true) {
_root.s.setPan((_x-center)*2);
}
}
(11)通過(guò)雙擊這個(gè)電影剪輯,或通過(guò)選中這個(gè)電影后再選Edit>Edit Symbol,進(jìn)入該電影剪輯地編輯狀態(tài),選中按鈕本身,在這個(gè)按鈕上捆綁以下代碼(和上次的操作完全相同)。
on (press) {
startDrag ("", false, left, top, right, bottom);
dragging = true;
}
on (release) {
stopDrag ();
dragging = false;
}
代碼解釋?zhuān)?/STRONG>在enterFrame事件中,是一個(gè)判斷語(yǔ)句,dragging=true就是按鈕正在被拖動(dòng),它是被設置在下面的按鈕里的,當按鈕在拖動(dòng)時(shí),draggin=true,但當stopDrag()時(shí),dragging=false。如果判斷是true時(shí)執行_root.s.setPan((_x-center)*2);這個(gè)語(yǔ)句的作用是當按鈕在被拖動(dòng)時(shí),根據此時(shí)按鈕的_x位置,來(lái)設置音量。
這里用到了sound.setPan(pan)這個(gè)新的語(yǔ)句,sound是你是你建件的new sound()的名稱(chēng),我們這里是s,pan是一個(gè)從-100至100的數字,0為聲音在兩個(gè)聲道均衡分配,100為右聲道*,-100為左聲道*。至于里面的(_x-center)*2是一個(gè)從-100至100之間變化的變量,它的原理是根據_x坐標的變化而變化,相信大家一看就會(huì )明白。原文件下載學(xué)習