2009-11-19 39 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,因此很容易。