亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

delphi制作wav文件的方法

 更新時(shí)間:2015年06月16日 09:37:50   作者:小卒過河  
這篇文章主要介紹了delphi制作wav文件的方法,涉及Delphi操作多媒體文件的相關(guān)技巧,需要的朋友可以參考下

本文實(shí)例講述了delphi制作wav文件的方法。分享給大家供大家參考。具體如下:

這里delphi用waveIn...函數(shù)制作wav文件

具體代碼如下:

//使用窗口接受音頻設(shè)備發(fā)出的消息:
unit Unit1; 
interface 
uses 
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
 Dialogs, StdCtrls; 
type 
 TForm1 = class(TForm) 
  Button1: TButton; 
  Button2: TButton; 
  Button3: TButton; 
  procedure FormCreate(Sender: TObject); 
  procedure Button1Click(Sender: TObject); 
  procedure Button2Click(Sender: TObject); 
  procedure Button3Click(Sender: TObject); 
 protected 
  procedure WndProc(var m: TMessage); override; 
 end; 
var 
 Form1: TForm1; 
implementation 
{$R *.dfm}  
uses MMSystem; 
var 
 whIn1,whIn2, whOut: TWaveHdr; 
 hWaveIn,hWaveOut: HWAVE; 
 fmt: TWaveFormatEx; 
 buf1,buf2,SaveBuf: TBytes; 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
 Button1.Caption := '開始錄音'; 
 Button2.Caption := '停止錄音'; 
 Button3.Caption := '播放錄音'; 
end; 
//開始錄音 
procedure TForm1.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; {清除已錄制的內(nèi)容} 
 if waveInOpen(@hWaveIn, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW) = 0 then 
 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; 
//停止錄音 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
 waveInStop(hWaveIn); 
 waveInUnprepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); 
 waveInUnprepareHeader(hWaveIn, @whIn2, SizeOf(TWaveHdr)); 
 waveInClose(hWaveIn); 
end; 
//播放錄音 
procedure TForm1.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; 
procedure TForm1.WndProc(var m: TMessage); 
var 
 ordLen: Integer; 
begin 
 inherited; 
 case m.Msg of 
  {處理錄音消息} 
  MM_WIM_OPEN: ;   {此消息只攜帶了設(shè)備句柄} 
  MM_WIM_CLOSE: ;  {此消息只攜帶了設(shè)備句柄} 
  MM_WIM_DATA: begin {此消息攜帶了設(shè)備句柄和 WaveHdr 指針(LParam)}
   {保存錄制的數(shù)據(jù)} 
   ordLen := Length(SaveBuf); 
   SetLength(SaveBuf, ordLen + PWaveHdr(m.LParam).dwBytesRecorded); 
   CopyMemory(Ptr(DWORD(SaveBuf)+ordLen), PWaveHdr(m.LParam).lpData, PWaveHdr(m.LParam).dwBytesRecorded); 
   {繼續(xù)錄制} 
   waveInAddBuffer(hWaveIn, PWaveHdr(m.LParam), SizeOf(TWaveHdr));
  end;
  {處理播放消息} 
  MM_WOM_OPEN: ;   {此消息只攜帶了設(shè)備句柄} 
  MM_WOM_CLOSE: ;  {此消息只攜帶了設(shè)備句柄} 
  MM_WOM_DONE: begin {此消息攜帶了設(shè)備句柄和 WaveHdr 指針(LParam)}
   waveOutUnprepareHeader(hWaveOut, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); 
   waveOutClose(hWaveOut); 
  end; 
 end; 
end; 
end.

希望本文所述對(duì)大家的Delphi程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 完美解決Indy 編譯提示版本不一致的問題

    完美解決Indy 編譯提示版本不一致的問題

    今天小編就為大家分享一篇完美解決Indy 編譯提示版本不一致的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • delphi 正弦曲線圖

    delphi 正弦曲線圖

     在Delphi中沒有直接正弦曲線的函數(shù)。但是在科學(xué)研究中,正弦曲線的應(yīng)用是非常廣泛的,本實(shí)例介紹如何繪制正弦曲線。
    2008-03-03
  • Delphi實(shí)現(xiàn)碰撞球體完整實(shí)例代碼

    Delphi實(shí)現(xiàn)碰撞球體完整實(shí)例代碼

    這篇文章主要介紹了Delphi實(shí)現(xiàn)碰撞球體完整實(shí)例代碼,通過該實(shí)例,讀者可以完整的了解一個(gè)Delphi項(xiàng)目的創(chuàng)建過程,加深對(duì)Delphi運(yùn)行原理的了解,需要的朋友可以參考下
    2014-07-07
  • Delphi中對(duì)時(shí)間操作方法匯總

    Delphi中對(duì)時(shí)間操作方法匯總

    這篇文章主要介紹了Delphi中對(duì)時(shí)間操作方法匯總,可以對(duì)Delphi的時(shí)間操作有一個(gè)更加深入的了解,需要的朋友可以參考下
    2014-07-07
  • TImage組件實(shí)現(xiàn)保存圖片到Stream

    TImage組件實(shí)現(xiàn)保存圖片到Stream

    這篇文章主要介紹了TImage組件實(shí)現(xiàn)保存圖片到Stream以及從stream中讀取圖片的方法,非常的實(shí)用,有需要的小伙伴可以參考下
    2016-05-05
  • delphi 字符串處理中的怪異現(xiàn)象與處理方式

    delphi 字符串處理中的怪異現(xiàn)象與處理方式

    今天小編就為大家分享一篇delphi 字符串處理中的怪異現(xiàn)象與處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • delphi實(shí)現(xiàn)保存和讀取圖片的方法

    delphi實(shí)現(xiàn)保存和讀取圖片的方法

    這篇文章主要介紹了delphi實(shí)現(xiàn)保存和讀取圖片的方法,主要包括了顯示圖片、保存圖片和讀取圖片的實(shí)現(xiàn)方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • Delphi 調(diào)用外部程序并阻塞到外部程序中

    Delphi 調(diào)用外部程序并阻塞到外部程序中

    這篇文章主要介紹了Delphi 調(diào)用外部程序并阻塞到外部程序中的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 修改 Delphi 10.3.3 IDE 字體和字體大小

    修改 Delphi 10.3.3 IDE 字體和字體大小

    Delphi,是Windows平臺(tái)下著名的快速應(yīng)用程序開發(fā)工具(Rapid Application Development,簡稱RAD)。這篇文章主要介紹了修改 Delphi 10.3.3 IDE 字體和字體大小,需要的朋友可以參考下
    2019-11-11
  • Delphi下OpenGL2d繪圖之畫四邊形的方法

    Delphi下OpenGL2d繪圖之畫四邊形的方法

    這篇文章主要介紹了Delphi下OpenGL2d繪圖之畫四邊形的方法,需要的朋友可以參考下
    2014-07-07

最新評(píng)論