flash-as3使用-播放聲音和加載外部聲音文件_第1頁
flash-as3使用-播放聲音和加載外部聲音文件_第2頁
flash-as3使用-播放聲音和加載外部聲音文件_第3頁
flash-as3使用-播放聲音和加載外部聲音文件_第4頁
flash-as3使用-播放聲音和加載外部聲音文件_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

FlashAS3.0打造漂亮的水汶實例教程在這個教程中,我們將用到置換圖濾鏡(DisplacementMapFilter)和BitmapData類的的雜點功能(perlinNoise),這兩個家伙常常給我們帶一些令人興奮的效果,它們今天的合作為我們創(chuàng)造了一個漂亮的的水汶,看看下面的動畫,應(yīng)該還不錯吧。現(xiàn)在我開始來構(gòu)建這個漂亮的水汶:即然是水汶,我想首先要找一張含水的圖片吧,百度一下吧,河道,湖泊,水池,你喜歡就行。1.新建一AS3.0文檔,將幀頻設(shè)為30,將你剛百度到的圖片導(dǎo)入到庫中,點右鍵,在屬性面板中將“使用JPEG導(dǎo)入品質(zhì)”前的鉤鉤去掉,這樣做圖片的體積就會大大地減小哦。2.新建一個影片剪輯元件,將圖片拖到舞臺上,設(shè)置圖片的大小,你想設(shè)多大呢?反正我是按默認(rèn)的550x400.圖片在大小與文檔大小一樣大哈。點擊對齊面板,相對于舞臺居中對齊。3.回到主場景,將MC拖到舞臺上,居中放置,為它設(shè)置一個實例名稱,我用的是”pic”圖層上鎖。4.新插入一圖層,將圖片(注意是圖片不是MC哈),拖到舞臺上,打開對齊面板,寬高匹配,居中對齊?,F(xiàn)在第1,2層的圖像是完全重合的,請確認(rèn)是這樣的。選擇圖片,點擊修改>分離,將水面部分選出,刪除??梢詫⒌?層隱藏,看看刪除后的效果。如下圖:5.新建一層用來寫代碼,打開動作面板,輸入下列代碼:1.varbmp:BitmapData=newBitmapData(550,400);

2.varzh:DisplacementMapFilter=newDisplacementMapFilter(bmp,newPoint(0,0),1,2,10,600);

3.varp1:Point=newPoint();

4.varp2:Point=newPoint();

5.varzdxg:Array=[p1,p2];

6.addEventListener(Event.ENTER_FRAME,ld);

7.functionld(e:Event):void{

8.zdxg[0].x+=0.2;

9.zdxg[1].y+=0.1;

10.bmp.perlinNoise(168,5,2,4,true,true,2,true,zdxg);

11.pic.filters=[zh];

12.}OK,測試影片,一個漂亮的水汶效果立即出現(xiàn)在你的眼前。代碼分析:首先聲明了一個與圖片一樣大的BitmapData類實例bmp,用來作為置換圖濾鏡的參數(shù)。

varbmp:BitmapData=newBitmapData(550,400);

然后聲明一個置換圖濾鏡zh,將bmp作為參數(shù)。

varzh:DisplacementMapFilter=newDisplacementMapFilter(bmp,newPoint(0,0),1,2,10,600);

接下來聲明了兩個點,并將這兩個點放到到一個叫zdxg的數(shù)組中,這個數(shù)組將用于bmp產(chǎn)生雜點的參數(shù)。

varp1:Point=newPoint();

varp2:Point=newPoint();

varzdxg:Array=[p1,p2];

然后,在ENTER_FRAME事件中調(diào)用ld函數(shù)。

addEventListener(Event.ENTER_FRAME,ld);

ld函數(shù),動態(tài)改變兩個點的位置,然后使bmp應(yīng)用雜點功能,在每一幀的間隔產(chǎn)生不同的雜點效果,使置換濾鏡效果產(chǎn)生變化,最后讓影片剪輯pic,應(yīng)用濾鏡,實現(xiàn)水汶效果。

functionld(e:Event):void{

zdxg[0].x+=0.2;

zdxg[1].y+=0.1;

bmp.perlinNoise(168,5,2,4,true,true,2,true,zdxg);

pic.filters=[zh];

}利用Flash的AS3.0代碼制作3D旋轉(zhuǎn)動畫效果效果演示:〖本教程著重于代碼的編寫,版本AS3.0。圖形元件的制作不作講解,請參看有關(guān)教程?!?、新建Flash文檔,創(chuàng)建5個圖形,(或?qū)?張圖片到庫中)。2、創(chuàng)建一個影片剪輯,1層為圖片層2層為代碼層。在1層把5張圖片分別放在5幀中,在代碼層輸入stop();如圖:3、Ctrl+L打開庫,右鍵單擊影片剪輯實例做鏈接,類名為:IconMenu如圖:4、返回場景1,圖層1為背景層,圖層2為代碼層。在圖層1導(dǎo)入背景圖片。圖層2輸入代碼:1.include"Math2.as"

2.//圖片容器

3.varmenu:Sprite=newSprite();

4.//使圖標(biāo)移動

5.menu.x=300;

6.menu.y=200;

7.//注冊事件偵聽器

8.menu.addEventListener(Event.ENTER_FRAME,moveMenu);

9.this.addChild(menu);

10.//橢圓在x和y軸上的截距

11.vardisx:Number=200;

12.vardisy:Number=10;

13.//旋轉(zhuǎn)速度

14.varspeed:Number=0;

15.initMenu(5);

16.functioninitMenu(n:int){

17.for(vari:int;i<n;i++){

18.varmc:MovieClip=newIconMenu();

19.//縮小圖標(biāo)

20.mc.scaleX=mc.scaleY=.5;

21.menu.addChild(mc);

22.}

23.}

24.//事件偵聽器函數(shù)

25.functionmoveMenu(e:Event):void{

26.//獲取圖標(biāo)數(shù)

27.variconCount:int=menu.numChildren;

28.//定義數(shù)組

29.vardepthArray:Array=newArray();

30.//把360度平分

31.varangle:Number=360/iconCount;

32.for(varz:int;z<iconCount;z++){

33.//根據(jù)深度獲取圖標(biāo)

34.varmc:MovieClip=menu.getChildAt(z);

35.//跳轉(zhuǎn)到不同幀,來顯示不同的圖標(biāo)

36.mc.gotoAndStop(z+1);

37.//設(shè)置圖標(biāo)的位置

38.mc.x=cosD(speed+angle*z)*disx;

39.mc.y=sinD(speed+angle*z)*disy;

40.setProp(mc,"alpha");

41.setProp(mc,"scaleX",.2,.7);

42.setProp(mc,"scaleY",.2,.7);

43.//保存圖標(biāo)到數(shù)組

44.depthArray[z]=mc;

45.}

46.//重新設(shè)置圖標(biāo)的深度

47.arrange(depthArray);

48.speed+=2;

49.}

50.functionarrange(depthArray:Array):void{

51.//按照y坐標(biāo)排序

52.depthArray.sortOn("y",Array.NUMERIC);

53.vari:int=depthArray.length;

54.while(i--){

55.menu.setChildIndex(depthArray[i],i);

56.}

57.}

58.functionsetProp(mc:MovieClip,prop:String,n1:Number=.5,n2:Number=1):void{

59.mc[prop]=((mc.y+2*disy)/disy-1)/2*(n2-n1)+n1;

60.}5、新建.as文檔,保存名為:Math2.as(這個文檔是進(jìn)行三角函數(shù)的計算)輸入代碼:1.//角度轉(zhuǎn)弧度

2.functionangleToRadian(angle:Number):Number

3.{

4.returnangle*(Math.PI/180);

5.}

6.//弧度轉(zhuǎn)角度

7.functionradianToAngle(radian:Number):Number

8.{

9.returnradian*(180/Math.PI);

10.}

11.//計算正弦值

12.functionsinD(angle:Number):Number

13.{

14.returnMath.sin(angleToRadian(angle));

15.}

16.//計算余弦值

17.functioncosD(angle:Number):Number

18.{

19.returnMath.cos(angleToRadian(angle));

20.}

21.//計算反正切

22.functionatan2D(y:Number,x:Number):Number

23.{

24.returnradianToAngle(Math.atan2(y,x));

25.}

復(fù)制代碼把fla文檔與Math2.as文檔保存在同一目錄下,進(jìn)行測試。[AS3編程教學(xué)]從庫中加載聲音并控制播放概述:Flash交互作品對于聲音的控制是比較靈活和常用的,接下去筆者將抽空對聲音控制寫一批由簡至難的教程,而本節(jié)教程詳細(xì)講述如何從庫里加載一個聲音文件到舞臺上并控制其播放。首先,我們打開FlashCS5,按下Ctrl+N,新建一個FlashAS3文檔,如下圖所示:其次,我們需要導(dǎo)入一個mp3格式的音樂文件到庫中。可以執(zhí)行“文件/導(dǎo)入/導(dǎo)入到庫”來操作,也可以直接從文件夾拖動到flash庫里,如下圖所示我們導(dǎo)入了聲音文件:要用程序?qū)⒙曇艏虞d到舞臺控制播放,那么就需要給聲音文件一個綁定的類名,所以我們在聲音文件上單擊右鍵/屬性,然后點擊ActionScript,勾選“為ActionScript導(dǎo)出和第一幀導(dǎo)出”,給聲音一個鏈接類名:TestSound:選擇主時間軸第一幀,按下F9,寫以下代碼,然后按下Ctrl+Enter,你便能聽到音樂播放了:

