flash-as3使用-播放声音和加载外部声音文件_第1页
flash-as3使用-播放声音和加载外部声音文件_第2页
flash-as3使用-播放声音和加载外部声音文件_第3页
flash-as3使用-播放声音和加载外部声音文件_第4页
flash-as3使用-播放声音和加载外部声音文件_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FlashAS3.0打造漂亮的水汶实例教程在这个教程中,我们将用到置换图滤镜(DisplacementMapFilter)和BitmapData类的的杂点功能(perlinNoise),这两个家伙常常给我们带一些令人兴奋的效果,它们今天的合作为我们创造了一个漂亮的的水汶,看看下面的动画,应该还不错吧。现在我开始来构建这个漂亮的水汶:即然是水汶,我想首先要找一张含水的图片吧,百度一下吧,河道,湖泊,水池,你喜欢就行。1.新建一AS3.0文档,将帧频设为30,将你刚百度到的图片导入到库中,点右键,在属性面板中将“使用JPEG导入品质”前的钩钩去掉,这样做图片的体积就会大大地减小哦。2.新建一个影片剪辑元件,将图片拖到舞台上,设置图片的大小,你想设多大呢?反正我是按默认的550x400.图片在大小与文档大小一样大哈。点击对齐面板,相对于舞台居中对齐。3.回到主场景,将MC拖到舞台上,居中放置,为它设置一个实例名称,我用的是”pic”图层上锁。4.新插入一图层,将图片(注意是图片不是MC哈),拖到舞台上,打开对齐面板,宽高匹配,居中对齐。现在第1,2层的图像是完全重合的,请确认是这样的。选择图片,点击修改>分离,将水面部分选出,删除。可以将第1层隐藏,看看删除后的效果。如下图: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,测试影片,一个漂亮的水汶效果立即出现在你的眼前。代码分析:首先声明了一个与图片一样大的BitmapData类实例bmp,用来作为置换图滤镜的参数。

varbmp:BitmapData=newBitmapData(550,400);

然后声明一个置换图滤镜zh,将bmp作为参数。

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

接下来声明了两个点,并将这两个点放到到一个叫zdxg的数组中,这个数组将用于bmp产生杂点的参数。

varp1:Point=newPoint();

varp2:Point=newPoint();

varzdxg:Array=[p1,p2];

然后,在ENTER_FRAME事件中调用ld函数。

addEventListener(Event.ENTER_FRAME,ld);

ld函数,动态改变两个点的位置,然后使bmp应用杂点功能,在每一帧的间隔产生不同的杂点效果,使置换滤镜效果产生变化,最后让影片剪辑pic,应用滤镜,实现水汶效果。

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旋转动画效果效果演示:〖本教程着重于代码的编写,版本AS3.0。图形元件的制作不作讲解,请参看有关教程。〗1、新建Flash文档,创建5个图形,(或导入5张图片到库中)。2、创建一个影片剪辑,1层为图片层2层为代码层。在1层把5张图片分别放在5帧中,在代码层输入stop();如图:3、Ctrl+L打开库,右键单击影片剪辑实例做链接,类名为:IconMenu如图:4、返回场景1,图层1为背景层,图层2为代码层。在图层1导入背景图片。图层2输入代码:1.include"Math2.as"

2.//图片容器

3.varmenu:Sprite=newSprite();

4.//使图标移动

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.//旋转速度

14.varspeed:Number=0;

15.initMenu(5);

16.functioninitMenu(n:int){

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

18.varmc:MovieClip=newIconMenu();

19.//缩小图标

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

21.menu.addChild(mc);

22.}

23.}

24.//事件侦听器函数

25.functionmoveMenu(e:Event):void{

26.//获取图标数

27.variconCount:int=menu.numChildren;

28.//定义数组

29.vardepthArray:Array=newArray();

30.//把360度平分

31.varangle:Number=360/iconCount;

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

33.//根据深度获取图标

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

35.//跳转到不同帧,来显示不同的图标

36.mc.gotoAndStop(z+1);

37.//设置图标的位置

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.//保存图标到数组

44.depthArray[z]=mc;

45.}

46.//重新设置图标的深度

47.arrange(depthArray);

48.speed+=2;

49.}

