病理学园地
您的位置:首页 > 教育技术

Flash音乐控制详解

一部优秀的flash动画中,音乐是必不可少的,音乐不仅可以给观众声音的震撼,还能进一步诠释flash的内涵。今天我们谈的不是选什么样的音乐,因为每 个人的都有自己对音乐的不同理解,所以非专业人员不敢妄语,也只是在这里通过技术方面和大家交流交流,一起探讨一下flash中的音乐。

1.音乐的格式。

我们在flash中常用的音乐无外乎wav和mp3两种音频文件。这两种音频格式各有各自的优缺点,就音质而言,两种格式的音质都相差无几,mp3音质略好,但差别不大。就大小而言,就各有不同了。

1: 在我的文件夹中,有一个真的.mp3文件,仅为1.6M左右,而我用音频软件转化成wav(真的.wav)后就变成了23M多,就音频文件来说因为mp3 是压缩过的文件,所以比wav小很多。我们将mp3和wav分别插入两个flash中,以进行对比。mp3的flash原文件(mp3.fla)是3M 多,wav的flash原文件(wav.fla)还是23M多,两种音频格式的原文件大小因音频格式不同差别是很大的。有人说,看来还是mp3好,小巧。 可并非如此,mp3.fla原文件虽然小,可flash在发布swf时会重新进行压缩,由于mp3已经是压缩格式,所以不会再次压缩。而wav.fla文 件虽然原文件大,但flash发布swf时会自动压缩,而这种压缩比例也是惊人的。刚才的mp3.fla大小为3M左右,发布后mp3.swf与原始 mp3音频文件文件差不多为1.5M左右;而wav.fla虽然比较大23M多,但发布后wav.swf仅仅258k。

2:mp3的原文件小,wav发布后的swf文件小。两者各有利弊,很多人喜欢用mp3,因为原文件小而且寻找方便,网上很多素材。wav可以让swf变的更小巧,flash就是以小巧见长,适宜网络传播为目标,所以wav也是不错的选择。

2.音乐的使用

了解了音乐不同格式的不同特点,下面我们就来谈谈音乐在flash中的使用。
flash插入音乐的方式不是通过外部连接,而是将音频文件导入flash中才能使用。以flashMX为例,点击"文件"->"导入"在弹出的对话框中选择你要插入的音频文件即可。在flashMX中有的Mp3不能导入,弹出对话框
,提示不能导入因为有读取问题,我想是因为压缩方法不同导致flash不能解压缩从而不能读取。由于不是专业人士,所以我也不能确定原因何在。不过这时,你可以用音频软件,如Sound Forge等将mp3转化成wav再导入flash就可以。
导 入flash之后,音频文件就在当前库中了,点击"window"->"library"可以查看。flash中音乐的使用不是象mc一样从库中拖 到舞台就可以,而是要通过帧来插入、控制音乐。点击你想要插入音乐的帧(一定是关键帧,如果不是关键帧按F6插入关键帧),打开properties(属 性)面板,
在这里你可以对音乐进行设置。
<1> 在Sound下拉列表里是所有当前库中的声音文件,可以选择你想要插入的音乐。
<2> 在Effect下拉里表里是可选择的各种效果如图5所示,包括:

None无;
Left Channel左声道播放;
Right Channer右声道播放;
Fade Left to Right从左声道切换到右声道;
Fade Right to Left从右声道切换到左声道;
Fade In声音淡入;
Fade Out声音淡出;
Cutstom自己设置声音的效果;
可以选择你喜欢的效果进行设置,如果你不喜欢系统提供的这些效果,也可以自己进行设置,在Effect下拉列表右侧有一个Edit按钮,点击Edit按钮弹出声音控制对话框,
图中有上、下两个声音波形,上部声音代表左声道,下部声音波形代表右声道,各部分解释如下:
①下拉列表框:可以选择系统提供的效果;
②控制手柄:通过控制手柄来调节左右声道的声音高低,用鼠标在波形上点击会出现新的手柄,用鼠标拖动手柄来调节声音高低,手柄在波形中越靠上声音越高,反之越靠下声音越底,那些淡入淡出的声效就是通过手柄实现的,想要删除一个手柄,用鼠标拖到波形外即可;
③声音线:反映声音的变化情况,通过控制手柄的高低变化,声音线也会随之变化,反映出的是声音变大或变小的趋势;
④开始控制器:控制音乐开始的位置,用鼠标拖动,在想要音乐开始的位置释放鼠标即可;
⑤结束控制器:控制音乐结束的位置,用鼠标拖动,在想要音乐结束的位置释放鼠标即可,与开始控制器结合可以截取声音片段;
⑥停止:使编辑好的音乐停止播放;
⑦开始:播放编辑好的音乐;
⑧放大比例:放大声音波形比例,以适于细节调整;
⑨缩小比例:缩小声音波形比例,以适于整体掌握;
⑩以时间显示:以时间显示音乐波形的长度(我们看到在上下两个声音波形的中间有一个坐标轴,它用来显示是以时间还是以帧计算音乐长度);
⑾以帧显示:以帧数显示音乐波形的长度;
要想做出音乐呼高呼底,淡入淡出等其他效果,调节控制手柄是关键,也可以从下拉列表框中选择系统提供的声效,查看不同特效的控制手柄的不同位置来加以体会。
<3>在Sync下拉列表框中可以选择音乐同步的方式:
Event:事件方式。当动画播放到插入音乐的帧时,就开始播放。音乐不受时间线的限制而独立播放,直到播放完毕。
Start:开始方式。当动画播放到插入音乐的帧时,就开始播放。当声音播放中再次遇到导入的统一声音时(在不同关键帧插入统一声音),将继续播放该声音,而不播放再次导入的,而在Event方式下将同时播放两个声音;
Stop:停止播放。停止所有声音的播放。
Stream:数据流方式。音乐受时间线的影响,只有在声音波形出现的地方才会播放声音。此时flash将强制声音与动画同步。在这种方式下,如果在同一时间放了太多东西或大型图片导致flash变慢,flash有可能出现跳帧现象。
以上是介绍flash中声音的插入、设置,插入flash后,你会看到插入声音的帧会出现声音波形,点击声音帧后的其他帧按F5插入空白帧(Stream方式下必须要用这种方法拉长声音波形),你会看到声音波形也随之出现的越多了。