importflash.media.Sound;

varmySound:Sound=newTestSound()asSound;

mySound.play();

播放函數(shù)有一個開始播放時間和重復(fù)播放次數(shù)的參數(shù),我們讓聲音從第三秒開始播放,并且連續(xù)播放三遍需要這樣寫:

importflash.media.Sound;

varmySound:Sound=newTestSound()asSound;

mySound.play(3000,3);還有一個就是循環(huán)播放,當(dāng)聲音播放結(jié)束后自動開始再次播放,重復(fù)無數(shù)遍,此時就需要增加一個事件監(jiān)聽,當(dāng)播放結(jié)束后再次開始:

importflash.media.Sound;

varmySound:Sound=newTestSound()asSound;

varsndChanel:SoundChannel=mySound.play();

sndChanel.addEventListener(Event.SOUND_COMPLETE,rePlaySound);functionrePlaySound(e:Event):void{

mySound.play();}如果聲音文件導(dǎo)入時提示“一個或多個文件未導(dǎo)入”,一般是mp3文件過大或者格式不兼容,你下載一個“全能音頻轉(zhuǎn)換通”,另存為一下就好了。[AS3.0編程教學(xué)]最全的聲音控制方法網(wǎng)上做flash音樂播放器的人不少,這個作品主要是對聲音的外部讀取,然后保存,然后控制播放,暫停,停止等操作,今天這個作品就是向大家展示這些操作的方法。首先我們新建一個文件,在舞臺上擺出下面這些按鈕,我們今天對這個聲音文件的操縱就如按鈕所示:動手之前我們按下Ctrl+Shift+F12,打開ActionScript設(shè)置,將“自動申明舞臺對象”打鉤取消,我們將每個對象自己用Public聲明,這樣做的好處是開發(fā)時每個元件的屬性方便引用和提醒。我們新建一個文檔類,首先聲明舞臺上這些按鈕,并定義聲音變量:testSound,控制變量testChannel,testTrans,testPosition。publicvarbtnPlay:SimpleButton;publicvarbtnPause:SimpleButton;publicvarbtnStop:SimpleButton;publicvarbtnQuick:SimpleButton;publicvarbtnVocUp:SimpleButton;publicvarbtnVocDown:SimpleButton;publicvarbtnPanUp:SimpleButton;publicvarbtnPanDown:SimpleButton;privatevartestSound:Sound;privatevartestChannel:SoundChannel;privatevartestTrans:SoundTransform;privatevartestPosition:Number=0;首先用下面代碼將一首叫做“test.mp3"的音樂加載到舞臺。publicfunctionTestSoundMain(){testSound=newSound();testChannel=newSoundChannel();testTrans=newSoundTransform();testSound.load(newURLRequest("test.mp3"));testSound.addEventListener(Event.COMPLETE,soundLoadOver);}privatefunctionsoundLoadOver(e:Event):void

{testSound.removeEventListener(Event.COMPLETE,soundLoadOver);soudLoad=true;}播放按鈕功能??刂埔魳凡シ诺陌粹o,單擊后音樂開始播放,并記錄音樂的SoundChannel屬性。為了防止連擊,我們定義一個isSoundPlay布爾變量判斷音樂是否在播放中。//播放按鈕功能privatefunctionplayBtnEvent():void{btnPlay.addEventListener(MouseEvent.CLICK,soundPlay);}privatefunctionsoundPlay(e:MouseEvent):void

{if(isSoundPlay)return;isSoundPlay=true;testChannel=testSound.play(testPosition);}暫停按鈕功能,該按鈕讓音樂暫停掉,為了能繼續(xù)播放,我們需要記錄下此時testChannel的位置,然后播放按鈕單擊時可以繼續(xù)播放//暫停按鈕功能privatefunctionpauseBtnEvent():void{btnPause.addEventListener(MouseEvent.CLICK,soudPause);}privatefunctionsoudPause(e:MouseEvent):void

{if(!isSoundPlay)return;isSoundPlay=false;testPosition=testChannel.position;testChannel.stop();}停止按鈕功能,單擊后音樂停止播放,記錄位置歸0.//停止按鈕功能privatefunctionstopBtnEvent():void{btnStop.addEventListener(MouseEvent.CLICK,soundStop);}privatefunctionsoundStop(e:MouseEvent):void

{isSoundPlay=false;testPosition=0testChannel.stop();}快進(jìn)聲音。單擊該按鈕時,我們讓聲音從當(dāng)前位置向前播放500毫秒,也就是快進(jìn)半秒。//快進(jìn)按鈕功能privatefunctionqucikBtnEvent():void{btnQuick.addEventListener(MouseEvent.CLICK,soudQuickPlay);}privatefunctionsoudQuickPlay(e:MouseEvent):void

