Combine multiple wave files into a single one (Views: 714)
Problem/Question/Abstract: Does anyone have a snippet of code in Delphi to combine multiple WAV files into one? I am writing a very simple text-to-speech application for Chinese pronounciation. I have all the wave files needed to synthesize Chinese pronounciation (506 files in all). Now, all I need is the ability to create one wave file based on a list of multiple wave files which are in a specific order. Answer: This one should work with any PCM format as long as all files are the same format: procedure JoinWaves(FileList: TStrings; OutputFile: string); {All files must be of the same format} var I: Integer; FileSize: LongInt; InStream, OutStream: TFileStream; begin OutStream := TFileStream.Create(OutputFile, fmCreate); try for I := 0 to FileList.Count - 1 do if FileExists(FileList[I]) then begin InStream := TFileStream.Create(FileList[I], fmOpenRead); try if I = 0 then OutStream.CopyFrom(InStream, InStream.Size) else if InStream.Size > 44 then begin InStream.Position := 44; OutStream.CopyFrom(InStream, InStream.Size - 44); end; finally InStream.Free; end; end; OutStream.Position := 4; FileSize := OutStream.Size - 8; OutStream.WriteBuffer(FileSize, SizeOf(FileSize)); OutStream.Position := 40; FileSize := OutStream.Size - 44; OutStream.WriteBuffer(FileSize, SizeOf(FileSize)); finally OutStream.Free; end; end; |