2013-07-29 4 views
0

두 개의 .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 파일을 쉽게 연결할 수 없지만 그렇지 않으면 너무 어렵지 않습니다 (일단 헤더 형식을 다듬 었으면). 여기에 설명 된대로이 작업을 수행하는 등 Naudio와 같은 타사 도구를 사용할 수

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

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

아마도 가장 쉬운 방법은 것입니다 :

헤더 형식에 대한 자세한 내용은 여기를 참조하십시오 :

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

+0

인수 예외가 처리되지 않았습니다. 전체 블록을 읽어야합니다. 요청 된 1024, 블록 정렬은 while 루프에서 65입니다. – Rams

관련 문제