{if(!isSoundPlay)return;testPosition=testChannel.position;testChannel.stop();testChannel=testSound.play(testPosition+500);}設(shè)定聲音的音量增加。控制音量就需要soundTransform對象了,它其實是testChanel的soundTransform屬性而已,通過它來控制音量。//音量增加privatefunctionvolumeUpBtnEvent():void{

btnVocUp.addEventListener(MouseEvent.CLICK,upSoudVoc);}privatefunctionupSoudVoc(e:MouseEvent):void

{if(!isSoundPlay)return;testTrans=testChannel.soundTransform;varaddedVoc:Number=testTrans.volume>1?1:(testTrans.volume+

0.05);testTrans.volume=addedVoc;testChannel.soundTransform=testTrans;}

設(shè)定聲音的音量減小。//音量減小privatefunctionvolumeDownBtnEvent():void{

btnVocDown.addEventListener(MouseEvent.CLICK,downSoundVoc);}privatefunctiondownSoundVoc(e:MouseEvent):void

{if(!isSoundPlay)return;testTrans=testChannel.soundTransform;vardownVoc:Number=testTrans.volume<0?0:(testTrans.volume-

0.05);testTrans.volume=downVoc;testChannel.soundTransform=testTrans;}

設(shè)定聲音的平衡度向右,點擊此按鈕聲音的平衡性會右移,直到變成右聲道。//平衡向右移動privatefunctionpanRightBtnEvent():void{

btnPanUp.addEventListener(MouseEvent.CLICK,upSoundPan);}privatefunctionupSoundPan(e:MouseEvent):void

{if(!isSoundPlay)return;testTrans=testChannel.soundTransform;varaddedPan:Number=testTrans.pan>1?1:(testTrans.pan+0.05);testTrans.pan=addedPan;testChannel.soundTransform=testTrans;}

設(shè)定聲音的平衡度向左,點擊此按鈕聲音的平衡性會左移,直到變成左聲道。//平衡向左移動privatefunctionpanLeftBtnEvent():void{

btnPanDown.addEventListener(MouseEvent.CLICK,downSoundPan);}privatefunctiondownSoundPan(e:MouseEvent):void

{if(!isSoundPlay)return;testTrans=testChannel.soundTransform;vardownPan:Number=testTrans.pan<0?0:(testTrans.pan-0.05);testTrans.pan=downPan;testChannel.soundTransform=testTrans;}

最后別忘了所有你定義的函數(shù)都要寫到音樂加載完成的那個函數(shù)里執(zhí)行,或者構(gòu)造函數(shù)也可以。就像下面這樣子://加載音樂并控制播放privatefunctionsoundLoadOver(e:Event):void

{testSound.removeEventListener(Event.COMPLETE,soundLoadOver);soudLoad=true;playBtnEvent();pauseBtnEvent();stopBtnEvent();qucikBtnEvent();volumeUpBtnEvent();volumeDownBtnEvent();panRightBtnEvent();panLeftBtnEvent();}所有這些一個個代碼合并到一起,就是我們主的文檔類。制作完畢!我沒有寫聲音加載過程和加載錯誤的監(jiān)聽,如果你的操作沒有聲音,那一定是你的聲音文件有問題,換個文件試試;還有留意下方的報錯提示。其實SoundTransform類還有四個讀寫屬性:leftToLeft,leftToRight,rightToLeft,rightToRight,用來設(shè)置左右輸入在左右揚聲器的音量,有興趣的同學(xué)可以細(xì)微研究:)AS3編程教學(xué)]利用xml加載并控制聲音本教材旨在講授兩個知識點,一個是對xml的讀取和解析,另一個是對加載外部音效的簡單播放控制首先我們新建一個舞臺,在舞臺上創(chuàng)建三個按鈕:加載btnLoad,播放btnPlay,暫停btnPause。,加載按鈕用來加載xml和音樂文件,播放用來繼續(xù)播放聲音,暫停用來暫停聲音,如下圖所示:首先我們要寫配置聲音資源的xml文件,因為要加一個音樂,所以xml非常簡單。

<?xmlversion="1.0"encoding="utf-8"?>

<data>

<sndpath="mSound.mp3">

</snd>

</data>

按照順序,我們先寫“加載”按鈕上的函數(shù)功能。加載按鈕主要完成兩步工作,第一是讀取sndData.xml里面的音樂路徑,第二是通過讀取到得路徑把音樂加載進(jìn)來并播放。因此我們要定義一個聲音類變量。

varloadSound:Sound=newSound();

//-------------------------------

addMouseEvent();

functionaddMouseEvent():void{

btnLoad.addEventListener(MouseEvent.CLICK,loadSoundData);

}

