Mega Code Archive

 
Categories / Delphi / Files
 

Writing wave files to disk

Title: Writing wave files to disk Question: 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;