2006. február 28., kedd
Writing wave files to disk
Problem/Question/Abstract:
How do i write a wave file?
Answer:
type
TPCMWaveHeader = record
rID: array[0..3] of char; { 'RIFF' Identifier }
rLen: longint;
wID: array[0..3] of char; { 'WAVE' Identifier }
fId: array[0..3] of char; { 'fmt ' Identifier }
fLen: longint; { Fixed, must be 16 }
wFormatTag: word; { Fixed, must be 1 }
nChannels: word; { Mono=1, Stereo=2 }
nSamplesPerSec: longint; { SampleRate in Hertz }
nAvgBytesPerSec: longint;
nBlockAlign: word;
nBitsPerSample: word; { Resolution, e.g. 8 or 16 }
dId: array[0..3] of char; { 'data' Identifier }
dLen: longint; { Number of following data bytes }
end;
procedure WritePCMWaveFile(Filename: string; Resolution, Channels, Samplerate,
Samples: integer; Data: Pointer);
var
h: TPCMWaveHeader;
f: file;
databytes: integer;
begin
DataBytes := Samples;
DataBytes := DataBytes * Channels; { double if stereo }
DataBytes := DataBytes * (Resolution div 8); { double if 16 Bit }
FillChar(h, SizeOf(TPCMWaveHeader), #0);
with h do
begin
rID[0] := 'R';
rID[1] := 'I';
rID[2] := 'F';
rID[3] := 'F'; { 1st identifier }
rLen := DataBytes + 36;
wID[0] := 'W';
wID[1] := 'A';
wID[2] := 'V';
wID[3] := 'E'; { 2nd identifier }
fId[0] := 'f';
fId[1] := 'm';
fId[2] := 't';
fID[3] := Chr($20); { 3rdidentifier ends with a space character }
fLen := $10; { Fixed, must be 16 }
wFormatTag := 1; { Fixed, must be 1 }
nChannels := Channels; { Channels }
nSamplesPerSec := SampleRate; { Sample rate in Hertz }
nAvgBytesPerSec := SampleRate * Channels * trunc(Resolution div 8);
nBlockAlign := Channels * (Resolution div 8); { Byte order, see below }
nBitsPerSample := Resolution;
dId[0] := 'd';
dId[1] := 'a';
dId[2] := 't';
dId[3] := 'a'; { Data identifier }
dLen := DataBytes; { number of following data bytes }
end;
AssignFile(f, filename);
ReWrite(f, 1);
BlockWrite(f, h, SizeOf(h));
BlockWrite(f, pbytearray(data), databytes);
CloseFile(f);
{ The rest of the file is the wave data. Order is low-high for left channel,
low-high for right channel, and so on.
For mono or 8 bit files make the respective changes. }
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése