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);
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);
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);
end; WAVE文件的文件头并不复杂!上面是个写入文件头的程序!用FileStream打开,很容易获取SampleRate,Channels,
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);
end; WAVE文件的文件头并不复杂!上面是个写入文件头的程序!用FileStream打开,很容易获取SampleRate,Channels,