呵呵!给你一个原码吧.
可以这样调用:MergeWaves('a.wav,b.wav,c.wav','c:/temp/target.wav');
procedure MergeWavs(FromFiles,ToFile:string; Owerrite:boolean=True);
//如果owerrite=false则建立新文件
var
f:file;
s:string;
yeni:boolean;
filesizex:integer;
liste:TStringList;
i:integer;
function GetBinaryValue(ix:cardinal):string;
var
intl: cardinal;
ch: array[1..4] of char absolute intl;
begin
intl:=ix;
result:=ch;
end;
procedure BlockToBlock(FromFileName:string; startx,lenx:integer);
var
FromF: file;
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
TotalWritten:Integer;
begin
if FromFileName='' then Exit;
if not FileExists(FromFileName) then
begin
ShowMessage('File not found.' + #13 + FromFileName);
Exit;
end;
AssignFile(FromF, FromFileName);
Reset(FromF, 1);
TotalWritten:=0;
if startx > 1 then Seek(FromF,startx-1);
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
if lenx>0 then
if TotalWritten+numread>lenx then numread:=Lenx-TotalWritten;
BlockWrite(f, Buf, NumRead, NumWritten);
inc(TotalWritten,NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
end;
begin
AssignFile(f, ToFile);
if ( Owerrite or (not FileExists(ToFile)) ) then
begin
ReWrite(f,1);
Yeni:=True;
end else begin
Reset(f, 1);
Seek(f,filesize(f));
Yeni:=False;
end;
liste:=TStringList.create;
liste.CommaText:=FromFiles;
for i:=0 to liste.Count-1 do
if ((Yeni) and (i=0))
then BlockToBlock(Trim(liste),0,0)
else BlockToBlock(Trim(liste),45,0);
CloseFile(f);
AssignFile(f, ToFile);
Reset(f,1);
FileSizex:= FileSize(f);
s:=GetBinaryValue(filesizex-8);
Seek(f,4);
BlockWrite(f, s[1],length(s));
s:=GetBinaryValue(filesizex-44);
Seek(f,40);
BlockWrite(f, s[1],length(s));
CloseFile(f);
end;