50.functionarrange(depthArray:Array):void{

51.//按照y坐标排序

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(这个文档是进行三角函数的计算)输入代码:1.//角度转弧度

2.functionangleToRadian(angle:Number):Number

3.{

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

5.}

6.//弧度转角度

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.}

复制代码把fla文档与Math2.as文档保存在同一目录下,进行测试。[AS3编程教学]从库中加载声音并控制播放概述:Flash交互作品对于声音的控制是比较灵活和常用的,接下去笔者将抽空对声音控制写一批由简至难的教程,而本节教程详细讲述如何从库里加载一个声音文件到舞台上并控制其播放。首先,我们打开FlashCS5,按下Ctrl+N,新建一个FlashAS3文档,如下图所示:其次,我们需要导入一个mp3格式的音乐文件到库中。可以执行“文件/导入/导入到库”来操作,也可以直接从文件夹拖动到flash库里,如下图所示我们导入了声音文件:要用程序将声音加载到舞台控制播放,那么就需要给声音文件一个绑定的类名,所以我们在声音文件上单击右键/属性,然后点击ActionScript,勾选“为ActionScript导出和第一帧导出”,给声音一个链接类名:TestSound:选择主时间轴第一帧,按下F9,写以下代码,然后按下Ctrl+Enter,你便能听到音乐播放了:

importflash.media.Sound;

varmySound:Sound=newTestSound()asSound;

mySound.play();

播放函数有一个开始播放时间和重复播放次数的参数,我们让声音从第三秒开始播放,并且连续播放三遍需要这样写:

importflash.media.Sound;

varmySound:Sound=newTestSound()asSound;

mySound.play(3000,3);还有一个就是循环播放,当声音播放结束后自动开始再次播放,重复无数遍,此时就需要增加一个事件监听,当播放结束后再次开始:

importflash.media.Sound;

varmySound:Sound=newTestSound()asSound;

varsndChanel:SoundChannel=mySound.play();

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

mySound.play();}如果声音文件导入时提示“一个或多个文件未导入”,一般是mp3文件过大或者格式不兼容,你下载一个“全能音频转换通”,另存为一下就好了。[AS3.0编程教学]最全的声音控制方法网上做flash音乐播放器的人不少,这个作品主要是对声音的外部读取,然后保存,然后控制播放,暂停,停止等操作,今天这个作品就是向大家展示这些操作的方法。首先我们新建一个文件,在舞台上摆出下面这些按钮,我们今天对这个声音文件的操纵就如按钮所示:动手之前我们按下Ctrl+Shift+F12,打开ActionScript设置,将“自动申明舞台对象”打钩取消,我们将每个对象自己用Public声明,这样做的好处是开发时每个元件的属性方便引用和提醒。我们新建一个文档类,首先声明舞台上这些按钮,并定义声音变量: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;}播放按钮功能。控制音乐播放的按钮,单击后音乐开始播放,并记录音乐的SoundChannel属性。为了防止连击,我们定义一个isSoundPlay布尔变量判断音乐是否在播放中。//播放按钮功能privatefunctionplayBtnEvent():void{btnPlay.addEventListener(MouseEvent.CLICK,soundPlay);}privatefunctionsoundPlay(e:MouseEvent):void

{if(isSoundPlay)return;isSoundPlay=true;testChannel=testSound.play(testPosition);}暂停按钮功能,该按钮让音乐暂停掉,为了能继续播放,我们需要记录下此时testChannel的位置,然后播放按钮单击时可以继续播放//暂停按钮功能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();}快进声音。单击该按钮时,我们让声音从当前位置向前播放500毫秒,也就是快进半秒。//快进按钮功能privatefunctionqucikBtnEvent():void{btnQuick.addEventListener(MouseEvent.CLICK,soudQuickPlay);}privatefunctionsoudQuickPlay(e:MouseEvent):void

{if(!isSoundPlay)return;testPosition=testChannel.position;testChannel.stop();testChannel=testSound.play(testPosition+500);}设定声音的音量增加。控制音量就需要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;}

设定声音的音量减小。//音量减小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;}

设定声音的平衡度向右,点击此按钮声音的平衡性会右移,直到变成右声道。//平衡向右移动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;}

