2013-07-29 83 views
0

Iam嘗試將兩個.wav文件合併到另一個文件中。但我只能在創建的文件中看到第一個文件的數據。無法合併wav文件

但新創建的文件佔用的空間等於源文件大小的總和。

foreach (string sourceFile in fileNamesList) 
      { 
       FileStream file= File.Open(sourceFile, FileMode.Open); 
       FileStream outFile = File.Open(output, FileMode.Append,FileAccess.Write); 
       byte[] buffer = new byte[file.Length]; 
       int read; 
       if ((read=file.Read(buffer, 0, (int)file.Length))>0) 
       { 

        outFile.Write(buffer, 0, read); 

       } 

       file.Close(); 
       file.Dispose(); 
       outFile.Close(); 
       outFile.Dispose(); 

      } 

感謝

+0

元數據怎麼樣?你確定可以合併這些文件嗎? – rebeliagamer

+0

我的意思是結果文件的持續時間等於fileNameList中第一個文件的持續時間。但它的大小=列表中所有文件大小的總和。 – Rams

回答

1

你不能只是連接兩個WAV文件,因爲它們有一個頭定義格式,信道數,採樣率,長度等

你需要閱讀併爲每個單獨的WAV文件解析頭文件,然後使用正確的數據將新頭寫入新文件,然後從每個WAV文件追加數據內容。

您將不能輕鬆地連接兩個具有不同採樣率或通道數量的WAV文件,但否則不會太難(一旦您制定了標題格式)。

看到這裏有關的頭格式細節:

https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

http://en.wikipedia.org/wiki/WAV

也許最簡單的方法將是使用第三方工具,如Naudio要做到這一點,因爲這裏所描述:

How to join 2 or more .WAV files together programatically?

+0

獲取參數異常未處理,必須讀取完整塊:請求1024,塊對齊在while循環中爲65。 – Rams