教程前言:
FLASH声音被广泛应用在网页、MTV、片头等FLASH动画当中。一段美好的音乐会给你的动画添加更多的精彩。声音的控制便成了必不可少的部分。本教程为大家从基础知识、简单示例到最后的实例制作,一步一步为大家讲解声音控制的方法。
各位在做实例的时候,一定要注意影片剪辑和主场景中的切换,不要弄混了。教程中用红色字为大家注明了一些重点和需要注意的事项。而在后面的程序设计中,我用桔黄色字为大家标出了在制作过程中来回切换场景和一些注意事项。看到这些颜色的字时,大家要仔细一些。
基础知识:
在开始讲解声音控制之前,先让大家熟悉一下声音的各种调节参数,这在一会儿的效果解释的时候,可以让你更容易地去理解。下面为大家列出FLASH中常用的音量控制方法、函数以及属性。
注意:在这其中,mySound是一个声音对象,我们在用as来控制声音之前,一定要先使用构造函数 new Sound 创建声音对象。只有先创建声音对象以后,FLASH才可以调用声音对象的方法。还有,FLASH的action是区分大小写的,所以在写action的时候,一定要注意。
mySound=new Sound();//新建一个声音对象,对象的名称是mySound。
声音对象的方法:
播放与停止:
mySound.start();开始播放声音。如想在声音的某一秒中播放,可输入Sound.start(2),即:从声音的第二秒开始播放。(这里的单位只能是秒)
mySound.stop();停止声音的播放。
音量控制:(范围从0-100)
mySound.getVolume();获取当前的音量大小。
mySound.setVolume();设置当前音乐的音量。
左/右均衡:(范围从-100到100)
mySound.getPan();获取左右均衡的值。
mySound.setPan();设置左右均衡的值。
声道音量:
mySound.getTransform();获取左右声音的音量。
mySound.setTransform();设置左右声道的音量。
这是一个比较特殊的参数,在设置setTransform前,要先为它新建一个对像才可以。因为篇幅有限,在这里不为大家讲解了。如果有兴趣,请参看FLASH的帮助文件。
读取声音:
mySound.loadSound();从外部载入声音。
mySound.attachSound();从库中加载声音。
mySound.getBytesLoaded();获取声音载入的字节数。
mySound.getBytesTotal();获取声音的总字节数。
声音对象的属性:
mySound.duration;声音的长度。(单位为毫秒。即:1000毫秒=1秒)
mySound.position;声音已播放的毫秒数。 (单位为毫秒)
声音对象的函数:
mySound.onLoad;声音载入时调用。
mySound.onComplete;声音播放完成时调用。
简单实例:
通过下面这个例子,主要是让大家自己动手,了解一下声音的各个方法以及属性的用法。
首先,我们先要让声音播放起来。用as来控制,就需要用as来读取声音。用as读取声音有两种方式:attachSound和loadSound。
attachSound是从FLASH的库中挷定一个声音。这个声音需要我们先导入一个声音文件。方法:文件→导入到库(选择一个声音文件,确定即可)→打开库面板(窗口→库)→右键选择我们刚才导入的声音文件→在右键菜单中找到链接→选中为动作脚本导出,在标识符上为这个声音对象起一个名称。然后用attachSound(标识符),来读取声音。
loadSound则是从外部读取声音文件,方法:loadSound(文件名)。从外部读取文件时只允许载入MP3文件。其它格式是不能够读取的。
记得文件名和标识符要加上引号,否则FLASH会将它当做一个变量处理。
了解了as读取声音的两种方法以后,我们只需要用start()方法将这个声音播放即可。
step1:新建一个FLASH影片、并保存,然后拷贝一首mp3过来,将它和FLASH影片放到同一目录、并更名为mySound1.mp3。
step2:选择文件→导入到库(选中我们刚才拷过来的mySound1.mp3)
step3:打开库面板,右键单击我们刚导入的声音文件,并选择链接,勾选为动作脚本导出和在第一帧导出。在上面的标识符上输入:“mySound1”(不带引号)。
注意:这里为第一帧导出做一下解释。在FLASH中,库中的内容并不是全部导出到SWF中的。只有在主场景,或者其它场景中用到了库中的文件,那么在导出SWF时,才会将它导出。像这几首mp3,它并没有在其它的所需要的场景中应用。而我们在链接的时候,勾选在第一帧导出,就可以让FLASH在导出SWF文件的时候,在第一帧之前将它导出,这样,就保证了文件的完整性。否则,如果不勾选在第一帧导出,并且它没有在其它的场景中出现,那么在导出的SWF文件时,就找不到这个文件了。
step4:右键单击第一帧,选择动作。如下图操作进行
OK,试着按Ctrl+回车键试一下有没有效果...就是这样简单:)。可以看到我们上面是用attachSound方法读取的库中的影片,下面,把mySound.attachSound("mySound1");这句话改为mySound.loadSound("mySound1.mp3")。注意:step1的操作,你是否有执行。然后再按Ctrl+回车键测试场景,试一下效果。如果这两步都能够听到声音,说明正确,可以继续进行。否则请检查你的脚本的大小字是否正确、外部文件名与脚本上是否相同,如果不行,就换几首Mp3试一下。
上面是最简单的播放声音的代码了。下面我们再在上面的基础上,添加设置音量的代码。在mySound.start();前添加“mySound.setVolume(100);”现在测试影片,应该和刚才没有区别。因为FLASH的音量在默认时是设置为100的。现在把100改为20,音量是不是明显的变小了?
现在再试一下在下面添加“mySound.setPan(100);”这个是设置声音的左右均衡值的。默认设置为0。即:左右两边的音量是一样的。如果设置为100,那么右边耳机的音量就为我们设置的volume的音量,而左面就没有声音,如果为-100,那么情况相反。
声音控制分析:
讲完了基础应用的方法,我们下面就通过实例来为大家讲解一下实现FLASH声音控制的方法。
点击浏览该文件
(我做了一些压缩,而且裁了,所以音乐都不完全)
这是一个应用在网页中的背景音乐控制器。可以让来访者自由地控制背景音乐。前面的on/off是用来控制声音的播放与暂停,VOLUME后面的滑块是用来控制声音音量的。最后面的1/2/3/4/5/6的小方块,是控制哪一首背景音乐的。
声音的暂停与播放比较简单,唯一的难点是:FLASH中并没有提供暂停的方法,只有停止与播放,就是说当我们用stop()命令来停止声音播放时,是没有直接的方法来从断点进行播放的(这里所说没有直接方法,是指FLASH中没有提供直接的方法)。但FLASH为我们提供了position的属性,是用来获取声音已播放到位置的毫秒数。这样,我们可以通过当鼠标按下on/off这个按钮时,获取当前声音所播放到的毫秒数,并赋给一个变量。而在下一次点击时,通过调用这个变量,然后从这个位置开始播放。用通俗一些的话来说,就是这个变量记录了声音所在的位置,然后在下一次播放的时候从这个位置开始播放。
声音的音量控制是通过拖动滑块的位置来设置声音的大小的。准确一点儿说,是当我们在拖动小滑块的同时,改变了滑块的x坐标,而音量则是通过随时获取这个小滑动的坐标,然后根据坐标的位置设置音量的大小。
最后的6个载入不同声音的按钮,则是通过attachSound()或者是loadSound()方法将声音载入进来,并播放。不过这里有一个需要注意的地方。那就是当我们通过attachSound()方法挷定一声音的时候,可以同时挷定多个声音,就是说当我们挷定sound1,播放,再挷定sound2,播放的时候,就会出现两个声音同时播放的现象。你可以输入以下代码试验一下。
//在输入以下代码的时候,注意你的库中是否有sound1和sound2标识的两个声音。
mySound=new Sound();
mySound.attachSound("sound1");
mySound.start();
mySound.attachSound("sound2");
mySound.start();
这时你应该能听到两个声音在同时播放,很杂乱。解决的方法,就是当我们在挷定第二个声音之前用mySound.stop()。但是通过loadSound()方法的时候,则没有此项问题。