functionloadSoundData(e:MouseEvent):void{

varxLoader:URLLoader=newURLLoader();

xLoader.addEventListener(Event.COMPLETE,completeLoadData);

xLoader.load(newURLRequest("sndData.xml"));

}

functioncompleteLoadData(e:Event):void{

varmXML:XML=XML(e.target.data);

varsndPath:String=String(mXML.snd.@path);

trace(sndPath);

loadSound.load(newURLRequest(sndPath));

loadSound.addEventListener(Event.COMPLETE,completeLoadSound);

}

functioncompleteLoadSound(e:Event):void{

loadSound.play();

}單擊“加載”按鈕,當(dāng)這段代碼被執(zhí)行時,聲音便會被加載進(jìn)來并且自動播放!接下來寫聲音的暫停和播放按鈕。在AS3里,為了控制聲音播放暫停,我們需要另外定義一個SoundChannel對象和一個記錄聲音播放位置的變量,來達(dá)到這一目的。

varloadSound:Sound=newSound();

varsndChannel:SoundChannel;

varsndPostion:int;

//-------------------------------

addMouseEvent();

functionaddMouseEvent():void{

btnLoad.addEventListener(MouseEvent.CLICK,loadSoundData);

btnPlay.addEventListener(MouseEvent.CLICK,continuPlaySnd);

btnPause.addEventListener(MouseEvent.CLICK,pauseSnd);

}

//播放暫停

functioncontinuPlaySnd(e:MouseEvent):void{

sndChannel=loadSound.play(sndPostion);

}

functionpauseSnd(e:MouseEvent):void{

sndPostion=sndChannel.position;

sndChannel.stop();

}經(jīng)過測試,似乎功能已經(jīng)滿足,但是也有問題,當(dāng)聲音在播放時,點擊“播放按鈕”,聲音會二次播放重疊,其實,當(dāng)聲音正在播放的時候,播放不需要處理,只有暫停的時候才讓它繼續(xù)播放;同理,聲音只有在播放的時候,暫停按鈕才能起作用。所以我們定義需要一個是否播放的狀態(tài)布爾變量,當(dāng)播放時為true,暫停時為false,在按鈕單擊時加以判斷:

varisSoundPlay:Boolean=false;

//播放暫停

functioncontinuPlaySnd(e:MouseEvent):void{

if(isSoundPlay)return;

isSoundPlay=true;

sndChannel=loadSound.play(sndPostion);

}

functionpauseSnd(e:MouseEvent):void{

if(!isSoundPlay)return;

isSoundPlay=false;

sndPostion=sndChannel.position;

sndChannel.stop();

}此時測試音樂,一切都正常,但是舞臺上空白了很多,我們加一個波普效果,隨著音樂的播放暫停同步運動,這樣很明顯地看到你對音樂的控制了,如圖所示我們做一個簡單的波形動畫:給波形動畫命名為mcWave,然后修改控制函數(shù)。

//播放暫停

functioncontinuPlaySnd(e:MouseEvent):void{

if(isSoundPlay)return;

isSoundPlay=true;

sndChannel=loadSound.play(sndPostion);

mcWave.play();

}

functionpauseSnd(e:MouseEvent):void{

if(!isSoundPlay)return;

isSoundPlay=false;

sndPostion=sndChannel.position;

sndChannel.stop();

mcWave.stop();

}此時再測試,就會有一個波形直觀地顯示音樂的播放暫停了。此時源文件目錄如下:

完整代碼如下:

varloadSound:Sound=newSound();

varsndChannel:SoundChannel;

varsndPostion:int;

varisSoundPlay:Boolean=false;

mcWave.stop();

//-------------------------------

addMouseEvent();

functionaddMouseEvent():void

{

btnLoad.addEventListener(MouseEvent.CLICK,loadSoundData);

btnPlay.addEventListener(MouseEvent.CLICK,continuPlaySnd);

btnPause.addEventListener(MouseEvent.CLICK,pauseSnd);

}

//加載音樂

functionloadSoundData(e:MouseEvent):void

{

varxLoader:URLLoader=newURLLoader();

xLoader.addEventListener(Event.COMPLETE,completeLoadData);

xLoader.load(newURLRequest("sndData.xml"));

}

functioncompleteLoadData(e:Event):void

{

varmXML:XML=XML(e.target.data);

varsndPath:String=String(mXML.snd.@path);

loadSound.load(newURLRequest(sndPath));

loadSound.addEventListener(Event.COMPLETE,completeLoadSound);

}

functioncompleteLoadSound(e:Event):void{

sndChannel=loadSound.play();

isSoundPlay=true

mcWave.play();

}

//播放暫停

functioncontinuPlaySnd(e:MouseEvent):void{

if(isSoundPlay)return;

isSoundPlay=true;

sndChannel=loadSound.play(sndPostion);

mcWave.play();

}

