2010-07-03 219 views
1

我很感興趣學習如何在ActionScript 3中解碼和播放音頻。我瞭解如何使用SAMPLE_DATA事件將字節寫入Sound對象,所以這不是一個真正的問題。我想了解的是如何在Flash Player中實現備用音頻格式以進行原生播放。解碼音頻/音頻播放(AS3)

我想我問的是:我如何採取X格式的東西,並將其「轉換/解碼」爲WAV格式並將字節寫入Sound對象,播放音頻?我有興趣爲FLAC音頻和可能的OGG音頻編寫解碼器,因爲它們似乎是一些最廣泛使用的開源音頻格式。

任何人都可以給我任何意見嗎?

回答

2

如果你想寫一個解碼器,你應該看看的第一件事就是你想要解碼的格式的規格。

ogg/vorbis規範可以在這裏找到:http://xiph.org/vorbis/doc/Vorbis_I_spec.html

此外,它可能有助於在Java中看到(或者可能是port)一些其他已經這樣做的開源庫(我沒有意識到任何用Actionscript編寫):http://www.jcraft.com/jorbis/ (我不知道這個庫,我剛剛發現它谷歌搜索「ogg vorbis開源」。

無論如何,你將不得不做一些工作,讓它工作,我不是這個意思但我不確定Actionscript是否足夠實時的音頻解碼

+0

「我不確定Actionscript是否足夠快速進行實時音頻解碼」...也不是我。 – spender 2010-07-03 01:16:17

+0

先解碼,然後播放它,或者只解碼緩衝區並在播放過程中緩慢解碼。 – 2010-07-03 01:21:31

+0

@ M28。是的,在播放時解碼就是我所說的「實時音頻解碼」。正如我所說,我懷疑AS速度夠快,但我可能是錯的。另一方面,事先解碼整個事情並不總是一種選擇;另外,我有一種感覺,它需要很長時間(並且你必須使用「綠色線程」,這會讓它變慢)。 – 2010-07-03 01:54:12

1

你可以嘗試,但你不會有太多的咕嚕聲去做其他的事情。在Flash 10之前,我寫了一篇詳細介紹hack to feed PCM data into sound output in Flash的文章。有人因爲編寫了AS3 Ogg解碼器而聯繫上了,但是......即使在完全優化代碼之後,也發現AVM2並沒有太多的工作。基本上,這是相當緩慢的解碼OGG是相當處理器密集型。我看不出這些年來事情會發生什麼變化,因爲CPU已經變得「更廣泛」,而且速度並不快。 ActionScript是單線程的,所以你不能卸載到另一個核心。

可能值得檢查this ...也許性能有所提高。

編輯:說了這麼多,正如胡安所說,不要因此回答而氣餒。我懷疑FLAC解碼的計算需求可能遠遠小於OGG,如果DSP讓你興奮,花時間計算出所有這些東西是值得的,即使閃存路線(可能)導致失望。就我個人而言,我認爲Silverlight的MediaStreamSource看起來非常有前途,但還沒有真正涉足這麼多。

+0

讓我告訴你,這是一個很棒的破解,我記得我在一個我正在研究的音頻混音器項目中玩弄它時間(儘管由此產生的用戶生成的音頻原始數據太大而無法實踐把它發送到服務器並寫一個MP3編碼器已經遠離我的聯盟;我最終以類似midi的格式發送「混音數據」,並讓服務器進行真正的混音)。但與它合作非常有趣。 +1! (也是一個很好的答案)。 – 2010-07-03 01:48:45

+0

@Juan ...謝謝。發現如何讓安德烈米歇爾的祕密祕訣絕對是我用Flash最有趣的。 – spender 2010-07-03 02:03:31