这些结果是有说服力的,假如我们制作一个“无声”版本(所有的动画保持原状,只删除了所有的声音)那么输出文件大小为655kb 。如果我们比较一下两个文件的大小差异的话,结果说明采用str00方式的整个声音文件只占用59kb!!!而采用传统方式的话,音乐文件将占用595kb.
进一步说明:如果有5到6个2,3秒的声音文件,构成1,2,3分钟甚至更多时间,音乐文件占用的体积将低于70~80k.相对的,如果采用传统方法处理的话,占用文件大小将是1MB甚至更多。
下面介绍一下工作原理:
str0技术:
首先,让我们选择一个尽量小的声音文件"NULLSOUND"。这个小的wav文件里面除了静音啥也没有,大概0.1秒长。我们可以用任何声音编辑软件来生成它。 然后我们把这个文件放到timeline里面,然后设置为stream方式,并设置循环次数以便声音一直延长到Flash的结尾。我们只设置这个NULLSOUND文件为stream方式的,其他声音用层来组织,都设置成event方式。这样,我们就可以把stream声音的输出质量设置成足够低(ADPCM 5 kHz 2 bit)同时却不影响整个音乐的音质,因为event方式的声音可以设置高一些比如ADPCM 11 kHz 4 bit. 。
请看下面的图例:
图1. str0技术里面的主时间线
图2. 时间线里NULLSOUND声音的设置
图3. 导出情况下的stream和event声音音质设置
我们可以微调一下上面的技术,从而使文件体积更小,就是我们称为str00技术:
str00技术:
我们把前面技术中,NULLSOUND的循环次数设置成1次,其他的保持不变。 这项技术是建立在flash的一个有趣的特性基础上的: 如果时间上有个声音文件设置成stream方式,那么flash在播放完这个声音文件后会继续以stream模式播放声音。也就是说,我们可以用这样一个小的NULLSOUND声音文件作为一个开关,使整个播放器用stream模式播放声音。这种stream播放模式可以使用"Stop All Sound"动作来关闭。使用这种方法,我们也可以在影片中灵活的切换stream模式或者是event模式,也就是可以在恒定帧率以及帧率可变模式中切换。
下面的图例表述了这种str00技术
图4. 主时间线上的NULLSOUND只循环一次
图5. NULLSOUND声音的设置
str00技术的附带说明:
str00技术的唯一缺陷在于:假设用户使用独立播放器来播放flash,那么如果用户在播放时候敲回车键,那么flash将停止所有的声音的播放,即使再按回车继续播放,其他声音都能正常播放,而stream的声音将不能播放,因为stream声音的关键帧是在最前面,这样的后果就是播放的stream模式被关闭了,也就是恒定帧率模式被关闭了。要避免这种错误,解决的方法就是安置一个隐形的按钮来捕抓按键动作:
On ( Key: )
Play
End On
图6. 隐形按钮上的action设置
【译者注】: 该语法为flash4语法,换成flash5以后版本语法如下:
on (keyPress "") {
play();
}
同样道理,独立播放器里的弹出菜单也应该在开始被禁用:
FS Command ("showmenu", "false")
图7. 禁用弹出菜单的action设置
【译者注】: 该语法为flash4语法,换成flash5以后版本语法如下:
fscommand ("showmenu", "false");
用了以上的设置以后,理论上flash将不会异常停止了。
【译者总结】:
该项技术应用背景: 背景音效需要多次循环,动画和声音需要保持同步,音质要求高,文件体积要求尽量小的情况下。
技巧:
制作动画过程中,可以把所有的声音设置成stream模式,以便调整动画和声音完全匹配。当确声音动画全部匹配以后,再把所有声音设置成event,然后设置nullsound为stream以缩小文件体积。
有条件的情况下,尽量分割各项音乐元素,提取合并可以循环利用部分,然后利用Flash作为混音器来使用,这样将有效的减少输出文件的大小。