functionpauseSnd(e:MouseEvent):void{

if(!isSoundPlay)return;

isSoundPlay=false;

sndPostion=sndChannel.position;

sndChannel.stop();

mcWave.stop();

}flashas3使用,播放聲音和加載外部聲音文件在AS3中使用聲音跟AS2有很大的不同。先看下Flash幫助中的一些介紹,然后我們再使用導(dǎo)入到Flash中的聲音做個小測試。

理解聲音的結(jié)構(gòu)應(yīng)用程序可以從4個地方加載聲音:運行時從外部聲音文件里加載內(nèi)嵌到SWF文件里的聲音資源從連接到用戶系統(tǒng)的麥克風(fēng)上獲取聲音數(shù)據(jù)從遠(yuǎn)程多媒體服務(wù)器,比如FlashMediaServer獲取聲音流可以等到聲音全部加載后再播放,也可以邊加載邊播放。ActionScript3.0和FlashPlayer支持以mp3格式存儲的聲音。它們不能直接加載或播放其他格式的聲音,比如WAV或AIFF。使用AdobeFlashCS3Professional,可以導(dǎo)入WAV或AIFF格式的聲音,然后就可以把它們以MP3的格式嵌入到SWF文件中。Flash開發(fā)工具可以壓縮嵌入的聲音文件以減少文件大小,不過這樣需要以降低聲音質(zhì)量的代價。更多信息查看"ImportingSounds"inUsingFlash.ActionScript3.0聲音使用flash.media包中的下列類類描述flash.media.SoundSound類用來加載聲音,管理聲音的基本屬性以及使聲音開始播放flash.media.SoundChannel當(dāng)程序播放一個聲音對象的時候,會創(chuàng)建一個新的SoundChannel對象控制播放。SoundChannel對象同時控制聲音的左右頻道。每個播放的聲音都有自己的SoundChannel對象。flash.media.SoundLoaderContextSoundLoaderContext類指定當(dāng)加載一個聲音的時候使用多少秒的緩沖區(qū),以及從服務(wù)器加載文件的時候FlashPlayer是否查找跨域策略文件。SoundLoaderContext對象作為Sound.load()方法的參數(shù)使用。flash.media.SoundMixerSoundMixer類控制程序中所有聲音的回放及安全屬性。實際上,多個聲音頻道通過一個共同的SoundMixer對象混合在一起,因此,SoundMixer對象的屬性會影響正在播放的所有SoundChannel對象。flash.media.SoundTransformSoundTransform類包含用于控制音量和平衡的值。SoundTransform對象可以應(yīng)用到一個單獨的SoundChannel對象,全局的SoundMixer對象或者一個Microphone對象。flash.media.ID3InfoID3Info對象包含mp3文件中的ID3元數(shù)據(jù)信息。flash.media.MicrophoneMicrophone類表示連接到用戶電腦上的麥克風(fēng)或者其他聲音輸入設(shè)備。從麥克風(fēng)輸入的音頻可以傳送到本地喇叭上或者遠(yuǎn)程服務(wù)器上。Microphone對象控制它自己聲音流的取樣率。每個加載和播放的聲音都需要它自己的Sound類和SoundChannel類。從多個SoundChannel實例輸出的聲音在播放中通過全局的SoundMixer混合在一起。Sound,SoundChannel和SoundMixer類不能用在從麥克風(fēng)或者流媒體服務(wù)器獲取的聲音上。加載外部聲音文件Sound類的每個實例都用來加載和回放指定的聲音。應(yīng)用程序不能重復(fù)使用一個Sound對象加載多于一個的聲音。如果想加載一個新的聲音,需要創(chuàng)建一個新的聲音對象。如果加載一個小的聲音文件,比如要附加在按鈕上的點擊聲音,可以像下面這樣創(chuàng)建一個新的Sound,然后讓它自動加載聲音文件:ActionScriptCode:varreq:URLRequest=newURLRequest("click.mp3");var

s:Sound=newSound(req);Sound()構(gòu)造函數(shù)使用一個URLRequest對象作為第一個參數(shù)。當(dāng)指定了URLRequest參數(shù)的時候,Sound對象就開始自動加載指定的聲音文件。除了這個最簡單的情況之外,應(yīng)用程序都應(yīng)該注意聲音的加載過程并監(jiān)視加載過程中出現(xiàn)的錯誤。比如,如果這個點擊聲音特別的大,可能在用戶點擊按鈕觸發(fā)這個聲音的時候這個聲音文件還沒有完全加載完。試圖播放一個未加載完的聲音可能導(dǎo)致一個運行期錯誤。安全的做法是等聲音完全加載后再允許用戶的那些可能導(dǎo)致聲音播放的行為。在聲音加載過程中,Sound對象會發(fā)送幾個不同的事件。應(yīng)用程序可以監(jiān)聽這些事件來跟蹤加載過程以確保聲音在完全加載后才能播放。下表列出了聲音對象可能發(fā)送的事件。事件描述open(Event.OPEN)在聲音加載操作剛開始時發(fā)送。progress(ProgressEvent.PROGRESS)當(dāng)從文件或者流中接收到數(shù)據(jù)的時候周期性的發(fā)送。id3(Event.ID3)當(dāng)一個mp3聲音的ID3數(shù)據(jù)可用時發(fā)送。complete(Event.COMPLETE)當(dāng)聲音的所有數(shù)據(jù)加載完后發(fā)送。ioError(IOErrorEvent.IO_ERROR)如果聲音文件不能定位或者加載過程中在所有數(shù)據(jù)接收完之前被中斷的時候發(fā)送。下面的代碼演示了如何在聲音加載完后播放一個聲音:ActionScriptCode:importflash.events.Event;import

