聲音是多媒體的重要組成元素,恰當(dāng)、靈活地運用聲音往往是多媒體作品的成敗關(guān)鍵。Flash作為人們喜愛的多媒體工具,其聲音的使用方式也豐富多樣,本文探討了在Flash中使用聲音的幾種情況,希望能對大家有所幫助。
一、在時間軸中使用聲音
這是Flash中聲音最常使用的方式,任何一本Flash教材都會講到這個問題,所以只作簡單說明。
在設(shè)置一個關(guān)鍵幀后,只要你導(dǎo)入了聲音文件,在幀屬性面板都能進行該幀的聲音設(shè)置。聲音的同步屬性(Sync)主要有以下幾種:
1.事件(Event)。用這種方式設(shè)置的聲音會獨立于時間軸播放,只要你沒有用其它方式中止,它會一直播放下去直到結(jié)束,其最大好處是可以用來設(shè)置一些類似循環(huán)的播放效果,只要你把它后面的循環(huán)屬性(Loop)設(shè)置得足夠大。
2.開始(Start)。其特點是,當(dāng)該幀開始播放,將停止動畫中前面幀調(diào)用的聲音,只播放當(dāng)前幀中的聲音。
3.停止(Stop)。設(shè)置后,將立即停止播放當(dāng)前幀的聲音。
4.?dāng)?shù)據(jù)流(Stream)。設(shè)置后,會使動一的播放與聲音同步,如果動畫下載速度跟不上聲音,將跳過相關(guān)幀而保持與聲音同步。另外,如果在播放中設(shè)置了(Stop)動畫停止,聲音也將停止;但如果使用play()語句,聲音又將從停止處接著播放。
二、用ActionScript語句調(diào)用聲音
Flash提供了強大的腳本編輯功能,幾乎能與一些專門的編程語言相媲美,在多媒體方面可謂更勝一籌,用Flash腳本語言調(diào)用聲音,在無論是效果還是靈活性,都值得一試。
1.加入聲音
導(dǎo)入外部聲音,按Ctrl+L鍵,彈出庫窗口,選中導(dǎo)入的聲音,單擊右鍵,在彈出菜單中選擇“鏈接”菜單項,彈出“鏈接屬性”對話框,先選中“為動作腳本導(dǎo)出”復(fù)選框,此時對話框上部的“標(biāo)識符”一欄將變得可用,在其中輸入其標(biāo)識名,在此我們假設(shè)輸入為“sd”,此標(biāo)識將在程序中作為該聲音的標(biāo)志,故多個聲音不得使用同一個標(biāo)識符。
在Flash時間軸上的第一幀輸入以下語句:
mysong = new Sound()
mysong.attachSound("sd")
以上語句先定義一個聲音事件mysong,再用mysound.attachSound("sd")語句將庫中的聲音附加到此聲音事件上。
2.聲音的播放與停止
在需要播放的幀加入“mysong.start()”語句可讓聲單播放。
需要停止時,加入“mysong.stop()”語句則可。
3.調(diào)用外部聲音文件
Flash可以在播放時動態(tài)加載外部mp3文件,此方法既為多媒體設(shè)計提供了更大的靈活性,也能有效地減小作品所占的磁盤空間。實現(xiàn)方法如下(假設(shè)同目錄下有music.mp3文件):
mysong=new Sound()
mysong.loadSound("music.mp3",false)
說明:第一行語句建立一個聲音事件或聲音流,第二行將music.mp3加載到聲音事件事聲音流上,loadSound()語句中的false為可選能數(shù),為false時表示mysound為聲音事件,為true時表示mysound為聲音流,建議使用聲音事件,以便于控制;如果使用聲音流,則聲音停止后將不能再用mysond.start()播放。
三、聲音循環(huán)播放
前面說過,在時間軸上設(shè)置關(guān)鍵幀的聲音同步屬性為Event時,輸入足夠大的循環(huán)次數(shù),可使聲音產(chǎn)生類似循環(huán)播放的效果,但是,這種循環(huán)僅是類似而已,一者次數(shù)再多,總有播放完畢的時候;二者一旦停止,就很難再次播放。下面,向大家介紹一種用代碼實現(xiàn)的真正循環(huán),而且,還可用一個按鈕實現(xiàn)聲音的播放也停止切換,想播就播,想停就停,豈不快哉。
我們可在時間軸的第一幀加入如下代碼:
mysong = new Sound()
mysong.attachSound("sd")
mysong.onSoundComplete = function() {
mysong.start() }
以上代碼的第三行是實現(xiàn)循環(huán)的關(guān)鍵,它創(chuàng)建了在調(diào)用 onSoundComplete 事件時執(zhí)行的函數(shù),onSoundComplete 為聲音播放完畢時自動調(diào)用的事件,這樣,當(dāng)聲音播放完畢后自動執(zhí)行mysong.start(),使聲音不斷播放。如果聲音播放時被代碼停止( mysong.stop() ),聲音是不會重復(fù)播放的。
將以上代碼加入到一個按鈕的動作中并稍加改動,便成為一個控制聲音播放與停止的切換按鈕。
先在時間軸第一幀代碼后加上:
mysong.play() //使聲音在動畫開始時播放
var soundkey=1 //定義變量soundkey,監(jiān)視聲音播放情況
然后在時間軸上插入一個新層,放一個按鈕在上面,選中按鈕,按快捷鍵“F9”,調(diào)出動作編輯窗口,輸入以下代碼:
on(release){
soundkey=-soundkey //使變量值為原值相反數(shù)
if(soundkey==1){
mysong.stop()
mysong.start()
} //如果soundkey值為正,則播放聲音,mysong.stop()使聲音停止后再播,以免聲音產(chǎn)生疊加,影響效果
if(soundkey==-1){
mysong.stop()
} //如果soundkey值為負(fù),則聲音停止
思路二
一般我們控制聲音的播放、暫停都是先把導(dǎo)入聲音定義為stream的方式來實現(xiàn)的。這里介紹一下用Sound對象來實現(xiàn)的方法:
1、導(dǎo)入聲音文件,例子中用Windows中的“Windows Logon Sound.wav”
2、打開library右鍵點導(dǎo)入的聲音,選Linkage,在對話框中勾上Export for ActionScript,其他可以照默認(rèn)的不用改。
3、在第一幀寫如下AS:
song=new Sound(); //定義一個名為song的聲音對象
song.attachSound("Windows Logon Sound.wav");//綁定聲音對象為Windows Logon Sound.wav,此處引號內(nèi)就是在2中對話框中設(shè)置的Identifier。
play_status = false;//用于檢測是否在播放中,防止重復(fù)播放
song.onSoundComplete = function() { //播放結(jié)束則觸發(fā)的事件
sp = 0;
play_status = false;
};
4、建立3個BT:start、pause和stop以控制播放、暫停。
5、start的AS:
on (release) {
if (play_status == false) { //如果沒有開始播放
song.start(sp); //播放聲音,開始時變量sp沒有賦值,默認(rèn)從頭開始放,如果已經(jīng)賦值,則按相應(yīng)值播放,單位秒。
play_status = true; //播放狀態(tài)為真
}
}
6、pause的AS:
on (release) {
if (play_status == true) {
sp = song.position/1000;//在停止前獲取當(dāng)前播放的位置,單位是毫秒
song.stop();
play_status = false;
}
}
7、stop的AS:
on (release) {
if (play_status == true) {
sp = 0;
song.stop();
play_status = false;
}
}
FLASH如何用按鈕控制聲音
懸賞分:5 - 解決時間:2006-7-21 13:50
我在FLASH有四個背景音樂。我知道怎么用按鈕播放一個音樂。但是我想要得效果是四個按鈕。播放不同得音樂。并且播放另一首得時間前面得會停止。謝謝啦。。能詳細(xì)點就好啦。加QQ也行 11537929
問題補充:hanksavin 能不能說得詳細(xì)點謝謝啦
提問者: csvsbd - 魔法學(xué)徒 一級
最佳答案
第一步:新建四個按鈕,分別命名為: btn1、btn2、btn3、btn4,注意是變量名,屬性欄“按鈕”四個字下面的那個框里的;
第二步:新建四個影片剪輯,分別命名為: mc1、mc2、mc3、mc4,注意是變量名,屬性欄“影片剪輯”四個字下面的那個框里的;
第三步:分別進入每個影片剪輯進行編輯,第一幀為空幀,接著選中第二幀,把音樂放在第二幀里;
第四步:四個影片剪輯都進行第三步操作,不過在第二幀里放入不同的音樂;
第五步:返回主場景,選中第一幀,按F9彈出腳本面板,寫下:
for (i=1; i<=4; i++) {
_root["mc"+i].stop();
}
_root.btn1.onPress = function() {
stopAllSounds();
for (i=1; i<=4; i++) {
_root["mc"+i].gotoAndStop(1);
}
_root.mc1.gotoAndPlay(2);
};
_root.btn2.onPress = function() {
stopAllSounds();
for (i=1; i<=4; i++) {
_root["mc"+i].gotoAndStop(1);
}
_root.mc2.gotoAndPlay(2);
};
_root.btn3.onPress = function() {
stopAllSounds();
for (i=1; i<=4; i++) {
_root["mc"+i].gotoAndStop(1);
}
_root.mc3.gotoAndPlay(2);
};
_root.btn4.onPress = function() {
stopAllSounds();
for (i=1; i<=4; i++) {
_root["mc"+i].gotoAndStop(1);
}
_root.mc4.gotoAndPlay(2);
};
這樣就可以了,點按鈕1播放mc1里的音樂,點按鈕2就播放mc2的,依此類推。