中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
生成一个波文件
作者:未知 时间:2005-08-07 21:00 出处:编程爱好者网站 责编:chinaitpower
              摘要:生成一个波文件
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;

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有