2014-06-21 13 views
0

我有2個樣本wavfiles。結合現有的音頻文件並從它們生成新的音頻文件

我想將它們組合成一個輸出WAV這樣的:

播放第一WAV,等待x秒打第二WAV,並將結果保存爲一個新的wav文件。

我並不特別重視wav格式,所以很高興在需要時使用其他格式。

從我的研究看來,我需要將wavs轉換爲PCM,然後創建一個新的輸出緩衝區並將第一個文件寫入輸出緩衝區。然後以某種方式爲x秒創建一個空間,然後寫第二個PCM到

我該如何去做這件事?

回答

1

首先你需要你已瞭解正在談論什麼約

WAV是一種類型的RIFF編碼聲波爲PCM

本質PCM意味着該波的離散值被存儲在一定的sample rate通常44千赫

每個樣品可包含關於一個或多個信道的信息(通常爲2

每個樣本的值都以固定大小的整數或浮點形式存儲。 (通常爲16位整數

這些屬性都存儲在WAVheader

要合併兩個單獨WAV文件,你需要閱讀這兩個文件的標題,如果你是幸運的,他們都會有相同的ByteRate (== samplerate * channel count * bits/sample/8),那麼你只需要將第二個文件減去頭部連接到第一個文件的結尾,並將第二個文件的長度加到第一個文件的'length'字段中。

在任何其他情況下,我建議你利用library做某種重新編碼。

如果您有時間和精力,您可以自己進行重新編碼。

如果你不想用這個東西打擾一切嘗試使用一個完整的程序(i.E. sox),做你所需要的。

Btw .:如果每個樣本的位數都是有符號的,則默認值爲0,而如果它們是無符號的(通常只能在8位整數中找到),則爲最大值的一半。

因此,要獲得4秒的沉默,你需要有N = 4 *採樣率*通道NUM *(比特/秒)/ 8次0

花絮:你可以使用任何恆定值,而不是0沉默

+0

感謝您的澄清,這個東西對我來說都是非常新的。是的,我一直在研究圖書館,並認爲我會嘗試使用NAudio庫。 – iKode