设定声音的平衡度向左,点击此按钮声音的平衡性会左移,直到变成左声道。//平衡向左移动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;}

最后别忘了所有你定义的函数都要写到音乐加载完成的那个函数里执行,或者构造函数也可以。就像下面这样子://加载音乐并控制播放privatefunctionsoundLoadOver(e:Event):void

{testSound.removeEventListener(Event.COMPLETE,soundLoadOver);soudLoad=true;playBtnEvent();pauseBtnEvent();stopBtnEvent();qucikBtnEvent();volumeUpBtnEvent();volumeDownBtnEvent();panRightBtnEvent();panLeftBtnEvent();}所有这些一个个代码合并到一起,就是我们主的文档类。制作完毕!我没有写声音加载过程和加载错误的监听,如果你的操作没有声音,那一定是你的声音文件有问题,换个文件试试;还有留意下方的报错提示。其实SoundTransform类还有四个读写属性:leftToLeft,leftToRight,rightToLeft,rightToRight,用来设置左右输入在左右扬声器的音量,有兴趣的同学可以细微研究:)AS3编程教学]利用xml加载并控制声音本教材旨在讲授两个知识点,一个是对xml的读取和解析,另一个是对加载外部音效的简单播放控制首先我们新建一个舞台,在舞台上创建三个按钮:加载btnLoad,播放btnPlay,暂停btnPause。,加载按钮用来加载xml和音乐文件,播放用来继续播放声音,暂停用来暂停声音,如下图所示:首先我们要写配置声音资源的xml文件,因为要加一个音乐,所以xml非常简单。

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

<data>

<sndpath="mSound.mp3">

</snd>

</data>

按照顺序,我们先写“加载”按钮上的函数功能。加载按钮主要完成两步工作,第一是读取sndData.xml里面的音乐路径,第二是通过读取到得路径把音乐加载进来并播放。因此我们要定义一个声音类变量。

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();

}单击“加载”按钮,当这段代码被执行时,声音便会被加载进来并且自动播放!接下来写声音的暂停和播放按钮。在AS3里,为了控制声音播放暂停,我们需要另外定义一个SoundChannel对象和一个记录声音播放位置的变量,来达到这一目的。

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();

}经过测试,似乎功能已经满足,但是也有问题,当声音在播放时,点击“播放按钮”,声音会二次播放重叠,其实,当声音正在播放的时候,播放不需要处理,只有暂停的时候才让它继续播放;同理,声音只有在播放的时候,暂停按钮才能起作用。所以我们定义需要一个是否播放的状态布尔变量,当播放时为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,然后修改控制函数。

//播放暂停

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帮助中的一些介绍,然后我们再使用导入到Flash中的声音做个小测试。

理解声音的结构应用程序可以从4个地方加载声音:运行时从外部声音文件里加载内嵌到SWF文件里的声音资源从连接到用户系统的麦克风上获取声音数据从远程多媒体服务器,比如FlashMediaServer获取声音流可以等到声音全部加载后再播放,也可以边加载边播放。ActionScript3.0和FlashPlayer支持以mp3格式存储的声音。它们不能直接加载或播放其他格式的声音,比如WAV或AIFF。使用AdobeFlashCS3Professional,可以导入WAV或AIFF格式的声音,然后就可以把它们以MP3的格式嵌入到SWF文件中。Flash开发工具可以压缩嵌入的声音文件以减少文件大小,不过这样需要以降低声音质量的代价。更多信息查看"ImportingSounds"inUsingFlash.ActionScript3.0声音使用flash.media包中的下列类类描述flash.media.SoundSound类用来加载声音,管理声音的基本属性以及使声音开始播放flash.media.SoundChannel当程序播放一个声音对象的时候,会创建一个新的SoundChannel对象控制播放。SoundChannel对象同时控制声音的左右频道。每个播放的声音都有自己的SoundChannel对象。flash.media.SoundLoaderContextSoundLoaderContext类指定当加载一个声音的时候使用多少秒的缓冲区,以及从服务器加载文件的时候FlashPlayer是否查找跨域策略文件。SoundLoaderContext对象作为Sound.load()方法的参数使用。flash.media.SoundMixerSoundMixer类控制程序中所有声音的回放及安全属性。实际上,多个声音频道通过一个共同的SoundMixer对象混合在一起,因此,SoundMixer对象的属性会影响正在播放的所有SoundChannel对象。flash.media.SoundTransformSoundTransform类包含用于控制音量和平衡的值。SoundTransform对象可以应用到一个单独的SoundChannel对象,全局的SoundMixer对象或者一个Microphone对象。flash.media.ID3InfoID3Info对象包含mp3文件中的ID3元数据信息。flash.media.MicrophoneMicrophone类表示连接到用户电脑上的麦克风或者其他声音输入设备。从麦克风输入的音频可以传送到本地喇叭上或者远程服务器上。Microphone对象控制它自己声音流的取样率。每个加载和播放的声音都需要它自己的Sound类和SoundChannel类。从多个SoundChannel实例输出的声音在播放中通过全局的SoundMixer混合在一起。Sound,SoundChannel和SoundMixer类不能用在从麦克风或者流媒体服务器获取的声音上。加载外部声音文件Sound类的每个实例都用来加载和回放指定的声音。应用程序不能重复使用一个Sound对象加载多于一个的声音。如果想加载一个新的声音,需要创建一个新的声音对象。如果加载一个小的声音文件,比如要附加在按钮上的点击声音,可以像下面这样创建一个新的Sound,然后让它自动加载声音文件:ActionScriptCode:varreq:URLRequest=newURLRequest("click.mp3");var

