在 AS3 Flash/Flex 项目中嵌入 wav 文件?

Posted

技术标签:

【中文标题】在 AS3 Flash/Flex 项目中嵌入 wav 文件?【英文标题】:Embedding wav files in AS3 Flash/Flex project? 【发布时间】:2011-02-19 00:17:57 【问题描述】:

Flash IDE 能够嵌入多种类型的未压缩声音文件,包括 wav,并在发布时提供可选压缩。

但是,[Embed] 标签似乎只允许嵌入 mp3 文件。是否真的不可能嵌入未压缩的 wav 文件,还是我错过了一些神奇的、未记录的 mimeType?

我希望得到类似的东西:

[Embed source="../../audio/wibble.wav" mimeType="audio/wav"]

...但我明白了

no transcoder registered for mimeType 'audio/wav'

可以将 wav 或其他格式嵌入为八位字节流并在运行时解析,但我认为这相当繁琐。

我很惊讶,即使 Flash IDE 可以嵌入未压缩的声音数据,[Embed] 却不能,因为 swf 规范可以包含未压缩的声音数据。

有接受者吗?

【问题讨论】:

【参考方案1】:

来自LiveDocs - Basics of working with sound:

[...] 虽然有各种声音文件 用于编码数字音频的格式, ActionScript 3.0、Flash Player 和 AIR 支持存储在 mp3 格式。他们不能直接 在其他中加载或播放声音文件 WAV 或 AIFF 等格式。 [...]

但显然有一种解决方法。查看this thread from actionscript.org中的帖子#3:

回复自己以防万一 未来同样的问题是 寻找答案。

我找不到任何直接支持 在 Flex Builder 中嵌入 WAV 文件 3 / ActionScript 3 应用程序。我什么 确实尝试过并且很高兴看到它 作品是在 Flash CS 3(你需要拥有它 或获得评估)并导入您的 声音到图书馆并将它们链接到 由 ActionScript 导出。出口 将 Flash CS3 项目转换为 SWF 影片 并将其保存在您的项目中(我添加了 它到一个“lib文件夹”)。

您要创建的 ActionScript 代码和 播放的声音应该是:

[Embed(source="lib/Sounds.swf", symbol="BigShipSound")]
private static var BigShipSound: Class;
...
var bigShipSound : Sound = BigShipSound as Sound;
bigShipSound.play(0, 20);

【讨论】:

啊该死的......好吧,虽然这显然是一个“不,你不能”,但这是我能得到的最好的解决方案。为贝尔诺干杯!【参考方案2】:

有一个你可以使用的库

http://code.google.com/p/as3wavsound/

【讨论】:

太酷了!我希望避免在运行时通过 SAMPLE_DATA 事件传递 wav 数据的 cpu 开销,这就是这个库所做的(因为“本机”播放器肯定不那么贪婪)。【参考方案3】:

Flash 播放器不知道如何直接播放 wav 文件。您确实可以将它们导入到创作工具,但是当您发布 SWF 时,您的音频将被转换为 mp3 或 adpcm 或您在发布设置中选择的任何内容。即使您在运行时读取 wav,播放它的唯一方法是解析二进制流,因此如果您嵌入文件,自然会有相同的限制。

this question 上的一些相关信息。奇怪的是,你似乎在去年发表了评论! :)

【讨论】:

小世界吧?好吧,无论你做什么,你都对 wavs 进行编码是对的,但我想让我感到沮丧的是,你不能让 as3 应用程序嵌入 RAW 声音数据(或者实际上除了 mp3 之外的任何东西),并使用 Flash 的“本机”声音播放器(即,不使用 SAMPLE_DATA 事件)。挖?

以上是关于在 AS3 Flash/Flex 项目中嵌入 wav 文件?的主要内容,如果未能解决你的问题,请参考以下文章

在Flash / Flex应用程序中使用Ogg Vorbis

使用 Flash flex 策略和问题

如何在 Flex 中使用 UIComponent/Flash

为 AS3 嵌入字体。如何?

ActionScript 3 在AS3中嵌入字体 - 资产类

ActionScript 3 AS3在Flex中嵌入系统字体