1、Flash 里的声音控制有两种方法:把声音直接在拖倒时间轴上的关键帧里,然后在属性面版进行相关属性设置需要注意几个同步方式的区别事件(Event):将声音设置为事件,可以确保声音有效地播放完毕,不会因为帧已经播放完而引起音效的突然中断,制作该设置模式后声音会按照指定的重复播放次数一次不漏地全部播放完。开始(Start):将音效设定为开始,每当影片循环一次时,音效就会重新开始播放一次,如果影片很短而音效很长,就会造成一个音效未完而又开始另外一个音效,这样就造成音效的混合而乱了。停止(Stop): 结束声音文件的播放,可以强制开始和事件的音效停止。数据流(Stream): 设置为数据流的时候,会迫
2、使动画播放的进度与音效播放进度一致,如果遇到机器的运行不快,FLASH 电影就会自动略过一些帧以配合背景音乐的节奏。一旦帧停止,声音也就会停止,即使没有播放完,也会停止。注意:其中应用最多的是事件选项,它表示声音由加载的关键帧处开始播放,直到声音播放完或者被脚本命令中断。而数据流选项表示声音播放和动画同步,也就是说如果动画在某个关键帧上被停止播放,声音也随之停止。直到动画继续播放的时候声音才开始从停止处开始继续播放,一般用来制作 MTV 用控制要先创建声音对象,关联某个声音,然后运用声音对象的方法进行操作For example: mysound=new Sound(); /创建声音对象myso
3、und.attachSound(“sound1“); / 链接声音 sound1. 这里要先对声音的链接属性进行设置,两个选项(a.为 ActionScript 运行导出 b. 在第一帧导出)都要打勾标识符不能为空,在 as 中对声音的引用要用到这里标识符是 sound1.mysound.start(); /声音开始播放Sound functions: mysound.start(offsettime,loop) /offsettime:时间偏移量,单位 s. loop,循环次数这句话表示声音从 offsettime 开始播放到声音结束,播放 loop 次(BTW,做声音开关的时候,本来想通过
4、 offsettime 来让动画和声音同步的,发现根本不好用特别是声音文件导出时如果压缩了,那通过这个来同步更是没戏mysound.stop(); mysound.setVolume(volume); volume:0-100. 0 是最低音量,最高(通过按钮操作,设置音量做声音开关时发现,点击按钮,改变音量时,声音会从头开始播放,根本不是只改变当前时间及以后播放的声音音量)mysound.getVolume();mysound.setPan(pan) pan: -100 到 100 这个是左右声道均衡值mysound.getPan()mysound.duration() /声音持续播放时间m
5、ysound.position() /声音播放的当前时间mysound.onSoundComplete() mysound.start(); /通过这个语句可以让声音无限制循环 mysound.onSoundComplete()/是声音结束时需要执行的操作还有两个系统函数:getTimer() 获取动画播放的时间 stopAllSounds()合理应用上面的声音对象方法或函数能够满足 flash 对声音控制的一般需求比如,1.可以做声音开关简单的控制声音的播放和停止2.做暂停按钮,(flash 本身没有提供暂停的函数)用 mysound.position() 记录声音停止时的位置,下次播放的时
6、候从这个位置播放3.背景音乐的无限循环mysound.onSoundComplete() mysound.start(); 经典案例:我做一个 flash ,遇到这样的需求:我的音乐比较长且完整而且需要和画面配合,不是简单的声音循环又需要做个声音开关按钮,开关控制声音播放时,声音要从和画面同步的声音处开始播放而不能从头开始播放这样的话按钮代码on(press) mysound.start(); 肯定是不能满足需求了于是我试图通过下面几种方法解决问题:方法一:1.在动画开始时定义一个变量并赋值. var starttime=getTimer(); / record the start time
7、of flash2.在按钮on 上增加这样的代码:on(press)r_time=(getTimer()-starttime)1000; /想获得动画从开始到点击按钮时总共播放的时间.getTimer()获得的时间单位是 ms.mysound.start(r_time,1); /声音从 r_time 处开始播放循环一次照理说,这样应该让声音同步才是,但事实结果是 声音和动画在 声音关闭再次开始播放后无法同步方法二:通过设置声音音量来做声音开关我想着这种方法只是改变一下音量,并没有让声音真正停止,声音应该和动画同步播放才是事实结果是声音会从头播放,无法同步也不能达到我的要求开关按钮代码: on(
8、press) /stop buttonmysound.setVolume(0);on(press) /play button mysound.setVolume(100);很奇怪的是,声音也有 fade in 和 fade out .也就是说 volume 能够动态改变的,不明白这样为什么还是不行最后网上的一片文章给了我灵感我通过下面的方法解决了我的问题1.创建一个 mc,把声音 sound1 拖倒的时间轴上同步方式为数据流(上面说过了,数据流能让声音和动画很好的同 步相当于声音流和每帧绑定)mc 的帧长和我在主场景需要的声音帧长相同2.在主场景创建实例实例名:持续帧长和的帧长相同3.在主场景
9、添加声音开关按钮,并添加按钮代码on(press) stop 按钮sd.gotoAndStop(455); /455 帧是我的最后一帧,这帧已经没有声音on(press) /play buttonsd.gotoAndPlay(_root._currentframe); /声音从主场景的当然帧这个时间开始播放ok ,这样就能满足我的需求,解决我的问题拉! Happy 一下 :)心得:其实最后这个方法是一个很巧妙而且折中的方法巧妙的将 as 控制声音和时间轴引用声音结合在了一起时间轴上引用声音,能够设置数据流同步方式,将声音和动画绑定,保证了很好的同步把声音做成 mc ,让按钮发挥了很好的作用通过控制 mc 从而控制声音的开关