2013-07-29 59 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