2010-11-02 80 views
2

我試圖製作一個吉他練習網站,一個關鍵的功能是循環非常短的mp3文件(幾秒鐘長),兩者之間絕對沒有空隙。例如,它可以是一個長4和絃的和絃進程,我希望允許用戶無縫循環播放它。如何在瀏覽器中以零差距循環播放mp3?

我嘗試使用HTML5 <audio>標籤與loop屬性。谷歌瀏覽器在循環之間給出了一個小小的差距,但足夠大到完全無法接受我的目的。我沒有測試其他瀏覽器,但我相信它不會工作。

一種可能的解決方法是使用ffmpeg到流重複相同的音頻作爲一個MP3。但是,這會花費大量帶寬。

至於我自己,我用厚顏無恥地循環無間隙的,可惜的Audacity沒有一個網絡版本。

那麼,你有什麼想法,我可以循環瀏覽器中的一個MP3與零差距?我更喜歡非Flash解決方案,但如果沒有其他工作,我會使用Flash。

編輯: 謝謝你的一切建議。 Flash原來正常工作。我在http://vmlucid.lcm.hk/~netvope/audio/flash.html做了一個玩具演示。令我驚訝的是(我用Flash將資源和瀏覽器崩潰聯繫起來),Flash和ActionScript的設計非常好,而且易於使用。我花了只有3個小時對我的第一個Flash項目:)

回答

1

in flash AS3您可以使用computeSpectrum()提取聲音數據,並在需要時將其提供給您的Sound對象(激活SampleDataEvent)。

+0

謝謝!我也會從extract()中用ByteArrays來嘗試SampleDataEvents。 – netvope 2010-11-05 06:31:12

3

看一看this page。使用谷歌瀏覽器7聽一段時間後,我發現方法1工作得很好,而方法3提供了最好的結果,雖然這有點破解。最終,所有瀏覽器的工作方式都不相同,尤其是因爲HTML5尚未最終確定。如果可能的話,你應該選擇一個Flash版本,我認爲這會給你最好的循環。

+0

不幸的是差距太大。感謝信息雖然=) – netvope 2010-11-05 06:23:05

+0

@netvope-似乎你應該使用Flash然後 – DMan 2010-11-05 14:19:03

1

我不知道如何這會工作,但如果你知道你的循環持續800毫秒 - 你可以讓瀏覽器調用play方法在800ms每...但它仍然無法保證是十全十美。我不認爲瀏覽器在本地能夠提供可靠的音頻循環。

setInterval(function(){ 
    document.getElementById("loop").play(); 
}, 800); 

有傳言說在最無縫的方式也退出這個功能使用到多種音頻標籤和它們之間的交替的最佳途徑。

1

或檢查出此實用程序:http://www.compuphase.com/mp3/mp3loops.htm我用它成功地爲我的閃存項目時有音樂無間隙進行循環,而99%的時間,它的工作。它需要WAV作爲輸入。
基本上它是LAME mp3編碼器的一種前端,它使用這樣的設置來防止出現空白。它不會在很短的聲音效果上工作(我相信不到0.5秒)。
你所要做的一切之後是使用:

var sound:Sound = new MySoundEffect(); 
sound.play(0, 1000); 

,它會循環一千倍。

+1

該鏈接提供有關mp3文件中的空白的全面信息。一個必須閱讀的好奇! – netvope 2010-11-05 06:26:57