s:Sound=newSound(req);Sound()构造函数使用一个URLRequest对象作为第一个参数。当指定了URLRequest参数的时候,Sound对象就开始自动加载指定的声音文件。除了这个最简单的情况之外,应用程序都应该注意声音的加载过程并监视加载过程中出现的错误。比如,如果这个点击声音特别的大,可能在用户点击按钮触发这个声音的时候这个声音文件还没有完全加载完。试图播放一个未加载完的声音可能导致一个运行期错误。安全的做法是等声音完全加载后再允许用户的那些可能导致声音播放的行为。在声音加载过程中,Sound对象会发送几个不同的事件。应用程序可以监听这些事件来跟踪加载过程以确保声音在完全加载后才能播放。下表列出了声音对象可能发送的事件。事件描述open(Event.OPEN)在声音加载操作刚开始时发送。progress(ProgressEvent.PROGRESS)当从文件或者流中接收到数据的时候周期性的发送。id3(Event.ID3)当一个mp3声音的ID3数据可用时发送。complete(Event.COMPLETE)当声音的所有数据加载完后发送。ioError(IOErrorEvent.IO_ERROR)如果声音文件不能定位或者加载过程中在所有数据接收完之前被中断的时候发送。下面的代码演示了如何在声音加载完后播放一个声音: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();}首先,这段示例代码创建了一个新的Sound对象,但并没有指定URLRequest参数。然后,它监听Sound对象的Event.COMPLETE事件,当所有声音数据加载完后执行onSoundLoaded()方法。接下来,它使用一个新的URLRequest值调用Sound.load()方法。当声音全部加载完后执行onSoundLoaded()方法。Event对象的target属性是Sound对象的引用。调用Sound对象的play()方法开始播放声音。监视声音加载过程声音可能非常大,加载需要相当长的时间。FlashPlayer允许在声音全部加载完前就能播放,你可能想想给用户一个显示声音加载了多少以及播放了多少。Sound类的两个事件使得显示加载进度变得相当容易:ProgressEvent.PROGRESS和Event.COMPLETE.下面的代码展示了如何使用这些事件显示声音的加载进度: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);}这段代码首先创建了一个Sound对象,然后为事件ProgressEvent.PROGRESS和Event.COMPLETE添加监听器。在调用了Sound.load()方法及收到第一组数据后,开始出现ProgressEvent.PROGRESS事件,触发onSoundLoadProgress()方法。声音加载的百分比等于ProgressEvent对象的bytesLoaded属性除以bytesTotal属性。在Sound对象上同样可以获取bytesLoaded和bytesTotal。上面的代码简单展示了声音加载信息,但是你可以使用bytesLoaded和bytesTotal值来控制进度条组件。这段代码同样展示了如何组织和响应加载中发生的错误。比如,如果无法定位指定的声音文件,会发送Event.IO_ERROR事件。前面代码中当发生错误时会调用onIOError()方法显示简单的错误信息。使用嵌入的声音

