flash制作音量控制滑块Word格式.docx
《flash制作音量控制滑块Word格式.docx》由会员分享,可在线阅读,更多相关《flash制作音量控制滑块Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
//通过当前按钮的坐标来控制b影片剪辑的伸长量。
声音ActionScript的编写和控制
来源:
linux宝库作者:
linux宝库发布时间:
2007-09-30
前言:
一个好的flash作品,缺少了声音,就如同人不会讲话相同。
而flash中对声音的支持也很不错,除了能够使用时间轴放置声音文档之外,我们还能够使用AS来更加准确的控制声音!
一、FLASH中如何创建声音控件
假如想控制动画中的声音,我们能够使用flash中的sound对象,通过sound命令创建一个新的sound对象。
之后再用attaceSound命令连接到库里的声音,就能够用来控制动画中的声音了。
常用命令讲解:
newSound()此命令用来创建一个新的sound对象,有了sound对象我们才能用AS来控制声音。
attachSound("
库中的声音"
)
此命令能够使我们创建的声音对象连接到库里的声音,以便进行控制。
start([从第几秒开始播放,循环次数])
此命令能够是声音开始播放,里面的两个参数是可选的。
stop()
停止声音的播放。
setVolume(音量级别)此命令能够控制声音的音量高低,音量级别只能是从0-100之间的数字。
呵呵,罗嗦了半天,现在咱们也应该用AS先做一个简单的小例子了。
二、创建一个简单的声音播放动画,能够实现简单的开始和停止播放声音。
操作步骤:
1、新建一个flash文档,按Ctrl+R(文档\导入)导入一个声音文档,声音文档能够是MP3或WAV格式的。
声音文档导入之后,在舞台上是看不见的,必须打开库才能看到我们导入的声音。
如图:
2、选中库中的声音文档,单击鼠标右键,在弹出的菜单中选择“链接...”将会弹出一个链接的对话框,请勾选“为动作脚本导出”和“在第一桢导出”选项,并输入一个标识符:
mysound
(名字可任意写),单击确定。
如下图:
3、回到主舞台,选中时间轴的第一桢,按F9打开动作面板。
现在我们要创建一个新的声音对象,并且连接到库里的声音。
用来控制声音。
输入以下脚本:
music=newsound();
//创建一个名字叫music的声音对象。
music.attachSound("
mysound"
//将这个声音对象和库里的标识符为“mysound”的声音连接。
完成脚本如下图:
4、现在需要在舞台上放置两个按钮分别控制声音的播放和停止。
选择“窗口”--“公用库”--“按钮”,打开flash为我们配置的公用按钮元件库,再将CircleButtons中的Play按钮和Stop按钮拖放到舞台上。
5、此时,舞台上将有播放和停止两个按钮,选中Play按钮,打开动作面板,输入以下脚本:
on(release){
music.start();
}//播放声音
选中Stop按钮,输入以下脚本:
music.stop();
}//停止播放声音
6、OK,一个简单的控制声音播放和停止的例子就完成了,快按Ctrl+回车来测试吧。
三、创建一个稍微复杂的例子,用来滑动按钮来控制声音的音量。
1、新建一个flash文档,并按Ctrl+R导入一个声音文档。
2、参照上个例子,打开库,并把导入的声音文档配置一个链界标识符。
这里配置标识符为“mysound”。
3、选中舞台时间轴第一桢,打开动作面板,创建一个新的声音对象,连接库中声音,并播放这个声音。
输入脚本如下:
music.start(1,10);
//播放声音,从第一秒开始播放,并循环10次
4、现在需要一个按钮做为滑动按钮,用来控制声音的音量!
按钮能够自己制作或使用公用库中的按钮,此例中我使用公用库中的按钮。
请在舞台适当位置放置一个按钮实例。
5、选中按钮,打开动作面板输入以下脚本:
on(press){
this.startDrag(false,left,top,right,bottom);
//开始拖动这个按钮,并且要规定他的拖动范围,分别由四个变量控制,4个变量的初始值稍后配置。
drag=true;
//用一个变量来判断这个按钮是否被拖动了。
假如他被拖动了,变量值为true(真)
}
on(release,releaseOutside){
this.stopDrag();
//当松开按钮或在按钮外部松开,就停止拖动。
并且下面的drag变量为假,表示按钮没有被拖动。
drag=false;
完整脚本如图:
6、再次选中这个按钮,并按F8键将他转换成一个影片剪辑!
起名为:
控制音量。
也就是“控制音量”这个影片剪辑里面包含了刚才的按钮。
7、选中舞台上这个控制音量影片剪辑的实例,打开动作面板,现在要配置拖动范围的4个初始值和配置音量大小控制。
请输入以下脚本:
onClipEvent(load){//当这个flash动画一开始,就配置下面4个变量的初始值。
为了使按钮只能上下拖动,所以,拖动范围的左、右都固定!
只能让按钮在上下100象素以内拖动。
top=_y;
left=_x;
right=_x;
bottom=_y+100;
onClipEvent(enterFrame){
if(drag==true){//假如按钮被拖动了,就开始执行下面的配置音量的算法,用来控制音量。
_root.music.setVolume(100-(_y-top));
//配置音量大小,比较难理解的是里面的算法:
100-(_y-top),通过代入数字来帮助我们理解,假如_y的值是100,我们的top值也是固定的为100。
当拖动按钮往下时,_y值就会变大,比如变为130,那么_y-top就等于30了,在用100-30就等于70,这个70就是音量的级别了。
伴随着按钮越往下拖,音量级就会变的越小,那么也就实现音量的控制了。
完整的脚本如下图:
8、现在就来测试您的成果吧。
波形声音的相关知识2
[2006-6-2917:
35:
00|By:
铭秋]
二、“事件”声音的尴尬
我们知道,Flash可以用“事件”方式和“数据流”方式调用声音。
这两种方法各有优缺点,下面将结合实例首先对“事件”方式进行介绍。
1.播放声音
“事件”方式将声音一次性载入内存进行播放,而且必须等待载入完毕才开始播放。
“事件”方式会将声音和一个事件的发生过程同步起来。
事件声音在它的起始关键帧开始显示时播放,并独立于时间轴播放完整个声音,即使影片停止也继续播放。
下面来看一个例子。
①新建一个Flash影片,导入一段音乐。
如图5-2所示
②新建一个按钮元件,绘制出一个矩形按钮,在"
指针经过"
帧设置声音,"
同步"
选项设为"
事件"
。
如图5-3所示
③将按钮放置到舞台上,将鼠标移动到按钮上,每移动一次,设置的声音就完整地播放一次,不管前一个声音是否停止。
于是,当快速多次将鼠标置于此按钮上方时,所有的声音会混合在一起,感觉非常杂乱。
笔者将这种现象称为"
重音"
现象。
怎样解决这个问题呢?
方法是将"
开始"
"
选项也是使用"
方式调用声音,只是如果这个声音正在播放,就不会重新播放新的声音。
若将这个按钮中声音设置为"
,则不论移动鼠标多少次至按钮上,只要声音没有停下来,就只会播放一次。
如图5-4所示。
2.停止声音
在上例中,声音只有一帧,也同样会播放完,这就是事件声音的特点--与时间轴不同步。
如果想停止这个声音,该怎么办呢?
我们仍旧使用此例讲解。
在按钮元件的"
按下"
帧插入关键帧,仍然选择此声音,将"
选项改为"
停止"
即可。
当鼠标移动到按钮上时,会播放声音,单击按钮时,停止刚才播放的声音。
如图5-5所示。
需要强调的是,声音不一定必须设置在同一个元件当中。
如果在主时间轴中有一个事件声音正在播放,在按钮中设置让此声音停止的同步选项也是可以的。
这种方法只能停止指定的声音,如果要停止所有的声音,可以使用stopAllSounds()函数。
例如,将下面的代码写在按钮上,按下按钮将停止所有的声音。
stopAllSounds();
虽然使用"
方式播放声音非常简单,只需要在关键帧上设置就可以了,但却不能让我们很好地控制。
它和时间轴不同步,不能随意停止,如果设置不好还会出现重音现象。
因此,笔者一般将其应用在较短的音效上,对于较长的音乐或解说,笔者一般使用"
数据流"
方式。
三、做一个声音MC
MC是"
影片剪辑"
的缩写,"
声音MC"
就是仅包含声音的影片剪辑。
在这个影片剪辑中,我们采用"
方式播放声音。
方式和时间轴同步,它将声音信息按照帧分成许多块,如果动画的速度过快,有些帧的声音块不能播放,它就会跳过这些块中的声音。
方式便于制作和动画演示同步的声音效果。
例如,使用Flash制作MV,为了让歌词和歌曲同步,就必须使用"
下面结合一个例子来讲解"
的制作。
舞台中有"
上一页"
、"
下一页"
和"
开始解说"
三个按钮,要求单击"
后播放解说声音,单击"
或"
按钮跳到相应的页并播放跳转到的页中的解说声音。
此例经常应用于幻灯片中,在每页中有不同的解说词对所展示的内容进行解释。
每页中的解说都是独立的。
如果使用事件声音制作,则在上一页和下一页中都要设置停止这一页解说的关键帧,停止的同时还要开始本页解说的播放,相当繁琐。
如果使用"
,则很容易解决。
①新建一个影片剪辑,在此剪辑的第一帧中输入stop()函数,在第二帧插入关键帧,选择已导入的需要播放的声音文件,设置"
方式为"
方式,并延长此帧一直到波形显示完毕。
数据流方式的声音与时间轴同步,如果这里的帧不够长,那么声音就只会播放显示的部分。
在最后一帧插入关键帧,并输入stop()函数。
②由于解说词是在单击按钮后才开始播放的,而且播放后停止,因此在"
的第一帧和最后一帧都要设置停止函数。
如图5-6所示。
②将声音MC放置在舞台上,将其实例命名为"
sound_mc"
如图5-7所示。
③在舞台上放置三个按钮,分别为"
播放声音"
,"
在"
按钮上写入如下脚本:
sound_mc.gotoAndPlay
(2);
按钮的脚本:
prevFrame();
按钮的脚本
nextFrame();
④单击"
按钮,sound_mc的内部时间轴开始播放,声音也随之播放。
⑤单击"
按钮,由于页面中没有"
了,正在播放的声音会立即停止。
⑥由于sound_mc内部时间轴的最后一帧有stop()命令,所以此解说播放一遍后会自动停止。
⑦要sound_mc自动播放,删除sound_mc内部时间轴第一帧中的stop()命令即可。
⑧如果需要一个"
停止解说"
按钮,只需要在按钮上加入如下代码:
sound_mc.gotoAndStop
(1);
对声音的控制相当灵活,通过对其时间轴的控制,可以随时停止或播放声音。
还可以在一个"
中放置多个声音,通过帧标签控制其内部时间轴的跳转,以实现选择曲目的功能。
笔者经常使用"
制作大段的解说词和背景音乐。
当然,"
方式也有缺点,在使用相同的压缩率的情况下,数据流方式明显比事件方式的声音质量差,这是由于"
方式将声音文件分割成小块造成的。
笔者曾试图通过调整压缩率减小声音质量造成的影响,但收效不大。
四、使用声音对象
除了使用"
方式和"
方式调用声音之外,还可以使用声音对象。
声音对象不像前面两者那样要受时间轴的限制,可以实现更加灵活的声音控制,如:
使用脚本随时停止声音,设置声音从中间开始播放,得到声音的长度,实时调整声音大小,设置声音平衡等等,甚至可以直接控制硬盘中的mp3文件!
下面将结合实例讲解声音对象在课件中的应用。
1.链接库中的声音
①一个Flash影片,导入一个声音文件。
在库中使用右键单击这个声音文件,在弹出的快捷菜单中选择"
链接"
命令,在随后弹出的"
链接属性"
对话框中选择"
为动作脚本导出"
在第一帧导出"
,将"
标识符"
设为"
testSound"
如图5-8所示。
②影片的第一帧写入如下脚本:
//建立一个名为test_sound的声音对象
test_sound=newSound();
//把库中标识符为"
的声音链接到test_sound声音对象
test_sound.attachSound("
③接着,就可以直接对这个声音对象操作了。
例如,播放这个声音的脚本是:
test_sound.start();
④如果希望从这个声音的第1.4秒的地方开始播放,则脚本如下:
test_sound.start(1.4);
⑤如果希望从头播放并循环100遍,则脚本如下:
test_sound.start(0,100);
⑥停止这个声音的脚本就更简单:
test_sound.stop();
⑦设置当前音量为50%:
test_sound.setVolume(50);
⑧仅使用左声道(扬声器):
test_sound.setPan(-100);
仅使用右声道(扬声器):
test_sound.setPan(100);
⑨得到音乐已经播放的时间(毫秒)
currentPosition=test_sound.position;
得到音乐的总长度(毫秒)
soundLength=test_sound.duration;
2.载入硬盘中的声音文件
从FlashMX开始,Flash能够直接从硬盘中载入MP3文件了!
这意味着我们只需要改变外部的MP3文件就可以改变Flash中的音乐了,也不用将巨大的歌曲文件导入到Flash内部了。
我们甚至可以用这个功能制作一个MP3播放器!
更重要的是,它用起来非常简单!
新建一个Flash影片,将下面的代码写入第一帧。
//首先当然要建立一个声音对象
mp3_sound=newSound();
//载入和Flash文件相同目录下的mylove.mp3文件
mp3_sound.loadSound("
mylove.mp3"
false);
loadSound函数有两个参数,第一个参数描述要载入的MP3文件的位置(注意,必须是MP3文件),可以使用相对路径。
例如,如果这个MP3文件在子目录music中,则上句写成:
music/mylove.mp3"
第二个参数决定是以"
方式载入还是以"
方式载入。
如果为ture,则使用数据流方式载入,只要载入的音乐数据足够启动解码器,声音就会自动播放;
如果为false,则是事件方式,只有在声音文件全部载入后才能够使用mp3_sound.start()进行播放。
笔者一般使用事件方式载入声音,这种方式控制起来比较容易。
判断外部MP3文件是否已经完全载入的语句如下:
mp3_sound.onLoad=function(){
soundLoaded="
ok"
;
当确定外部MP3文件已经完全载入后,就可以像链接库中的声音一样使用它了。
3.做一个音量滑块
音量滑块是课件中常用的功能。
下面将制作一个通用的音量滑块,不过如果要将它用在你的课件中,可还需要好好美化一下呀^_^
①首先制作一个按钮元件(或影片剪辑),拖动它的一个实例到舞台上,将实例命名为"
vol"
,在vol下方绘制一根高度100象素的竖线,在vol上方放置一个动态文本域,其关联变量为level。
如图5-9所示
②选中这三个对象(按钮、动态文本和直线),按F8键将它们转换成一个影片剪辑,命名为"
音量控制"
如图5-10所示。
为什么要转换成影片剪辑呢?
因为转换后,这个音量滑块就独立出来了,任何时候需要使用这个滑块的时候,将这个影片剪辑拷贝到需要使用的影片中就行了。
这也符合模块化的制作思想。
③接下来处理声音对象,在主时间轴的第一帧写入如下脚本:
mp3_sound=newSound();
true);
这里以数据流的方式载入mylove.mp3音乐文件,载入的音乐会自动播放。
④进入"
影片剪辑内部进行编辑。
单击"
音量剪辑"
内部时间轴的第一帧,输入以下脚本:
//限定"
能够被拖动的范围,为了避免level值出现小数,使用Math.ceil()函数将vol._y进一位
top=Math.ceil(vol._y);
left=vol._x;
right=vol._x;
bottom=top+100;
level=100;
//在vol按钮上按下鼠标时拖动
vol.onPress=function(){
startDrag("
false,left,top,right,bottom);
dragging=true;
};
//在vol按钮上释放鼠标时停止拖动
vol.onRelease=function(){
dragging=false;
//在外部释放鼠标也同样停止拖动
vol.onReleaseOutside=function(){
//下面的代码每秒执行12次
this.onEnterFrame=function(){
//如果当前正在拖动音量滑块则根据当前vol的位置确定level的值
if(dragging){
level=100-(vol._y-top);
}else{
//一旦停止拖动音量滑块就就检验level值是否超出限度,超出限度就设定level值为最大限度(或最小限度)
if(level>
100){
if(level<
0){
level=0;
//设定声音对象的音量值(由于声音对象是在主时间轴中定义的,所以要加上关键字_parent)
_parent.mp3_sound.setVolume(level);
⑤滑块完成,可以测试一下影片了。
本例中是使用数据流方式载入外部的MP3文件的,因此音乐会自动播放。
如果不希望这样,可以使用事件方式载入外部MP3文件,然后使用Sound.start()命令触发它。