2011-11-16 80 views
5

我有一個OGG Vorbis格式文件,我必須做兩次手術與它的工作:用的Ogg Vorbis格式

  1. 切割文件的一部分,從一個位置到另一個
  2. 合併另一個文件與現有

我怎樣才能實現在C#這兩個操作?

+1

我試圖閱讀官方的Xiph.org文檔,但我還沒有找到任何有用的方法來達到我的目的。 –

+0

「合併」是什麼意思?簡單的連接? – CodesInChaos

+0

是的,我想簡單地將新文件追加到現有文件 –

回答

5

我想看看能否libogg C文檔中,並找出如何用C做到這一點。然後使用libogg上的包裝器在C#中編寫幾乎相同的代碼。

我創建使用互操作的助手在libogg和libvorbis低水平包裝: https://github.com/CodesInChaos/Xiph/blob/master/LowLevel.cs

該項目還包含了一些更高級別的結構,但我不認爲他們會爲你有用正在做。

BTW,如果文件之間的流ID不同,您可以將文件簡單地追加到另一個創建序列中都起着流的有效文件。

你可能需要讀取輸入文件分組明智使用解碼API,然後聰明的寫出來包的組合數據。可能替換之間的流ID和granulepos。

流ID是標識在OGG文件子的整數。要附加多個這樣的子流,您可以簡單地確保它們具有不同的ID,然後寫入數據。

分裂是比較討厭的一點,因爲granulepos是編解碼器相關的時間戳,我不記得它是如何爲Vorbis格式定義。這裏的另一個問題是,你不能簡單地在沒有重新編碼的情況下拆分數據包。

+0

我正在使用Xiph Interop庫(http://oggvorbisinterop.codeplex.com/)。我必須使用哪些方法來達到我的目的? –

+0

或我的代碼中使用 –

5

你可以用libzplay做到這一點http://libzplay.sourceforge.net/ 做所需的步驟正在問:

  1. 的OpenFile
  2. 尋求
  3. SetWaveOutFile(該支持.OGG出口以及其他 格式)
  4. StartPlayback
  5. StopPlayback(在需要時)

對於多種語言(包括c#),鏈接網站上的所有內容都非常詳細。
這個答案適用於所有其他花費了數小時搜索時間並且沒有得到以前答案幫助的人。這並不是解決這個問題的一個非常有效的解決方案,但是在搜索這個問題時出現了很多次,這可能對其他人有幫助。 :)

+1

上帝保佑你ntw1103。這正是我需要的。我不知道當我花了一個星期Google和.NET的ogg vorbis時它沒有出現。 – bulltorious

+0

許可證(GNU GPL)如何影響分銷和銷售? – jjxtra