可能对你有帮助
生成一个波文件
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;
{do
uble if stereo }
DataBytes:=DataBytes*(Resolution div 8);
{do
uble if 16 Bit }
FillChar(h,SizeOf(TPCMWaveHeader),#0);
with hdo
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;