同 Macromedia Flash 改变了我们体验 Web 的方式一样,Macromedia Flash Lite 对移动设备起到了同样的作用。音效是这种丰富式体验的一部分。事实上,音效是任何移动设备不可分割的一部分,它提供警告、铃声、音频提示和多种娱乐使用中的背景音乐。在本文中,我将为您介绍 killersound 技巧 - 一种在 Flash Lite 1.1 中使用音效的创新方法(该方法同样适用于在桌面上使用 Flash)。使用本技巧,您能够将数字音频的文件大小缩小最多 70%。它还提供了多种听觉体验,而不仅仅是简单的音频回放。本技巧对于需要较长背景音乐的产品(例如游戏)尤其有用。事实上,需要的音乐越长,就越能从本技巧中受益。
请注意,本教程使用数字音频文件(WAV 或 MP3),而不是 MIDI 文件。由于数字音频的文件大小和对处理能力的较高要求,并非所有具有 Flash 功能的移动设备都支持数字音频。但是,到本文出版时,很可能大多数新的移动设备将通过使用更好的硬件(扬声器)、更多内存和更快的处理器支持数字音频。同时,我确信 Flash Lite 的下一版本将会使用这一逐渐完善的技术来交付更为丰富的移动体验。
教程和示例文件:layering_audio.zip(ZIP, 3.6 MB)
必备知识:中等的 Flash 知识,尤其是在 Flash 中使用音频的知识,将有所帮助。
到目前为止,MIDI 一直是移动设备上的标准声音格式。虽然这种格式很简单,但它在音质和能够产生的音效数量和类型上非常有限。通过 MIDI 产生的音效取决于作为移动设备芯片一部分的波形表。与数字音频不同,MIDI 文件中不包含任何声音,它包含的是一套指令,用以触发手机芯片内的音效。相反,数字音频包含了声音本身,这声音可以是广播、语音或者震动音。数字音频的音质取决于录音或存储时的采样率。我们大多数人都对 MP3 数字音频格式很熟悉。比特率或采样率越高,音质就越好。但是,较高的比特率也意味着文件更大。
本文说明的技巧涉及数字音频文件的分层,可为数字音乐人所采用。在 Flash 中,您可以重用视觉元素,从而避免增大导出的 SWF 电影,对音频也可以这样做。通过导入单独的元素或乐曲的一部分(低音、鼓点等等),将它们放置在不同的层上,以及使用 Flash 中的音效工具,您可以创造出音乐变换的假象。本技巧还给设计者以自由度和灵活性,使其能够组合音乐使之与产品中的视觉元素相匹配。要利用本技巧,您必须准备好您要使用的音乐中的所有元素。目前,您可以通过授权方式使用已经被分解为各个组成部分的音乐,也可以使用流行的软件产品来创作自己的音乐。
首先下载并展开与本教程配套的 layering_audio.zip 存档文件。该文件中有一个 FLA 文件,两个 SWF 文件和一个名为 silent.wav 的文件。
打开 C0064.fla 文件。在 Stage 上的是图 1 中所示的图像。文件由四部分组成 - 小提琴、大提琴、吉他和钢琴。如果进入 Library,您可以单独聆听各个部分。所有四个部分都在名为 Musical Elements 的文件夹中。在本教程中,您将制作一个 Flash Lite SWF 电影并使之运行于 Nokia 6600 手机上。
注意:您可以从 David Mannl’s Flash Lite* 网站获取各种移动设备的最新的预先配置过的模板。这些模板已设置为正确的屏幕尺寸。
图 1:C0064.fla 文件包含四个部分。
每个部分单独录制和优化,并作为独立的声音文件导入 Flash。为使音效在自己的层正确播放并与其它音效合成,所有的音效文件必须具有相同的长度,或者彼此之间的比例相同。在本例中,所有四个部分具有相同的长度。彩色块代表这些部分在时间线上播放的实例。如果您在 Flash 应用程序中运行电影,您将在各部分播放时听到音乐。
图 2 显示了 Flash 时间线。每一部分都有自己的一层,除了 silent 层,其它各层都开始于同一个关键帧(第 16 帧),稍后将谈到。所有音乐元素在同一关键帧开始非常重要。后面将对此详细解释。
图 2:在时间线上,每个部分都有自己的一层,并开始同一个关键帧。
导出至 Flash Lite 时,最好不要马上开始音效,应提供多个空白帧来缓存数据。某些处理器较慢的设备开始显示内容需要一秒钟左右的时间;因此,如果音频开始的过快,开始部分可能会被截掉。
设置和编辑声音封装点
现在,前往 strings - event 层,并点击嵌入声音的第 16 帧。在 Frame Properties 窗口中,您可以看到附带的音效名为 C0064strings.wav,该音效重复 10 次。单击 Edit 按钮,打开 Edit Envelope 窗口。单击 Frames 按钮(右下方)将时间线刻度从秒转换为帧。(使用该窗口底部的缩放按钮)一直缩小,直到看到应用于此部分的六个封装点(见图 3)。
图 3:您可以应用封装点(小方块)来改变音效的音量。
在声音窗口中显示为小方块的封装点是音量点。您可以单击或拖动这些点来创建音量效果。您可以为各个声音层调整合适的音量水平,以获得最佳的合成音量。声音窗口中的两个窗口代表左右声道。除非要创建声音漂移之类的特效,否则应确保在两个窗口中镜像动作。
您可以看到,在 C0064strings.wav 循环播放两次后,使用封装点进行了一次快速的逐步淡出。这一部分保持无声状态,直至第五个实例或循环播放。将第五个实例开始处的那一点放大至最大(见图 4)。这应该位于第 399 帧附件。您可以在采样视图和时间视图之间切换(窗口底部缩放按钮右侧的两个按钮)。封装点在第五个实例或循环开始处设置。使用这一技巧时,需要达到这样的精确度,才能确保流畅的合成。
图 4:放大至最大,以准确地操作封装点。
现在,来看看其它各层,以及封装点在其上的应用方式。例如,小提琴部分的封装点并未设至最大,因为您不希望小提琴的声音喧宾夺主。这种合成只是诸多可能性之一。例如,您可以选择开始音乐时只有吉他,然后在加入大提琴部分,依此类推。合成中的部分越多,就有越多的可能性。但是,声音的层数是有限制的。我建议在 Flash Lite 中最多使用超过四到五层。随着技术的进步,移动设备和 Flash Lite 播放器更加健壮,这种限制可能不再存在。还应记住的是,目前,对于某个具体关键帧中的任何声音,最多只能应用八个封装点 - 因此,聪明并有创造性地使用它们。当然,如果您在一个新的关键帧中开始了一个新的实例,您就有八个新的封装点了。
Stream 和 Event 声音
正如您所看到的,所有层(除了 silent 层)的 sync 设置都是 event。对于 event,Flash Lite 单独导出和读取各个声音层。这种方法的好处是,Flash Lite 把声音文件看作实例。当 Flash Lite 加载单个组件或声音文件时,与图形的处理方式相同。因此,无论各个声音文件在它自己的层中循环多少次,Flash Lite 不会使用额外的文件空间来在时间线上循环播放声音文件,也不会将声音层绑定至动画。当使用 event sync 设置时,声音文件独立于图形运行。
有时候,如果设备的处理器速度慢,就会发生问题。如果内存不够用,Flash Lite 将无法同时读取一帧中的所有层。这可能导致声音层彼此之间不能同步。为解决这一问题,我们使用一个很小的 silent 音频文件在音乐开始处将播放器置于流模式,这足以使 event 音效开始播放。您可以发现,唯一设置为 stream 的 silent 层使用这一极小的声音并在其它音乐层之前开始。用设置为 stream 的声音开始音乐能够使各层保持同步。我单独提供了此文件 (silent.wav),以备您将来使用之需。
如要使用 stream 作为所有分层声音的同步设置,动画将被绑定至时间线。使用此设置,Flash Lite 将所有声音作为单个声音文件在单一通道上导出和读取。这将锁定所有声音文件处于同步,因此不再需要silent 音效。但是,该设置不具备将组件作为循环实例使用所产生的文件小的优势。同时,当使用 stream 时,只要电影中有足够的帧,音乐会一直运行。与 event 设置不同,如果没有足够的帧来包含音频或者有动作停止了电影的播放,采用 stream 设置的音乐将被截断。
压缩
对于压缩,您可以使用全局压缩设置,也可以为每个声音文件单独设置压缩。频率低的声音,例如大提琴音,压缩比可以非常大。其它如鼓点等,如果过分压缩,可能会截断。单独设置压缩的好处在于,您可以通过压缩比大的部分减小文件大小,同时对逼真度更为敏感的部分设置较小的压缩比,从而得到更好的音质。为单个文件设置压缩的方法是:在 Library 窗口中找到单个文件,在文件上单击右键,然后在 Export Settings 对话框中进行压缩设置。
根据文件大小的限制不同,全局设置压缩可能更容易(见图 5)。注意,stream 音效 (silent.wav) 的压缩设置为最大的可能压缩,这是因为该音效是无声的,文件可以尽量地小。
图 5:您可以在导出 SWF 文件时全局设置压缩。
记住,您制作的音效很可能会通过微小的单频扬声器播放;因此,音质的好坏受到扬声器的限制。理想情况下,您最好使用实际设备进行测试。但是,我发现 ADPCM, 11kHz, 4 bit, Mono 这样一组全局导出设置在大多数情况下都能得到不错的结果。对于微小的扬声器,它在音质和最小的文件大小之间取得了平衡。要注意的是,使用 Flash Lite 和本技巧,ADPCM 是取得无缝循环播放的唯一导出格式。桌面 Flash 产品使用 MP3 可得到更高的压缩比,但 Flash Lite 如果使用 MP3 压缩导出,将无法在移动设备上播放。Flash Lite 如果使用 MP3 压缩,将会在每个循环点留下一个间隙,当音效循环播放时,会有一秒的间隔。在桌面上播放 SWF 文件不会有这个问题,加载到移动设备后则会出现。
结果
如果使用前面提到的压缩设置 (ADPCM, 11kHz, 4 bit) 导出 FLA 文件,文件大小将与名为C0064_4_adpcm11-4.swf 的 SWF 文件相同。本文所附的另一个 SWF 电影,C0064_mix_adpcm11-4.swf,使用同样的压缩设置,播放同样的音乐,但没有使用分层技巧。相反,它使用的是单个静态的声音文件。两个文件包含的音乐都播放约 48 秒。但在大小上的差别很大:
C0064_4_adpcm11-4.swf:该文件包含分层的四个部分。每个部分长度为 4.8 秒;因此,该文件的音频长度为 19.2 秒 (4 x 4.8)。导出文件的大小是 108K。
C0064_mix_adpcm11-4.swf:该文件使用单一的乐曲,长度约 48 秒。导出文件的大小是 260K。
正如您所见,在本例中,使用 killersound 分层技巧,可以节省约 60% 的文件大小。
总结
如果将本文所示的技巧用于 Macromedia Flash Lite,您将拥有大量的灵活性,并能显著减小 SWF 的文件大小。基本概念是:通过将音乐的不同元素导入到不同的层,并在各层中对其进行操作,可以实现对音乐的各种控制。这样,您就可以用自己喜欢的方式来调整音乐,并避免使用单一的、静态的音频。得到的曲目文件体积小,包含多个循环播放的元素,这些元素在若干点被有意设为静音和非静音。
您可以在 killersound* 网站找到同时适用于 Macromedia Flash Lite 和 Flash 的更多教程和信息。