3.音乐的阶进使用____as控制音乐

在flash 的编程语言as中有专门的声音对象Sound,利用Sound中的方法可以达到对声音的控制。在Sound中包括如下方法: Sound.attachSound;Sound.setPan;Sound.setTransform;Sound.setVolume;Sound.getPan; Sound.getTransform;Sound.getVolume;Sound.getBytesLoaded;Sound.getBytesToal; Sound.start;Sound.stop。
在使用这些方法前必须先使用构造器函数new Sound来创建新的对象。具体方法如下:
mysound=new Sound();//mysound是一个变量名,new Sound是一个构造函数,表示mysound是一个Sound对象。以后可以通过mysound来调用Sound方法,如 mysound.attachSound();在new Sound()里也可填写一个声音对象所在的mc,如mysound=new Sound(mymovie),这时就可以通过mysound来控制mymovie里的声音了,一般都不用写,然后用attachSound方法调如库中 的声音。
下面简单介绍一下声音Sound对象的方法的各个含义:

1)Sound.attachSound("name");
将flash 当前库中的连接名为name的声音文件附给当前对象;name是该声音文件在库中的Linkage(连接)中输入的名字,在库中一个声音文件上点击右键, 选择Linkage,在弹出对话框中的Id栏中输入name,然后选择在linkage中选Export for ActionScrip即可。
一般在创建完声音对象后都会用此方法为声音对象变量连接声音文件。然后用mysoun.start()播放声音。

2)Sound.setPan(pan);
利用这个方法可以确定声音在左右声道中播放的方式,对于单声道声音声音而言,pan可以确定哪个扬声器(左或右)播放声音。
Sound.setPan(pan)中的参数pan用来指定声音的左右平衡的整数,有效值的取值范围是-100~100。-100表示只有左声道发声,100表示只有右声道发声,0表示左右声道相等。
例如:
mysound=new Sound();//创建一个声音对象
mysound.attachSound("yinyue");//将库中Linkage名为yinyue的声音文件附给mysound
mysound.setPan(-100);//设置只有左声道发声。

3)Sound.setTransform(soundTransformObject);
该 方法可以为声音对象设置声音的变形或平衡信息。用户可以使用setTransfor方法按立体声效果播放单声道声音,也可按单声道效果播放立体声声音或给 声音添加其他效果。soundtransformObject参数是使用普通Object对象的构造器创建的对象(要用new Object创建),该对象的参数将指定如何分配左右声道的声音。soundtransformObject的参数包括:
ll(left/left)指定左声道输入在左边扬声器中播放的百分比值(0--100);
lr(left/right)指定右声道输入在左边扬声器中播放的百分比值(0--100);
rr(right/right)指定右声道输入在右边扬声器中播放的百分比值(0--100);
rl(right/left)指定左声道输入在右边扬声器中播放的百分比值(0--100);
这四个参数,第一位表示左右扬声器,第二位表示左右声道。
下面我们通过几个例子帮助大家理解:
//****立体声播放*****。立体声可以在左右扬声器之间平均分割声音输入所以可以这样写:
mysound=new Sound();//创建一个声音对象
mysound.attachSound("yinyue");//将库中Linkage名为yinyue的声音文件附给mysound
mytrans=new Object;//创建一个Object对象
mytrans.ll=100;//设置左声道输入在左边扬声器中播放的百分比值为100
mytrans.lr=0;//设置右声道输入在左边扬声器中播放的百分比值为0
mytrans.rr=100;//设置右声道输入在右边扬声器中播放的百分比值为100
mytrans.rl=0;//设置左声道输入在右边扬声器中播放的百分比值为0
mysound.setTransform(mytrans);//使用setTransform方法传递参数
mysound.start();//开始播放
//****设置两个声道声音在一个左扬声器中播放****
mysound=new Sound();
mysound.attachSound("yinyue");
mytrans=new Object;
mytrans.ll=100;//在左声道播放所以两个l开头的都为100
mytrans.lr=100;
mytrans.rr=0;
mytrans.rl=0;
mysound.setTransform(mytrans);
mysound.start();
//****设置将立体声作为单声道播放****
mysound=new Sound();
mysound.attachSound("yinyue");
mytrans=new Object;
mytrans.ll=50;
mytrans.lr=50;
mytrans.rr=50;
mytrans.rl=50;
mysound.setTransform(mytrans);
mysound.start();
因为立体声是单声道的双倍,立体声是100,所以单声道是50。
//****设置左声道按一半功率播放,然后剩下的左声道添加到右声道****
mysound=new Sound();
mysound.attachSound("yinyue");
mytrans=new Object;
mytrans.ll=50;
mytrans.lr=0;
mytrans.rr=100;
mytrans.rl=50;
mysound.setTransform(mytrans);
mysound.start();

