返回首頁

Flash聲音代碼詳解

時間:2010-07-11 14:47來源:知行網www.wtckvq.live 編輯:麥田守望者

Flash聲音控制詳解2008-02-14 10:55聲音是多媒體的重要組成元素,恰當、靈活地運用聲音往往是多媒體作品的成敗關鍵。Flash作為人們

喜愛的多媒體工具,其聲音的使用方式也豐富多樣,本文探討了在Flash中使用聲音的幾種情況,希望能

對大家有所幫助。


一、在時間軸中使用聲音
這是Flash中聲音最常使用的方式,任何一本Flash教材都會講到這個問題,所以只作簡單說明。


在設置一個關鍵幀后,只要你導入了聲音文件,在幀屬性面板都能進行該幀的聲音設置。聲音的同步屬

性(Sync)主要有以下幾種:


1.事件(Event)。用這種方式設置的聲音會獨立于時間軸播放,只要你沒有用其它方式中止,它會一

直播放下去直到結束,其最大好處是可以用來設置一些類似循環的播放效果,只要你把它后面的循環屬

性(Loop)設置得足夠大。


2.開始(Start)。其特點是,當該幀開始播放,將停止動畫中前面幀調用的聲音,只播放當前幀中的

聲音。


3.停止(Stop)。設置后,將立即停止播放當前幀的聲音。
4.數據流(Stream)。設置后,會使動一的播放與聲音同步,如果動畫下載速度跟不上聲音,將跳過相

關幀而保持與聲音同步。另外,如果在播放中設置了(Stop)動畫停止,聲音也將停止;但如果使用

play()語句,聲音又將從停止處接著播放。


二、用ActionScript語句調用聲音
Flash提供了強大的腳本編輯功能,幾乎能與一些專門的編程語言相媲美,在多媒體方面可謂更勝一籌,

用Flash腳本語言調用聲音,在無論是效果還是靈活性,都值得一試。


1.加入聲音
導入外部聲音,按Ctrl+L鍵,彈出庫窗口,選中導入的聲音,單擊右鍵,在彈出菜單中選擇“鏈接”菜

單項,彈出“鏈接屬性”對話框,先選中“為動作腳本導出”復選框,此時對話框上部的“標識符”一

欄將變得可用,在其中輸入其標識名,在此我們假設輸入為“sd”,此標識將在程序中作為該聲音的標

志,故多個聲音不得使用同一個標識符。


在Flash時間軸上的第一幀輸入以下語句:
mysong = new Sound()
mysong.attachSound("sd")
以上語句先定義一個聲音事件mysong,再用mysound.attachSound("sd")語句將庫中的聲音附加到此聲音

事件上。


2.聲音的播放與停止
在需要播放的幀加入“mysong.start()”語句可讓聲單播放。
需要停止時,加入“mysong.stop()”語句則可。
3.調用外部聲音文件
Flash可以在播放時動態加載外部mp3文件,此方法既為多媒體設計提供了更大的靈活性,也能有效地減

小作品所占的磁盤空間。實現方法如下(假設同目錄下有music.mp3文件):


mysong=new Sound()
mysong.loadSound("music.mp3",false)
說明:第一行語句建立一個聲音事件或聲音流,第二行將music.mp3加載到聲音事件事聲音流上,

loadSound()語句中的false為可選能數,為false時表示mysound為聲音事件,為true時表示mysound為聲

音流,建議使用聲音事件,以便于控制;如果使用聲音流,則聲音停止后將不能再用mysond.start()播

放。


三、聲音循環播放
前面說過,在時間軸上設置關鍵幀的聲音同步屬性為Event時,輸入足夠大的循環次數,可使聲音產生類

似循環播放的效果,但是,這種循環僅是類似而已,一者次數再多,總有播放完畢的時候;二者一旦停

止,就很難再次播放。下面,向大家介紹一種用代碼實現的真正循環,而且,還可用一個按鈕實現聲音

的播放也停止切換,想播就播,想停就停,豈不快哉。


我們可在時間軸的第一幀加入如下代碼:
mysong = new Sound()
mysong.attachSound("sd")
mysong.onSoundComplete = function() {
mysong.start() }
以上代碼的第三行是實現循環的關鍵,它創建了在調用 onSoundComplete 事件時執行的函數,

onSoundComplete 為聲音播放完畢時自動調用的事件,這樣,當聲音播放完畢后自動執行mysong.start

(),使聲音不斷播放。如果聲音播放時被代碼停止( mysong.stop() ),聲音是不會重復播放的。


將以上代碼加入到一個按鈕的動作中并稍加改動,便成為一個控制聲音播放與停止的切換按鈕。


先在時間軸第一幀代碼后加上:
mysong.play() //使聲音在動畫開始時播放
var soundkey=1 //定義變量soundkey,監視聲音播放情況
然后在時間軸上插入一個新層,放一個按鈕在上面,選中按鈕,按快捷鍵“F9”,調出動作編輯窗口,

輸入以下代碼:


