Как разрезать wav файл?
01.01.2007
type TWaveHeader = record ident1: array[0..3] of Char; // Must be "RIFF" len: DWORD; // remaining length after this header ident2: array[0..3] of Char; // Must be "WAVE" ident3: array[0..3] of Char; // Must be "fmt " reserv: DWORD; // Reserved Size wFormatTag: Word; // format type nChannels: Word; // number of channels (i.e. mono, stereo, etc.) nSamplesPerSec: DWORD; //sample rate nAvgBytesPerSec: DWORD; //for buffer estimation nBlockAlign: Word; //block size of data wBitsPerSample: Word; //number of bits per sample of mono data cbSize: Word; //the count in bytes of the size of ident4: array[0..3] of Char; //Must be "data" end;
You can load the file header with this function:
function GetWaveHeader(FileName: TFilename): TWaveHeader; const riff = 'RIFF'; wave = 'WAVE'; var f: TFileStream; w: TWaveHeader; begin if not FileExists(Filename) then exit; try f := TFileStream.create(Filename, fmOpenRead); f.Read(w, Sizeof(w)); if w.ident1 <> riff then begin Showmessage('This is not a RIFF File'); exit; end; if w.ident2 <> wave then begin Showmessage('This is not a valid wave file'); exit; end; finally f.free; end; Result := w; end;
Now we have all for creating the code for spliting the wave file:
function SplitWave(Source, Dest1, Dest2: TFileName; Pos: Integer): Boolean; var f1, f2, f3: TfileStream; w: TWaveHeader; p: Integer; begin Result:=False if not FileExists(Source) then exit; try w := GetWaveHeader(Source); p := Pos - Sizeof(TWaveHeader); f1 := TFileStream.create(Source, fmOpenRead); f2 := TFileStream.create(Dest1, fmCreate); f3 := TFileStream.create(Dest2, fmCreate); {++++++++++Create file 1 ++++++++++++++++} w.len := p; f2.Write(w, Sizeof(w)); f1.position := Sizeof(w); f2.CopyFrom(f1, p); {++++++++++++++++++++++++++++++++++++++++} {+++++++++++Create file 2 +++++++++++++++} w.len := f1.size - Pos; f3.write(w, Sizeof(w)); f1.position := Pos; f3.CopyFrom(f1, f1.size - pos); {++++++++++++++++++++++++++++++++++++++++} finally f1.free; f2.free; f3.free; end; Result:=True; end;
Взято с Delphi Knowledge Base: https://www.baltsoft.com/