2009-11-19 60 views
4

我将一个mp3嵌入到我的Flex项目中以用作音效,但是我发现每次播放它时都会有大约半秒的延迟当我打电话.play()时,你可以听到声音。这使得它很奇怪,因为我想让音效与游戏事件同步。我的mp3本身只有大约五分之一秒,所以它不是因为mp3的内容。在Actionscript/Flex中播放嵌入式mp3之前的延迟3

我与

[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特有的缺陷。

+0

可以检查声音是否已经准备好?即mp3的状态? – milesmeow 2009-11-20 06:27:05

+0

您是否检查过http:// stackoverflow。com/questions/227674/latency-in-playing-short-sounds-in-flash-9-actionscript-3获取更多帮助? – zaf 2010-04-17 11:48:33

回答

0

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

另一种选择是使用由Noteflight家伙构建的StandingWave库。您可以使用该库对音频文件进行一些额外的控制,并希望这会有助于延迟问题。

+0

它发生在我以后玩的文件的所有后续时间。另外,并没有真正的文件。它嵌入到swf中。 – lacker 2009-11-20 20:12:40

0

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

你也可以试试:http://www.mptrim.com/ < - 他们声称能够修剪mp3空间。

+0

这不是问题,因为当我重复播放10次声音时,在随后的重复中没有空白区域。另外,Flex不允许嵌入wav文件。 – lacker 2009-11-20 20:11:50

1

不知道原因,除了Flash总是有一些不好的音频延迟问题。阅读Tinic的博客留在这方面的东西顶:http://www.kaourantin.net/

有一件事可以帮助:请确保您的MP3为44.1kHz否则Flash将需要重新采样它。

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