on(release){
soundkey=-soundkey //使變量值為原值相反數
if(soundkey==1){
mysong.stop()
mysong.start()
}
//如果soundkey值為正,則播放聲音,mysong.stop()使聲音停止后再播,以免聲音產生疊加,影響效果


if(soundkey==-1){
mysong.stop()
}
//如果soundkey值為負,則聲音停止

 


先做個簡單的了解,FLASH中經常用到的聲音的控制命令以及聲音的屬性有哪些:
1.new Sound()//創建一個新的聲音對象;
2.mysound.attachSound()//加載庫里的聲音
3.mysound.start()//播放聲音;
4.mysound.getVolume()//讀取聲音的音量
5.mysound.setVolume()//設置音量
6.mysound.getPan()//讀取聲音的平衡值
7.mysound.setPan()//設置聲音的平衡值
8.mysound.position//聲音播放的當前位置
9.mysound.duration//聲音的總長度;

 

mysound.start(0,10);//開始播放聲音,從第0秒開始,重復10遍
_root.total=int(mysound.duration/1000/60)+"分"+""+(int(mysound.duration/1000)-int

(mysound.duration/1000/60)*60)+"秒"//這里是在total文本框內顯示音樂的總廠,具體的原理參看注

意點3;
_root.onEnterFrame=function(){//每播放一幀都觸發下面的函數;
mysound.setVolume((a._x-30));//設置音量,30為音量線的最左端坐標,音量線總長為100,a._x

表示滑塊的X坐標,該坐標減去初始位置的坐標30就得到當前應有的音量;
mysound.setPan((b._x-80)*2);//設置當前聲音的平衡值,相對于平衡線的中間位置坐標(80)進行

調節,范圍(-100,100),-100為左聲道出聲,100為右聲道,0為左右平衡;
txt1=mysound.getVolume();//讀取當前音量并在txt1文本框內顯示
txt2=mysound.getPan();//讀取當前平衡值并在txt2文本框內顯示
}
k=0;//初始化k變量,其作用將在下面說明;
_root.bb="正在播放";//讓bb文本框顯示正在播放字樣;

2.控制音量的滑塊上的代碼:


on(press){
startDrag(a,true,30,147,130,147);//按下按鈕不放,則開始拖動滑塊a,拖動范圍 左上右下依次為

:30,147,130,147。這些數值的獲得方法,你可以在源文件相應元件的屬性面板里看到;
}
on(release){
stopDrag();//松下按鈕則停止拖動
}
3.控制平衡的滑塊上的代碼:

on(press){
startDrag(b,true,30,179,130,179);//按下按鈕不放,則開始拖動滑塊a,拖動范圍 左上右下依次為

:30,179,130,179。
}
on(release){
stopDrag();//松下按鈕則停止拖動
}
4.暫停按鈕的代碼:


on(release){
k=k+1;//k是用來統計當前點擊暫停按鈕次數的變量;
if(k%2==1){//奇偶判斷;
mysound.stop();//若為奇數則停止音樂;
_root.b=int(mysound.position/1000);//記錄下停止時播放的位置,賦值給變量b;
_root.bb="停在第"+_root.b+"秒";//在bb文本框內顯示當前停止的位置;
}else{
mysound.start(_root.b);//從上一次停止的位置開始繼續播放;
_root.bb="正在播放";
}
}
5.停止按鈕上的代碼:


on(release){
mysound.stop();//停止音樂
_root.bb="已停止";//顯示音樂停止;
_root.b=0;//點擊次數清零;以便下次統計;
_root.k=1//這點的解釋參看注意點1;
}
6.播放按鈕的代碼:


on(release){
mysound.stop()//為了避免當前正在播放音樂的音樂和再次開始的音樂重復,所以先停止當前音樂;
mysound.start();//開始播放新的音樂
_root.bb="正在播放";
k=0//關于這里為什么重新給k賦值,請參看最后的注意點2;
}
注意:
1.把這里的k賦值為1,是為了讓音樂停止后,清除前面對暫停按鈕的操作引起的k值的變化,并且可以讓

下一步點暫停按鈕的時候,讓其執行mysound.start(_root.b),從而具有播放按鈕的功能,因為剛剛執

行了停止命令。再執行暫停命令是沒有意義的!

2.把k重新賦值為0,是為了清除前面對暫停按鈕的操作引起的k值的變化.讀者朋友可以去除這句,然

后測試,你會發現點了播放按鈕后再點暫停按鈕,會有兩個聲音混雜在一起,這個BUG的出現,正是因為

k值在作怪,具體的講,當你進行了若干操作,把k的值變為奇數后,在點播放按鈕,此時音樂開始播放

,然后你再點下暫停按鈕,這時候的k值為偶數,那么會執行mysound.start(_root.b),也就是再開始播

放一個音樂,從而導致兩個聲音混雜的現象;

 

------分隔線----------------------------
標簽(Tag):FLASH FLASH實例教程 flash教程 flash實例
------分隔線----------------------------
推薦內容
猜你感興趣
深蓝海域APP