好了,下面我们把声音导入到库里使用。

打开FlashCS3,选择文件->导入到库,选择好声音,然后确定后会导入声音。打开库面板,找到我们导入的声音,右键,选择”linkage…”菜单\o"soundlinkage.JPG"会弹出如下框,选择ExportforActionScript注意观察这个弹出框,它与AS2中明显不同的是,标识符栏(identifier栏)不能填写,而类(Class)和基类(Baseclass)栏必须填写。类的名字默认是声音的文件名,但是名字中只能能有字母数字,且以字母开头,因此图中的名字01.mp3是不合格的,可以改为mp3或其他符合规则的名字。基类就是flash.media.Sound。我们点确定,会弹出下框:大意是指定的类”mp3″在类路径下找不到,在SWF文件导出时会自动为你创建一个类。点确定就可以了。

在帧上写如下代码:ActionScriptCode:vardrum:mp3=newmp3();var

channel:SoundChannel=drum.play();导出,就可以听到声音了。\o"PermanentLink:[as3]播放声音"[as3]播放声音播放一个加载的声音可以简单的调用Sound对象的Sound.play()方法,就像下面这样:ActionScriptCode:varsnd:Sound=newSound(newURLRequest("smallSound.mp3"));snd.play();当使用ActionScript3.0播放声音的时候,你可以实现下列操作:从一个指定的位置播放声音(不一定是最开始)暂停声音,然后从暂停的位置处重新开始播放可以精确的知道声音什么时候播放完了跟踪声音的播放进度当声音播放的时候改变音量或者均衡要在播放过程中实现这些效果,使用SoundChannel,SoundMixer,和SoundTransform类.SoundChannel控制一个单独的声音的播放.SoundChannel.position属性可以被当作播放头,用来指示数据播放的位置.当程序调用Sound.play()方法时,会创建一个新的SoundChannel实例来控制播放.程序可以为Sound.play()方法指定它的startTime参数,该参数接收以毫秒为单位的数字,这样就可以使声音从指定的位置开始播放.如果同时指定了Sound.play()方法的startTime参数和loops参数,那么当声音会从相同的起始位置重复播放就像下面这样:ActionScriptCode:varsnd:Sound=newSound(newURLRequest("repeatingSound.mp3"));snd.play(1000,3);在这个例子中,声音会接连从离开始1秒的位置播放3次.暂停和重新开始声音如果你的程序播放一个长声音,比如一首歌或者播客(podcasts,暂译为播客),你可能想允许用户可以暂停,然后继续播放这个声音.然后声音并不能像字面意思那样实现暂停,它只能停止(从字面意思上来讲,暂停跟停止是不同的,我们想实现暂停效果,但是没有直接的ActionScript语句可以实现暂停).但是,声音可以从任何位置处播放.因此你可以记录下它停止的位置,然后从这个位置后面开始播放,就实现了暂停效果.比如,首先像下面这样加载并播放一个声音:ActionScriptCode:varsnd:Sound=newSound(newURLRequest("bigSound.mp3"));var

channel:SoundChannel=snd.play();当声音播放的时候SoundChannel.position属性显示声音当前的播放位置.程序可以像下面这个例子一样,在停止它之前记录下它的位置:ActionScriptCode:varpausePosition:int=channel.position;channel.stop();要重新播放声音,传递之前记录的播放位置数据来使声音从它停止的地方重新开始播放.ActionScriptCode:channel=snd.play(pausePosition);监视播放你的程序可能需要知道什么时候它停止了播放,以便去播放另一个声音,或者清除在播放过程中使用的一些资源.当声音播放完毕的时候SoundChannel类发送一个Event.SOUND_COMPLETE事件.你的程序可以监听这个事件并作出适当的动作,就像下面这样: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类在播放中并不发送进度事件.要报告播放进度,你可以自己设置一个时间进制并跟踪播放头的位置.可以使用SoundChannel.position属性值除以声音长度来计算已播放的百分数:ActionScriptCode:varplaybackPercent:uint=100*(channel.position/snd.length);但是,只有在播放前声音全部加载完了,这段代码才能精确显示播放的百分比.Soun

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论