我有2個樣本wavfiles。結合現有的音頻文件並從它們生成新的音頻文件
我想將它們組合成一個輸出WAV這樣的:
播放第一WAV,等待x秒打第二WAV,並將結果保存爲一個新的wav文件。
我並不特別重視wav格式,所以很高興在需要時使用其他格式。
從我的研究看來,我需要將wavs轉換爲PCM,然後創建一個新的輸出緩衝區並將第一個文件寫入輸出緩衝區。然後以某種方式爲x秒創建一個空間,然後寫第二個PCM到
我該如何去做這件事?
我有2個樣本wavfiles。結合現有的音頻文件並從它們生成新的音頻文件
我想將它們組合成一個輸出WAV這樣的:
播放第一WAV,等待x秒打第二WAV,並將結果保存爲一個新的wav文件。
我並不特別重視wav格式,所以很高興在需要時使用其他格式。
從我的研究看來,我需要將wavs轉換爲PCM,然後創建一個新的輸出緩衝區並將第一個文件寫入輸出緩衝區。然後以某種方式爲x秒創建一個空間,然後寫第二個PCM到
我該如何去做這件事?
首先你需要你已瞭解正在談論什麼約
本質PCM
意味着該波的離散值被存儲在一定的sample rate(通常44千赫)
每個樣品可包含關於一個或多個信道的信息(通常爲2)
每個樣本的值都以固定大小的整數或浮點形式存儲。 (通常爲16位整數)
這些屬性都存儲在WAV
header
要合併兩個單獨WAV
文件,你需要閱讀這兩個文件的標題,如果你是幸運的,他們都會有相同的ByteRate (== samplerate * channel count * bits/sample/8),那麼你只需要將第二個文件減去頭部連接到第一個文件的結尾,並將第二個文件的長度加到第一個文件的'length'字段中。
在任何其他情況下,我建議你利用library做某種重新編碼。
如果您有時間和精力,您可以自己進行重新編碼。
如果你不想用這個東西打擾一切嘗試使用一個完整的程序(i.E. sox),做你所需要的。
Btw .:如果每個樣本的位數都是有符號的,則默認值爲0,而如果它們是無符號的(通常只能在8位整數中找到),則爲最大值的一半。
因此,要獲得4秒的沉默,你需要有N = 4 *採樣率*通道NUM *(比特/秒)/ 8次0
花絮:你可以使用任何恆定值,而不是0沉默
感謝您的澄清,這個東西對我來說都是非常新的。是的,我一直在研究圖書館,並認爲我會嘗試使用NAudio庫。 – iKode