处理嵌入的声音

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

对于在应用程序用户界面中用作指示器的较小声音(如在单击按钮时播放的声音),最适合使用嵌入的声音(而不是从外部文件加载声音)。

在应用程序中嵌入声音文件时,生成的 SWF 文件大小比原来增加了声音文件的大小。也就是说,如果在应用程序中嵌入较大的声音文件,可能会使 SWF 文件增大到难以接受的大小。

将声音文件嵌入到应用程序的 SWF 文件中的具体方法因开发环境而异。

在 Flash 中使用嵌入的声音文件

Flash 创作工具可导入多种声音格式的声音并将其作为元件存储在库中。然后,您可以将其分配给时间轴上的帧或按钮状态的帧,通过行为来使用声音,或直接在 ActionScript 代码中使用它们。本节说明如何在 ActionScript 代码中通过 Flash 创作工具来使用嵌入的声音。有关如何以其他方法在 Flash 中使用嵌入的声音的信息,请参阅《使用 Flash》中的“导入声音”。

使用 Flash 创作工具嵌入声音文件:

  1. 选择“文件”>“导入”>“导入到库”,然后选择一个声音文件并导入它。

  2. 在“库”面板中,右键单击导入的文件的名称,然后选择“属性”。单击“为 ActionScript 导出”复选框。

  3. 在“类”字段中,输入一个名称,以便在 ActionScript 中引用此嵌入的声音时使用。默认情况下,它将使用此字段中声音文件的名称。如果文件名包含句点(如名称“DrumSound.mp3”),则必须将其更改为类似于“DrumSound”这样的名称;ActionScript 不允许在类名称中出现句点字符。“基类”字段应仍显示 flash.media.Sound。

  4. 单击“确定”。可能出现一个对话框,指出无法在类路径中找到该类的定义。单击“确定”以继续。如果输入的类名称与应用程序的类路径中任何类的名称都不匹配,则会自动生成从 flash.media.Sound 类继承的新类。

  5. 若要使用嵌入的声音,请在 ActionScript 中引用该声音的类名称。例如,通过创建自动生成的 DrumSound 类的一个新实例来启动以下代码:

    var drum:DrumSound = new DrumSound(); 
    var channel:SoundChannel = drum.play();

    DrumSound 是 flash.media.Sound 类的子类,所以它继承了 Sound 类的方法和属性,包括上面显示的 play() 方法。

在 Flex 中使用嵌入的声音文件

有多种在 Flex 应用程序中嵌入声音资源的方法,包括:

  • 在脚本中使用 [Embed] 元数据标签

  • 在 MXML 中使用 @Embed 指令将嵌入的资源分配为组件(如 Button 或 SoundEffect)的属性。

  • 在 CSS 文件中使用 @Embed 指令

本节介绍第一种方法:如何使用 [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》中的“嵌入资源类”。