flash.media.Sound;import

.URLRequest;

var

s:Sound=newSound();s.addEventListener(Event.COMPLETE,onSoundLoaded);var

req:URLRequest=newURLRequest("bigSound.mp3");s.load(req);

function

onSoundLoaded(event:Event):void{

var

localSound:Sound=event.targetasSound;

localSound.play();}首先,這段示例代碼創(chuàng)建了一個新的Sound對象,但并沒有指定URLRequest參數(shù)。然后,它監(jiān)聽Sound對象的Event.COMPLETE事件,當(dāng)所有聲音數(shù)據(jù)加載完后執(zhí)行onSoundLoaded()方法。接下來,它使用一個新的URLRequest值調(diào)用Sound.load()方法。當(dāng)聲音全部加載完后執(zhí)行onSoundLoaded()方法。Event對象的target屬性是Sound對象的引用。調(diào)用Sound對象的play()方法開始播放聲音。監(jiān)視聲音加載過程聲音可能非常大,加載需要相當(dāng)長的時間。FlashPlayer允許在聲音全部加載完前就能播放,你可能想想給用戶一個顯示聲音加載了多少以及播放了多少。Sound類的兩個事件使得顯示加載進(jìn)度變得相當(dāng)容易:ProgressEvent.PROGRESS和Event.COMPLETE.下面的代碼展示了如何使用這些事件顯示聲音的加載進(jìn)度:ActionScriptCode:importflash.events.Event;import

flash.events.ProgressEvent;import

flash.media.Sound;import

.URLRequest;

var

s:Sound=newSound();s.addEventListener(ProgressEvent.PROGRESS,onLoadProgress);s.addEventListener(Event.COMPLETE,onLoadComplete);s.addEventListener(IOErrorEvent.IO_ERROR,onIOError);

var

req:URLRequest=newURLRequest("bigSound.mp3");s.load(req);

function

onLoadProgress(event:ProgressEvent):void{

var

loadedPct:uint=

Math.round(100*(event.bytesLoaded/event.bytesTotal));

trace("Thesoundis"+loadedPct+"%loaded.");}

functiononLoadComplete(event:Event):void{

varlocalSound:Sound=event.targetasSound;

localSound.play();}functiononIOError(event:IOErrorEvent){

trace("Thesoundcouldnotbeloaded:"+event.text);}這段代碼首先創(chuàng)建了一個Sound對象,然后為事件ProgressEvent.PROGRESS和Event.COMPLETE添加監(jiān)聽器。在調(diào)用了Sound.load()方法及收到第一組數(shù)據(jù)后,開始出現(xiàn)ProgressEvent.PROGRESS事件,觸發(fā)onSoundLoadProgress()方法。聲音加載的百分比等于ProgressEvent對象的bytesLoaded屬性除以bytesTotal屬性。在Sound對象上同樣可以獲取bytesLoaded和bytesTotal。上面的代碼簡單展示了聲音加載信息,但是你可以使用bytesLoaded和bytesTotal值來控制進(jìn)度條組件。這段代碼同樣展示了如何組織和響應(yīng)加載中發(fā)生的錯誤。比如,如果無法定位指定的聲音文件,會發(fā)送Event.IO_ERROR事件。前面代碼中當(dāng)發(fā)生錯誤時會調(diào)用onIOError()方法顯示簡單的錯誤信息。使用嵌入的聲音

好了,下面我們把聲音導(dǎo)入到庫里使用。

打開FlashCS3,選擇文件->導(dǎo)入到庫,選擇好聲音,然后確定后會導(dǎo)入聲音。打開庫面板,找到我們導(dǎo)入的聲音,右鍵,選擇”linkage…”菜單\o"soundlinkage.JPG"會彈出如下框,選擇ExportforActionScript注意觀察這個彈出框,它與AS2中明顯不同的是,標(biāo)識符欄(identifier欄)不能填寫,而類(Class)和基類(Baseclass)欄必須填寫。類的名字默認(rèn)是聲音的文件名,但是名字中只能能有字母數(shù)字,且以字母開頭,因此圖中的名字01.mp3是不合格的,可以改為mp3或其他符合規(guī)則的名字?;惥褪莊lash.media.Sound。我們點確定,會彈出下框:大意是指定的類”mp3″在類路徑下找不到,在SWF文件導(dǎo)出時會自動為你創(chuàng)建一個類。點確定就可以了。

