2012-09-09 41 views
0

我想將多聲道(2,8或16)wav文件拆分爲其聲道,並將每個聲道保存在另一個wav-File中。libsox拆分多聲道wav至單聲道

到目前爲止,我已經完成了在我的C++,Objective C++項目中啓動並運行libsox。

Libsox心不是有據可查,有AREN關於如何做到這一點:(

我開始先開擴的Inputfile中

sox_format_t * in, * out; 
assert(sox_init() == SOX_SUCCESS); 
assert(in = sox_open_read((const char*)filename.c_str(),NULL,NULL,NULL)); 

現在,我必須找到一種方式來獲得的信道數很多例子這個文件的。然後,我必須創造出文件相同的量和節省每通道本身裏面他們。

怎麼辦?

謝謝!

+0

你可能libsndfile考慮代替。 –

+0

感謝您的建議,但我剛剛閱讀,libsndfile無法做到這一點。 問題5:爲什麼libsndfile沒有交織/去交織? 這個問題比起初看起來要大。 對於立體聲文件,簡單的交織/解交織可以滿足大多數用戶是一個相當安全的選擇。但是,對於超過2個頻道的文件,情況不太可能如此。如果用戶有一個4通道文件,並且想要在立體聲輸出聲卡上播放該文件,他們要麼需要前2個通道,要麼需要混合組合4個通道。 – hmrc87

+0

關於文檔,[git repository](http://sox.git.sourceforge.net/git/gitweb.cgi?p=sox/sox;a=tree)中的例子可能會有所幫助,它們在'的src /示例* C'。還有[libsox(3)](http://sox.sourceforge.net/libsox.html),儘管它有點稀疏。 – Thor

回答

0

我想我會以老式的方式來做。

  • 確定文件的通道數。
  • 確定數據塊的長度。

    Length of Data block/channelCount = Size of each channelBlock 
    
  • 頻道將保存那樣的WavFile-數據塊(對於4路WavFile) CH1/CH2/CH3/CH4 CH1/CH2/CH3/CH4內。

  • 我通過數據塊運行解壓渠道,把它們放在一個單WAV文件