• <acronym id="danlv"><form id="danlv"></form></acronym>
  • <dd id="danlv"><rt id="danlv"></rt></dd>
      <var id="danlv"><rt id="danlv"><big id="danlv"></big></rt></var>
      1. <code id="danlv"><ol id="danlv"></ol></code>
        <var id="danlv"><rt id="danlv"></rt></var>
          1. <code id="danlv"></code>
            返回首頁

            Flash聲音代碼詳解

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

            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實例
            ------分隔線----------------------------
            推薦內容
            猜你感興趣
            日韩在线av免费视久久