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