Unit1; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; TForm1 = (TForm) Button1: TButton; Button2: TButton; Button1Click(Sender: TObject); Button2Click(Sender: TObject); ; Form1: TForm1; MMSystem; GetWaveFmtData( path: ; fmt: TWaveFormatEx; buf: TBytes): Boolean; hFile: HMMIO; ckiRIFF,ckiFmt,ckiData: TMMCKInfo; Result := False; hFile := mmioOpen(PChar(path), , MMIO_READ); hFile = Exit; ZeroMemory(@ckiRIFF, SizeOf(TMMCKInfo)); ZeroMemory(@ckiFmt, SizeOf(TMMCKInfo)); ZeroMemory(@ckiData, SizeOf(TMMCKInfo)); ckiRIFF.fccType := mmioStringToFOURCC(, ); ckiFmt.ckid := mmioStringToFOURCC(, ); ckiData.ckid := mmioStringToFOURCC(, ); ZeroMemory(@fmt, SizeOf(TWaveFormatEx)); mmioDescend(hFile, @ckiRIFF, , MMIO_FINDRIFF); (ckiRIFF.ckid = FOURCC_RIFF) (ckiRIFF.fccType = mmioStringToFOURCC(,)) (mmioDescend(hFile, @ckiFmt, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR) (mmioRead(hFile, @fmt, ckiFmt.cksize) = ckiFmt.cksize) (mmioAscend(hFile, @ckiFmt, ) = MMSYSERR_NOERROR) (mmioDescend(hFile, @ckiData, @ckiRIFF, MMIO_FINDCHUNK) = MMSYSERR_NOERROR) SetLength(buf, ckiData.cksize); Result := (mmioRead(hFile, PAnsiChar(buf), ckiData.cksize) = ckiData.cksize); ; mmioClose(hFile, ); ; CreateWave( path: ; fmt: TWaveFormatEx; buf: TBytes): Boolean; h: HMMIO; ckiRiff, ckiFmt, ckiData: TMMCKInfo; ZeroMemory(@ckiRiff, SizeOf(TMMCKInfo)); ckiRiff.cksize := - + Length(buf); ckiRiff.fccType := mmioStringToFOURCC(, ); ZeroMemory(@ckiFmt, SizeOf(TMMCKInfo)); ckiFmt.ckid := mmioStringToFOURCC(, ); ZeroMemory(@ckiData, SizeOf(TMMCKInfo)); ckiData.ckid := mmioStringToFOURCC(, ); ckiData.cksize := Length(buf); h := mmioOpen(PChar(path), , MMIO_CREATE MMIO_WRITE); (h <> ) (mmioCreateChunk(h, @ckiRiff, MMIO_CREATERIFF) = MMSYSERR_NOERROR) (mmioCreateChunk(h, @ckiFmt, ) = MMSYSERR_NOERROR) (mmioWrite(h, PAnsiChar(@fmt), SizeOf(TPCMWaveFormat)) = SizeOf(TPCMWaveFormat)) (mmioAscend(h, @ckiFmt, ) = MMSYSERR_NOERROR) (mmioCreateChunk(h, @ckiData, ) = MMSYSERR_NOERROR) Result := (mmioWrite(h, PAnsiChar(buf), Length(buf)) = Length(buf)); mmioClose(h, ); ; TForm1.Button1Click(Sender: TObject); pathSource = ; pathDest = ; fmt: TWaveFormatEx; buf: TBytes; GetWaveFmtData(pathSource, fmt, buf); SetLength(buf, Length(buf) ); CreateWave(pathDest, fmt, buf); ; TForm1.Button2Click(Sender: TObject); path1 = ; path2 = ; pathDest = ; fmt1,fmt2: TWaveFormatEx; buf1,buf2: TBytes; oldLen: Integer; GetWaveFmtData(path1, fmt1, buf1); GetWaveFmtData(path2, fmt2, buf2); CompareMem(@fmt1, @fmt2, SizeOf(TWaveFormatEx)) oldLen := Length(buf1); SetLength(buf1, Length(buf1) + Length(buf2)); CopyMemory(@buf1[oldLen], Pointer(buf2), Length(buf2)); CreateWave(pathDest, fmt1, buf1); ShowMessage(); ; .
转载于:https://www.cnblogs.com/lzh-boy/archive/2010/01/13/1646596.html