回答
如果你直接使用wav文件的字節,你可以在任何編程語言中使用相同的策略。對於這個例子,我假定兩個源文件具有相同的比特率/數字通道,並且具有相同的長度/大小。 (如果不是,你可以在開始合併之前編輯它們)。
在WAV specificaiton首先來看看,我發現在stanford課程的網站一個很好的一個:
常見的頭部長度是44個或46字節。
如果你想連接兩個文件(即在一個單一的文件播放WAV一個接着另一個):
- 找出格式化的WAV文件是
- 砍掉第一44/46字節它們是標題,文件的其餘部分是數據
創建一個新文件並粘貼其中的一個標題。
新wav文件= {標題} = {} 44/46字節長
從原始文件
新wav文件= {頭+數據1 + DATA2} =添加兩個數據部分{ 44/46 + size(data1)+ size(data2)}字節長
在兩處修改您的標題以反映新文件的長度。
a。修改字節4 + 4(即從偏移量4開始的4個字節)。 新值應該是一個十六進制數字,代表新的wav文件的大小,以字節爲單位{44/46 + size(data1)+ size(data2)} - 8bytes。
b。修改字節40 + 4或42 + 4(從偏移量40或42開始的4個字節,具體取決於您是否有44byte頭或46字節頭)。 新值應該是一個十六進制數字,代表新的wav文件的總大小。即{44/46 +尺寸(數據1)+尺寸(數據2)}
如果你想,而不是合併或兩個文件混合(讓他們都在同一時間玩當時):
- 如果兩個文件的長度相同,則不必編輯標頭。
從字節44/46開始,您將不得不將每個樣本編輯爲data1中的值+ data2中的值。 例如,如果您的SampleRate是8位,您將修改1個字節,如果您的採樣率是16位,您將修改2個字節。 文件的其餘部分只是存儲表示當時聲音波形的int值的1/2bytes的樣本。
a。對於文件中剩餘的每個樣本,抓取1/2字節的十六進制字符串,並從文件data1和data2中獲取int值。
b。將1/2字節整數相加在一起 將結果轉換回十六進制並在輸出文件中使用該值。
c。您通常必須將該數除以2以得到適合原始1/2比特樣本塊的平均值。當我在objc中嘗試它時(可能與簽名或未簽名的整數有關),我變得失真,只是跳過了部分部分,因爲如果您將非常大聲的聲音合併在一起,它只會是一個問題。 即當data1 + data2大於1/2字節時,聲音將被剪輯。有關於裁剪問題here的討論,您可能想嘗試其中一種裁剪技術。
嗨Thamster,我想合併兩個wav文件。我做到了,但合併後我們可以在這裏兩首歌曲,也與歌曲噪音也occuring..please幫助我... int a = buffer_1 [i]/2; \t \t \t int b = buffer_2 [i]/2; \t \t \t int c =(a + b); \t \t \t datafinal [i] =(byte)c; – sandeep 2013-04-04 09:57:40
感謝您的解決方案。對於未來可能遇到這種情況的任何人,如果不是2就會給我帶來扭曲。我爲16位PCM文件單獨添加每個字節。 – 2017-11-14 15:46:08
合併意味着混合,但它聽起來像你這裏意味着串聯。
要與中間的靜音連接,需要在文件中插入一些靜音幀。無聲幀是每個通道都有一個「0」的無聲幀 - 如果使用帶符號的採樣,這實際上是一個0,對於無符號的,它是maxvalue/2。
每個幀將有一個樣本爲每個通道。因此,要以CD格式生成一秒鐘的靜音,您需要插入44100(hz)* 2(每幀通道)= 88200 16位有符號整數,每個值爲0。我不確定如何訪問Java音頻抽象抽象的原始文件,但這是要插入的數據。
- 1. iPhone - 將兩個wav/caf文件合併爲一個
- 2. 連接兩個WAV文件,然後合併SOX中的第三個WAV文件
- 3. 合併MIDI和WAV文件
- 4. 無法合併wav文件
- 5. 以C#合併WAV文件
- 6. 如何合併兩個音頻.wav文件
- 7. 在android中合併兩個或多個.wav文件
- 8. 如何將兩個圖形文件合併爲一個文件
- 9. 在MATLAB中合併.wav和.avi文件
- 10. Android - 將兩個或多個WAV文件同時合併(混合)成一個(混合)
- 11. 將wav文件轉換爲wav文件
- 12. 將兩個文本文件合併爲一個CSV文件
- 13. 基於第一列合併兩個文件合併爲一個
- 14. 如何將兩個wav文件連接成一個接一個
- 15. 將兩個聲音文件合併爲一個新文件
- 16. 將兩個.csv文件合併爲一個文件
- 17. 將兩個音頻文件合併爲一個文件
- 18. Java - 將兩個以上的.wav文件合併時遇到問題
- 19. 合併兩個音頻文件合併爲一個目標C
- 20. 如何使用LibSoX混合兩個wav文件
- 21. 如何將兩個awk文件合併爲一個?
- 22. 如何將兩個數據集合併爲一個xml文件
- 23. svn:如何將兩個文件夾合併爲一個?
- 24. AVAssetExportSession失敗 - 合併2個WAV文件(iOS7)
- 25. 使用c重疊和合並2個wav文件#
- 26. Zencoder:將兩個視頻文件合併並編碼爲一個
- 27. 如何將多個.cs文件合併爲一個.dll文件?
- 28. 如何將多個csv文件合併爲一個CSV文件
- 29. 如何合併兩個文本文件
- 30. 如何比較兩個wav文件?
它是如何正確工作的?什麼地方出了錯? – 2010-04-05 14:37:07
結果文件出來太短。 您需要考慮我嘗試合併的每個文件的文件需要1秒或更少。也許這是原因。 – 2010-04-05 14:55:35
所以每個文件是1秒或更少?最大歌曲長度是2秒?不是你在做什麼? – 2010-04-05 15:15:07