ตัวอย่างในบทความนี้อธิบายวิธีการสร้างไฟล์ wav ใน Delphi แบ่งปันกับทุกคนสำหรับการอ้างอิงของคุณ รายละเอียดมีดังนี้:
ที่นี่ delphi ใช้ฟังก์ชัน waveIn... เพื่อสร้างไฟล์ wav
รหัสเฉพาะมีดังนี้:
//ใช้หน้าต่างเพื่อรับข้อความจากอุปกรณ์เสียง: หน่วย Unit1; อินเทอร์เฟซใช้ Windows, ข้อความ, SysUtils, ตัวแปร, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม, กล่องโต้ตอบ, ประเภท StdCtrls; : TButton ; Button3: TButton; ขั้นตอน FormCreate (ผู้ส่ง: TObject); Button2Click (ผู้ส่ง: TObject); ขั้นตอน Button3Click (ผู้ส่ง: TObject); ที่อยู่: TWaveHdr; hWaveIn, hWaveOut: HWAVE; buf1,buf2,SaveBuf: TBytes; ขั้นตอน TForm1.FormCreate (ผู้ส่ง: TObject); ; //เริ่มขั้นตอนการบันทึก TForm1.Button1Click(Sender: TObject); เริ่มต้น {ระบุรูปแบบที่จะบันทึก} fmt.wFormatTag := WAVE_FORMAT_PCM; fmt.nBlockAlign := 4; fmt.nSamplesPerSec := 16; SaveBuf := nil; {ล้างเนื้อหาที่บันทึกไว้} ถ้า waveInOpen(@hWaveIn, WAVE_MAPPER, @fmt, Handle, 0, CALLBACK_WINDOW) = 0 จากนั้นให้เริ่ม SetLength(buf1, 1024*8); .lpData := PAnsiChar(buf1); whIn1.dwBufferLength := ความยาว (buf1); whIn1.dwBytesRecorded := 0; whIn1.dwUser := 0; whIn1.dwFlags := 0; 0; whIn2.lpData := PAnsiChar(buf2); whIn2.dwBufferLength := ความยาว (buf2); whIn2.dwBytesRecorded := 0; whIn2.dwUser := 0; whIn2.reserved := 0; waveInPrepareHeader(hWaveIn, @whIn1, SizeOf(TWaveHdr)); waveInPrepareHeader(hWaveIn, @whIn2, SizeOf(TWaveHdr)); waveInAddBuffer(hWaveIn, @whIn1, SizeOf(TWaveHdr)); ); waveInStart (hWaveIn); end; // หยุดขั้นตอนการบันทึก TForm1.Button2Click (ผู้ส่ง: TObject); waveInUnprepareHeader (hWaveIn, @whIn1, SizeOf (TWaveHdr)); (TWaveHdr)); waveInClose (hWaveIn); // เล่นขั้นตอนการบันทึก TForm1.Button3Click (ผู้ส่ง: TObject); เริ่ม whOut.lpData := whOut.dwBufferLength := ความยาว (SaveBuf); .dwUser := 0; whOut.dwFlags := 0; whOut.dwLoops := 1; whOut.lpNext := ไม่มี; ; waveOutWrite(hWaveOut, @whOut, SizeOf(TWaveHdr)); สิ้นสุด; ขั้นตอน TForm1.WndProc(var m: TMessage); var ordLen: Integer; : ; {ข้อความนี้มีเฉพาะที่จับอุปกรณ์เท่านั้น} MM_WIM_DATA: เริ่มต้น {ข้อความนี้มีตัวจัดการอุปกรณ์และตัวชี้ WaveHdr (LParam)} {บันทึกข้อมูลที่บันทึกไว้} ordLen := ความยาว(SaveBuf); SetLength(SaveBuf, ordLen + PWaveHdr(m.LParam).dwBytesRecorded); SaveBuf)+ordLen) PWaveHdr(m.LParam).lpData, PWaveHdr(m.LParam).dwBytesRecorded); {บันทึกต่อ} waveInAddBuffer(hWaveIn, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); {ข้อความนี้มีเฉพาะที่จับอุปกรณ์เท่านั้น} MM_WOM_CLOSE: ; {ข้อความนี้มีตัวจัดการอุปกรณ์เท่านั้น} MM_WOM_DONE: start {ข้อความนี้มีตัวจัดการอุปกรณ์และตัวชี้ WaveHdr (LParam)} waveOutUnprepareHeader(hWaveOut, PWaveHdr(m.LParam), SizeOf(TWaveHdr)); สิ้นสุด; สิ้นสุด;
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Delphi ของทุกคน