delphi制作wav文件的方法_Delphi教程-查字典教程网
delphi制作wav文件的方法
delphi制作wav文件的方法
发布时间:2016-12-28 来源:查字典编辑
摘要:本文实例讲述了delphi制作wav文件的方法。分享给大家供大家参考。具体如下:这里delphi用waveIn...函数制作wav文件具体代...

本文实例讲述了delphi制作wav文件的方法。分享给大家供大家参考。具体如下:

这里delphi用waveIn...函数制作wav文件

具体代码如下:

//使用窗口接受音频设备发出的消息: unitUnit1; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,StdCtrls; type TForm1=class(TForm) Button1:TButton; Button2:TButton; Button3:TButton; procedureFormCreate(Sender:TObject); procedureButton1Click(Sender:TObject); procedureButton2Click(Sender:TObject); procedureButton3Click(Sender:TObject); protected procedureWndProc(varm:TMessage);override; end; var Form1:TForm1; implementation {$R*.dfm} usesMMSystem; var whIn1,whIn2,whOut:TWaveHdr; hWaveIn,hWaveOut:HWAVE; fmt:TWaveFormatEx; buf1,buf2,SaveBuf:TBytes; procedureTForm1.FormCreate(Sender:TObject); begin Button1.Caption:='开始录音'; Button2.Caption:='停止录音'; Button3.Caption:='播放录音'; end; //开始录音 procedureTForm1.Button1Click(Sender:TObject); begin {指定要录制的格式} fmt.wFormatTag:=WAVE_FORMAT_PCM; fmt.nChannels:=2; fmt.nSamplesPerSec:=22050; fmt.nAvgBytesPerSec:=88200; fmt.nBlockAlign:=4; fmt.wBitsPerSample:=16; fmt.cbSize:=0; SaveBuf:=nil;{清除已录制的内容} ifwaveInOpen(@hWaveIn,WAVE_MAPPER,@fmt,Handle,0,CALLBACK_WINDOW)=0then begin SetLength(buf1,1024*8); SetLength(buf2,1024*8); whIn1.lpData:=PAnsiChar(buf1); whIn1.dwBufferLength:=Length(buf1); whIn1.dwBytesRecorded:=0; whIn1.dwUser:=0; whIn1.dwFlags:=0; whIn1.dwLoops:=0; whIn1.lpNext:=nil; whIn1.reserved:=0; whIn2.lpData:=PAnsiChar(buf2); whIn2.dwBufferLength:=Length(buf2); whIn2.dwBytesRecorded:=0; whIn2.dwUser:=0; whIn2.dwFlags:=0; whIn2.dwLoops:=0; whIn2.lpNext:=nil; whIn2.reserved:=0; waveInPrepareHeader(hWaveIn,@whIn1,SizeOf(TWaveHdr)); waveInPrepareHeader(hWaveIn,@whIn2,SizeOf(TWaveHdr)); waveInAddBuffer(hWaveIn,@whIn1,SizeOf(TWaveHdr)); waveInAddBuffer(hWaveIn,@whIn2,SizeOf(TWaveHdr)); waveInStart(hWaveIn); end; end; //停止录音 procedureTForm1.Button2Click(Sender:TObject); begin waveInStop(hWaveIn); waveInUnprepareHeader(hWaveIn,@whIn1,SizeOf(TWaveHdr)); waveInUnprepareHeader(hWaveIn,@whIn2,SizeOf(TWaveHdr)); waveInClose(hWaveIn); end; //播放录音 procedureTForm1.Button3Click(Sender:TObject); begin whOut.lpData:=PAnsiChar(SaveBuf); whOut.dwBufferLength:=Length(SaveBuf); whOut.dwBytesRecorded:=0; whOut.dwUser:=0; whOut.dwFlags:=0; whOut.dwLoops:=1; whOut.lpNext:=nil; whOut.reserved:=0; waveOutOpen(@hWaveOut,WAVE_MAPPER,@fmt,Handle,0,CALLBACK_WINDOW); waveOutPrepareHeader(hWaveOut,@whOut,SizeOf(TWaveHdr)); waveOutWrite(hWaveOut,@whOut,SizeOf(TWaveHdr)); end; procedureTForm1.WndProc(varm:TMessage); var ordLen:Integer; begin inherited; casem.Msgof {处理录音消息} MM_WIM_OPEN:;{此消息只携带了设备句柄} MM_WIM_CLOSE:;{此消息只携带了设备句柄} MM_WIM_DATA:begin{此消息携带了设备句柄和WaveHdr指针(LParam)} {保存录制的数据} ordLen:=Length(SaveBuf); SetLength(SaveBuf,ordLen+PWaveHdr(m.LParam).dwBytesRecorded); CopyMemory(Ptr(DWORD(SaveBuf)+ordLen),PWaveHdr(m.LParam).lpData,PWaveHdr(m.LParam).dwBytesRecorded); {继续录制} waveInAddBuffer(hWaveIn,PWaveHdr(m.LParam),SizeOf(TWaveHdr)); end; {处理播放消息} MM_WOM_OPEN:;{此消息只携带了设备句柄} MM_WOM_CLOSE:;{此消息只携带了设备句柄} MM_WOM_DONE:begin{此消息携带了设备句柄和WaveHdr指针(LParam)} waveOutUnprepareHeader(hWaveOut,PWaveHdr(m.LParam),SizeOf(TWaveHdr)); waveOutClose(hWaveOut); end; end; end; end.

希望本文所述对大家的Delphi程序设计有所帮助。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Delphi学习
    热门Delphi学习
    编程开发子分类