在 Actionscript / Flex 3 中播放嵌入式 mp3 之前的延迟
Posted
技术标签:
【中文标题】在 Actionscript / Flex 3 中播放嵌入式 mp3 之前的延迟【英文标题】:Delay before playing embedded mp3 in Actionscript / Flex 3 【发布时间】:2010-12-18 13:01:06 【问题描述】:我将 mp3 嵌入到我的 Flex 项目中用作音效,但我发现每次播放它时,从调用 .play() 到您能听到声音。这很奇怪,因为我希望音效与游戏事件同步。我的 mp3 本身只有大约五分之一秒长,所以不是因为 mp3 的内容。
我正在嵌入
[Embed(source="assets/Tock.mp3")]
[Bindable]
public static var TockSound:Class;
public var tock_sound:SoundAsset;
然后玩
if (tock_sound == null)
tock_sound = new TockSound() as SoundAsset;
Alert.show("tock");
tock_sound.play();
我知道会有延迟,因为声音会在警报显示后大约半秒播放。我确实考虑过这可能是构建 TockSound 的初始加载时间,但所有后续调用也存在延迟。
如何避免播放声音的延迟?
更新:事实证明,这种延迟仅在 Linux 上播放 swf 时才会出现。我认为这是 Adobe Flash 播放器中特定于 Linux 的缺陷。
【问题讨论】:
你能检查一下声音是否准备好了?即 mp3 的状态? 您是否查看过***.com/questions/227674/… 以获得更多帮助? 【参考方案1】:我没有在 Flash 中过多地处理音频,但听起来半秒延迟可能是 Flash Player 打开文件并将其读入内存。您可以在加载应用程序时尝试执行 play() 和 stop()。这可能会将其推入记忆中。
另一种选择是使用StandingWave 库,该库由Noteflight 的人构建。您可以使用该库对音频文件进行一些额外的控制,希望它能帮助您解决延迟问题。
【讨论】:
我以后播放该文件时也会发生这种情况。此外,没有真正的文件。它嵌入到 swf 中。【参考方案2】:问题在于,所有 MP3 在压缩过程中放置的文件开头都有随机数量的空白时间。现代软件点唱机(iTunes、songbird 等)通过在播放文件之前扫描文件并确定歌曲的实际起点来弥补这一点。音效的最佳选择是使用 .wav 文件,因为它们的格式允许即时播放,但文件大小会受到影响。
您也可以尝试:http://www.mptrim.com/
【讨论】:
这不是问题,因为当我重复播放声音10次时,后续重复中没有空格。此外,Flex 不允许嵌入 wav 文件。【参考方案3】:不确定原因,除了 Flash 总是有一些糟糕的音频延迟问题。阅读 Tinic 的博客以了解这些内容:http://www.kaourantin.net/
一件事可能会有所帮助:确保您的 MP3 为 44.1kHz,否则 Flash 将需要对其重新采样。
您实际上可以嵌入 WAV 文件,它只需要工作。您将其嵌入为字节数组,并在 FP9 中动态构建 SWF 文件。相当可怕,但可行。 :-) 在 FP10 中,您可以使用动态声音 API,所以很简单。
【讨论】:
【参考方案4】:试试立波
http://code.google.com/p/standingwave/
它能够在播放之前“缓存”声音,消除您通常听到的延迟和点击
【讨论】:
以上是关于在 Actionscript / Flex 3 中播放嵌入式 mp3 之前的延迟的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3 AS3在Flex中嵌入系统字体
ActionScript 3 在FlashDevelop中嵌入truetype字体(Flex 4+)
ActionScript 3 在Flex 4中增加Spark TextArea上的htmlText
在 Actionscript / Flex 3 中播放嵌入式 mp3 之前的延迟