4)Sound.setVolume(volume)
该方法可以设置声音对象的音量。volume表示音量级别的数字(0--100)
mysound=new Sound();
mysound.attachSound("yinyue");
mysound.setVolume(50);//设置音量为50%
mysound.start();

5)Sound.getPan()
该方法可以返回用setPan设置的声音左右平衡的值。
如:mysound.getPan();

6)Sound.getTransform()
该方法可以返回指定声音对象使用setTransform方法设置的声音变化信息。
如:mysound.getTransform();

7)Sound.getVolume()
该方法可以返回从0到100的音量级别。
如:mysound.getVolume;

8)Sound.getBytesLoaded()
该方法可以返回指定的声音对象已经下载的字节数。

9)Sound.getBytesToal
该方法可以返回指定的声音对象的大小,以字节为单位。可以配合Sound.getBytesLoaded()进行比较,以确定声音下载的百分比。

10)Sound.start([secondOffset,loop])
该方法允许用户从指定位置开始播放声音。secondOffset是可选参数,表示声音开始的位置,单位为秒。
如:mysound.start(30);//声音从30秒处开始

11)Sound.stop(["idName])
该方法可以让所有声音停止播放。idName为可选参数,是在Linkage中为声音对象起的连接名字,表示指定要停止播放的声音。
如:mysound.stop();

声音对象除了上述主要方法外,还有其他方法:

12)Sound.duration
只读属性。声音的持续时间,以毫秒为单位。可用来表示声音的长度。
如:用秒表示声音的长度:
w=mysound.duration/1000;然后把w的值给一个动态文本框。

13)Sound.loadSound("url",isStreaming)
该 方法可以将mp3文件载入到声音对象的实例中。用户可以使用isStreaming参数指定是流式声音还是事件声音。事件声音必须全部载入才能播放,他们 由as的声音对象进行管理,可以响应声音对象所有的方法和属性。流式声音可以边下载边播放。当接受到足够数据时,流式声音就可以解压播放。
url 参数表示mp3文件在服务器上的位置(也可是本地位置,不过要确保本地存有此文件)。isStreaming表示指定声音是流式声音还是事件声音的逻辑 值,false表示事件声音,true表示流式声音。不管事件声音还是流式声音都不会被下载到本地硬盘,只存在于虚拟内存中。
如:载入一个事件声音
mysound.loadSound("http://www.chinaart8.com/mp3.mp3";;,false);
载入一个流式声音
mysound.loadSound("http://www.chinaart8.com/mp3.mp3";;,true);

14)Sound.onLoad
事件处理程序。可以在声音载入时自动调用。用户必须创建onLoad事件被调用之后要执行的函数。可以使用匿名函数,也可以使用命名函数。
如:mysound.onLoad=callbackFunction;//callbackfunction为要调用的命名函数。

15)Sound.onSoundComplete
当声音播放完毕时它将被自动调用。用户可以使用onSoundComplete事件触发电影中某些声音结束的事件。用户必须创建onSoundComplete事件被调用之后要执行的函数。可以使用匿名函数,也可以使用命名函数。
如:mysound=new sound();
mysound.attachSound("yinyue");
mysound.onSoundComplete=function{trace("mySound ");};//调用一个匿名函数
mysound.start();

16)Sound.position
该属性返回声音已播放的毫秒数。如果是循环,则在每个循环开始之前,position属性将被重新设置为0

 


纠错留言 | 网站导航 | 站内搜索 | 关于我们 | 联系站长
Copyright©2006-2017 病理学园地*Pathology Information Web