在Actionscript / Flex 3中播放嵌入式mp3之前的延迟

时间:2009-11-19 23:09:06

标签: flex actionscript-3 actionscript embed

我在我的Flex项目中嵌入一个mp3用作音效,但我发现每次播放时,从我调用.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的缺陷。

4 个答案:

答案 0 :(得分:1)

不确定原因,除了Flash总是有一些不良的音频延迟问题。阅读Tinic的博客,了解这些内容:http://www.kaourantin.net/

有一件事可能会有所帮助:确保您的MP3为44.1kHz,否则Flash需要对其进行重新取样。

你实际上可以嵌入一个WAV文件,它只需要工作。您将其嵌入为字节数组,并在FP9中动态构建SWF文件。非常可怕,但可行。 :-)在FP10中,您可以使用动态声音API,因此很容易。

答案 1 :(得分:1)

尝试StandingWave

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

它能够在播放那些通常听到的延迟和点击之前“缓存”声音

答案 2 :(得分:0)

我没有过多地使用Flash中的音频,但听起来半秒延迟可能是Flash Player打开文件并将其读入内存。加载应用程序时,您可以尝试执行play()和stop()。这可能会把它推入记忆中。

另一个选项是使用由StandingWave的人建立的Noteflight库。您可以使用该库对音频文件进行一些额外的控制,希望它能帮助您解决延迟问题。

答案 3 :(得分:0)

问题是所有MP3在压缩过程中放在那里的文件开头都有一个随机的空白时间。现代软件点唱机(itunes,songbird等...)通过在播放之前扫描文件并确定歌曲的实际起点来弥补这一点。声音效果的最佳选择是使用.wav文件,因为它们的格式允许即时播放,但文件大小点击。

您也可以尝试:http://www.mptrim.com/< - 他们声称可以从mp3中删除空间。