处理嵌入的声音
Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本
对于在应用程序用户界面中用作指示器的较小声音(如在单击按钮时播放的声音),最适合使用嵌入的声音(而不是从外部文件加载声音)。
在应用程序中嵌入声音文件时,生成的 SWF 文件大小比原来增加了声音文件的大小。也就是说,如果在应用程序中嵌入较大的声音文件,可能会使 SWF 文件增大到难以接受的大小。
将声音文件嵌入到应用程序的 SWF 文件中的具体方法因开发环境而异。
在 Flash 中使用嵌入的声音文件
Flash 创作工具可导入多种声音格式的声音并将其作为元件存储在库中。然后,您可以将其分配给时间轴上的帧或按钮状态的帧,通过行为来使用声音,或直接在 ActionScript 代码中使用它们。本节说明如何在 ActionScript 代码中通过 Flash 创作工具来使用嵌入的声音。有关如何以其他方法在 Flash 中使用嵌入的声音的信息,请参阅《使用 Flash》中的“导入声音”。
使用 Flash 创作工具嵌入声音文件:
选择“文件”>“导入”>“导入到库”,然后选择一个声音文件并导入它。
在“库”面板中,右键单击导入的文件的名称,然后选择“属性”。单击“为 ActionScript 导出”复选框。
在“类”字段中,输入一个名称,以便在 ActionScript 中引用此嵌入的声音时使用。默认情况下,它将使用此字段中声音文件的名称。如果文件名包含句点(如名称“DrumSound.mp3”),则必须将其更改为类似于“DrumSound”这样的名称;ActionScript 不允许在类名称中出现句点字符。“基类”字段应仍显示 flash.media.Sound。
单击“确定”。可能出现一个对话框,指出无法在类路径中找到该类的定义。单击“确定”以继续。如果输入的类名称与应用程序的类路径中任何类的名称都不匹配,则会自动生成从 flash.media.Sound 类继承的新类。
若要使用嵌入的声音,请在 ActionScript 中引用该声音的类名称。例如,通过创建自动生成的 DrumSound 类的一个新实例来启动以下代码:
var drum:DrumSound = new DrumSound();
var channel:SoundChannel = drum.play();
DrumSound 是 flash.media.Sound 类的子类,所以它继承了 Sound 类的方法和属性,包括上面显示的 play() 方法。
在 Flex 中使用嵌入的声音文件
有多种在 Flex 应用程序中嵌入声音资源的方法,包括:
本节介绍第一种方法:如何使用 [Embed] 元数据标签在 Flex 应用程序的 ActionScript 代码中嵌入声音。
若要在 ActionScript 代码中嵌入资源,请使用 [Embed] 元数据标签。
将声音文件放置在项目生成路径中的主资源文件夹或其他文件夹中。编译器遇到 Embed 元数据标签时,会创建嵌入资源类。通过紧接 [Embed] 元数据标签之后声明的数据类型 Class 的变量,可以访问该资源类。
下面的代码嵌入名为 smallSound.mp3 的声音,使用名为 soundClass 的变量来存储对该声音的关联嵌入资源类的引用。然后,该代码创建该嵌入资源类的一个实例,将其转换为 Sound 类的实例,并在该实例上调用 play() 方法:
package
{
import flash.display.Sprite;
import flash.media.Sound;
import flash.media.SoundChannel;
public class EmbeddedSoundExample extends Sprite
{
[Embed(source="smallSound.mp3")]
public var soundClass:Class;
public function EmbeddedSoundExample()
{
var smallSound:Sound = new soundClass() as Sound;
smallSound.play();
}
}
}
若要使用嵌入的声音设置 Flex 组件的属性,应将该声音转换为 mx.core.SoundAsset 类的实例(而不是 Sound 类的实例)。有关使用 SoundAsset 类的类似示例,请参阅《学习 ActionScript 3.0》中的“嵌入资源类”。