返回首页

Flash声音代码详解

时间:2010-07-11 14:47来源:知行网www.zhixing123.cn 编辑:麦田守望者

Flash声音控制详解2008-02-14 10:55声音是多媒体的重要组成元素,恰当、灵活地运用声音往往是多媒体作品的成败关键。Flash作为人们

喜爱的多媒体工具,其声音的使用方式也丰富多样,本文探讨了在Flash中使用声音的几种情况,希望能

对大家有所帮助。


一、在时间轴中使用声音
这是Flash中声音最常使用的方式,任何一本Flash教材都会讲到这个问题,所以只作简单说明。


在设置一个关键帧后,只要你导入了声音文件,在帧属性面板都能进行该帧的声音设置。声音的同步属

性(Sync)主要有以下几种:


1.事件(Event)。用这种方式设置的声音会独立于时间轴播放,只要你没有用其它方式中止,它会一

直播放下去直到结束,其最大好处是可以用来设置一些类似循环的播放效果,只要你把它后面的循环属

性(Loop)设置得足够大。


2.开始(Start)。其特点是,当该帧开始播放,将停止动画中前面帧调用的声音,只播放当前帧中的

声音。


3.停止(Stop)。设置后,将立即停止播放当前帧的声音。
4.数据流(Stream)。设置后,会使动一的播放与声音同步,如果动画下载速度跟不上声音,将跳过相

关帧而保持与声音同步。另外,如果在播放中设置了(Stop)动画停止,声音也将停止;但如果使用

play()语句,声音又将从停止处接着播放。


二、用ActionScript语句调用声音
Flash提供了强大的脚本编辑功能,几乎能与一些专门的mg注册免费送彩金语言相媲美,在多媒体方面可谓更胜一筹,

用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实例
------分隔线----------------------------
推荐内容
猜你感兴趣
博聚网