2012-08-09 64 views
0

我正在寫一個Java程序,我想將一個ogg文件轉換成mp3文件。
我花了很多時間試圖找到一個好的圖書館來做到這一點,但沒有成功的時刻。Java - 轉換ogg到mp3

我想我需要一個ogg解碼器(jorbis?)和一個mp3編碼器(lameOnJ?)。
此外,轉換完成後,我需要在文件(藝術家/曲目標籤等)中設置一些標籤。

這是一個Windows和OS X應用程序。
你可以給我任何關於如何處理的提示,如果可能的話,用例子。

感謝

+1

你的具體問題是什麼?有些圖書館可以執行每一個可用的步驟,並且您已經計算出可以使用的候選人。您只需編寫膠水代碼將它們連接在一起。 – Durandal 2012-08-09 12:45:40

+0

嗯,我對Java相當陌生,並且很難找到寫好膠水代碼的好例子。 – jitowix 2012-08-09 13:00:29

+1

*沒有人會爲你寫* *(除非你付錢)。並且最有可能沒有任何示例可以滿足您的需求。但是,您可以通過谷歌搜索每個步驟的部分解決方案示例(分而治之!)。從第一步開始,解碼ogg文件。如果有,請將其擴展以將解碼後的數據送入編碼器。等等...... – Durandal 2012-08-09 13:03:56

回答

0

你有很多的選擇,這取決於你想要多大的努力投入,並已就執行平臺有什麼限制。

許多開發人員只是將System.exec()調用到外部解碼/編碼/標籤可執行文件,將中間文件寫入磁盤。這有點笨重,但一旦設置正確,它就可以工作。

更復雜的選擇是使用庫,例如​​你找到的庫。您仍然可以使用文件系統臨時存儲未壓縮的版本。

但是,您可以通過流水線避免存儲中間步驟 - 也許可以使其更快。您需要將解碼器的輸出作爲編碼器的輸入,並將它們設置爲兩者。

這個的細節取決於API。如果你幸運的話,他們可以使用塊,你也許可以在一個線程中管理它們。

如果他們使用流,你可能需要弄髒你的手,並使用線程。一個用於編碼器的線程,一個用於解碼器。

+0

你爲什麼需要*多個線程來處理流? – Durandal 2012-08-09 13:50:13

+0

@Durandal說一個API有一個同步方法'OggDecoder.decode(InputStream in,OutputStream out)',另一個具有'Mp3Encoder.encode(InputStream in,OutputStream out)'。如果你想將一個管道插入另一個,你需要線程 - 或者將中間格式存儲在某個地方。 – slim 2012-08-20 09:05:32

+0

啊,我沒有想太多。我現在看到你的意思。 – Durandal 2012-08-20 09:14:49