在幀上寫如下代碼:ActionScriptCode:vardrum:mp3=newmp3();var

channel:SoundChannel=drum.play();導(dǎo)出,就可以聽到聲音了。\o"PermanentLink:[as3]播放聲音"[as3]播放聲音播放一個加載的聲音可以簡單的調(diào)用Sound對象的Sound.play()方法,就像下面這樣:ActionScriptCode:varsnd:Sound=newSound(newURLRequest("smallSound.mp3"));snd.play();當(dāng)使用ActionScript3.0播放聲音的時候,你可以實現(xiàn)下列操作:從一個指定的位置播放聲音(不一定是最開始)暫停聲音,然后從暫停的位置處重新開始播放可以精確的知道聲音什么時候播放完了跟蹤聲音的播放進(jìn)度當(dāng)聲音播放的時候改變音量或者均衡要在播放過程中實現(xiàn)這些效果,使用SoundChannel,SoundMixer,和SoundTransform類.SoundChannel控制一個單獨的聲音的播放.SoundChannel.position屬性可以被當(dāng)作播放頭,用來指示數(shù)據(jù)播放的位置.當(dāng)程序調(diào)用Sound.play()方法時,會創(chuàng)建一個新的SoundChannel實例來控制播放.程序可以為Sound.play()方法指定它的startTime參數(shù),該參數(shù)接收以毫秒為單位的數(shù)字,這樣就可以使聲音從指定的位置開始播放.如果同時指定了Sound.play()方法的startTime參數(shù)和loops參數(shù),那么當(dāng)聲音會從相同的起始位置重復(fù)播放就像下面這樣:ActionScriptCode:varsnd:Sound=newSound(newURLRequest("repeatingSound.mp3"));snd.play(1000,3);在這個例子中,聲音會接連從離開始1秒的位置播放3次.暫停和重新開始聲音如果你的程序播放一個長聲音,比如一首歌或者播客(podcasts,暫譯為播客),你可能想允許用戶可以暫停,然后繼續(xù)播放這個聲音.然后聲音并不能像字面意思那樣實現(xiàn)暫停,它只能停止(從字面意思上來講,暫停跟停止是不同的,我們想實現(xiàn)暫停效果,但是沒有直接的ActionScript語句可以實現(xiàn)暫停).但是,聲音可以從任何位置處播放.因此你可以記錄下它停止的位置,然后從這個位置后面開始播放,就實現(xiàn)了暫停效果.比如,首先像下面這樣加載并播放一個聲音:ActionScriptCode:varsnd:Sound=newSound(newURLRequest("bigSound.mp3"));var

channel:SoundChannel=snd.play();當(dāng)聲音播放的時候SoundChannel.position屬性顯示聲音當(dāng)前的播放位置.程序可以像下面這個例子一樣,在停止它之前記錄下它的位置:ActionScriptCode:varpausePosition:int=channel.position;channel.stop();要重新播放聲音,傳遞之前記錄的播放位置數(shù)據(jù)來使聲音從它停止的地方重新開始播放.ActionScriptCode:channel=snd.play(pausePosition);監(jiān)視播放你的程序可能需要知道什么時候它停止了播放,以便去播放另一個聲音,或者清除在播放過程中使用的一些資源.當(dāng)聲音播放完畢的時候SoundChannel類發(fā)送一個Event.SOUND_COMPLETE事件.你的程序可以監(jiān)聽這個事件并作出適當(dāng)?shù)膭幼?就像下面這樣:ActionScriptCode:importflash.events.Event;import

flash.media.Sound;import

.URLRequest;

var

snd:Sound=newSound("smallSound.mp3");var

channel:SoundChannel=snd.play();s.addEventListener(Event.SOUND_COMPLETE,onPlaybackComplete);

public

functiononPlaybackComplete(event:Event){

trace("Thesoundhasfinishedplaying.");}SoundChannel類在播放中并不發(fā)送進(jìn)度事件.要報告播放進(jìn)度,你可以自己設(shè)置一個時間進(jìn)制并跟蹤播放頭的位置.可以使用SoundChannel.position屬性值除以聲音長度來計算已播放的百分?jǐn)?shù):ActionScriptCode:varplaybackPercent:uint=100*(channel.position/snd.length);但是,只有在播放前聲音全部加載完了,這段代碼才能精確顯示播放的百分比.Soun

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論