Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type
- TRIFFHeader = packed record
- ID : array[0..3] of Char;
- Length: DWORD;
- WaveID: array[0..3] of Char;
- end;
- TFormatHeader = packed record
- ID : array[0..3] of Char;
- Length : DWORD;
- FormatTag : WORD;
- Channels : WORD;
- SamplesPerSec : DWORD;
- AvgBytesPerSec: DWORD;
- BlockAlign : WORD;
- BitsPerSample : WORD;
- end;
- TDataHeader = packed record
- ID : array[0..3] of Char;
- Length: DWORD;
- end;
- TWaveHeader = packed record
- RIFF: TRIFFHeader;
- Format: TFormatHeader;
- Data: TDataHeader;
- end;
- TWaveSample = packed record
- Left: Smallint;
- Right: Smallint;
- end;
- TWaveContent = Array of TWaveSample;
- procedure SaveWAVEFile(WaveContent: TWaveContent; FileName: String);
- var
- WaveHeader: TWaveHeader;
- FStream: TFileStream;
- WaveLength: Integer;
- begin
- try
- FStream := TFileStream.Create(FileName, fmCreate);
- WaveLength := length(WaveContent);
- with WaveHeader do begin
- with RIFF do begin
- ID := 'RIFF';
- Length := 4 + WaveLength * 4 + SizeOf(TFormatHeader) + SizeOf(TDataHeader);
- WaveID := 'WAVE';
- end;
- with Format do begin
- ID := 'fmt ';
- Length := SizeOf(TFormatHeader)-8;
- FormatTag := $0001;
- Channels := 2;
- SamplesPerSec := 44100;
- AvgBytesPerSec := 176400;
- BlockAlign := 4;
- BitsPerSample := 16;
- end;
- with Data do begin
- ID := 'data';
- Length := WaveLength * 4;
- end;
- end;
- FStream.Write(WaveHeader, SizeOf(TWaveHeader));
- FStream.Write(WaveContent, 2048{WaveLength * 4});
- finally
- FStream.Free;
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment