• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

生成一个波文件_Delphi

Delphi 搞代码 3年前 (2018-08-09) 119次浏览 已收录 0个评论

Type  

TPCMWaveHeader = record  

  rID : array[0..3] of char; { ‘RIFF’ Identifier }  

  rLen : longint;  

  wID : array[0..3] of char; { ‘WAVE’ Identifier }  

http://www.gaodaima.com/?p=65902生成一个波文件_Delphi

  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;

欢迎大家阅读《生成一个波文件_Delphi,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址