วิธีสร้างโปรแกรมบันทึกด้วย Delphi
เฉินจิงเทา
Delphi เป็นเครื่องมือการเขียนโปรแกรมภาพที่ยอดเยี่ยมจาก InPRise (เดิมชื่อ Borland) การควบคุม Mediaplayer ในตัวเป็นเครื่องมือที่ทรงพลังสำหรับการพัฒนามัลติมีเดีย คุณสามารถใช้งานได้เพียงไม่กี่นาทีเพื่อสร้างโปรแกรมที่สามารถเล่นไฟล์มัลติมีเดียอย่าง Jieba ได้ แต่น้อยคนนักที่จะรู้ว่าคุณสามารถใช้มันเพื่อสร้างโปรแกรมบันทึกเสียงได้
เรียกใช้ Delphi และลากตัวควบคุม Mediaplayer บนเพจ System ไปยังแบบฟอร์ม ชื่อเริ่มต้นคือ Mediaplayer1 เนื่องจากโปรแกรมของเราใช้ปุ่มของตัวเอง ให้ตั้งค่าคุณสมบัติ Visible ของ Mediaplayer1 เป็น False และคงคุณสมบัติอื่นๆ ไว้เป็นค่าเริ่มต้น วางปุ่มอีกสองปุ่ม Button1 และ Button2 ชื่อแอตทริบิวต์ของ Button1 ถูกเปลี่ยนเป็น BtStart คำบรรยายถูกเปลี่ยนเป็น "เริ่มการบันทึก" ชื่อแอตทริบิวต์ของ Button2 ถูกเปลี่ยนเป็น BtStop คำบรรยายถูกเปลี่ยนเป็น "หยุดการบันทึก" และแอตทริบิวต์ที่เปิดใช้งานถูกเปลี่ยนเป็นเท็จ จากนั้นสลับหน้าต่างเป็นหน้าต่างโค้ดและเริ่มเขียนโค้ด
ในโปรแกรม เราจะกำหนดรูปแบบส่วนหัวของไฟล์ Wav เมื่อบันทึก เราจะสร้างไฟล์ Wav โดยมีเพียงส่วนหัวของไฟล์ จากนั้นจึงเขียนเสียงที่บันทึกโดย Mediaplayer1 ลงในไฟล์ ความหมายของพารามิเตอร์ต่างๆ ในกระบวนการ CreateWav มีดังนี้ ช่องแรกแสดงถึงช่องเสียง เมื่อรับ 1 หมายถึงโมโน และเมื่อรับ 2 หมายถึงสเตอริโอ ความละเอียดก็มีให้เลือกแค่ 2 ค่าเท่านั้น เมื่อเลือก 8 จะแสดงค่าเสียง 8 บิต เมื่อเลือก 16 จะแสดงค่าความถี่เสียง 16 บิต ยิ่งค่ามากขึ้น เสียงก็จะยิ่งชัดเจน และแน่นอน ไฟล์ที่บันทึกก็จะยิ่งใหญ่ขึ้นด้วย พารามิเตอร์สุดท้ายแสดงถึงชื่อไฟล์ที่เกี่ยวข้อง ดังนั้น CreateWav จึงสามารถมีรูปแบบดังต่อไปนี้:
CreateWav(1,8,11025,'C:/abc.wav');//สร้างไฟล์ mono Wav 8 บิตชื่อ abc.wav ด้วยความถี่ 11025 ในไดเร็กทอรีรากของไดรฟ์ C
CreateWav(2,16,44100,'C:/abc.wav');//สร้างไฟล์ Wav ชื่อ abc.wav ด้วยความถี่ช่องสัญญาณสเตอริโอ 16 บิตที่ 44100 ในไดเร็กทอรีรากของไดรฟ์ C
Netbus ซึ่งเป็นซอฟต์แวร์ควบคุมระยะไกลต่างประเทศที่รู้จักกันดีซึ่งเขียนด้วย Delphi มีฟังก์ชั่นตรวจสอบเสียงซึ่งเขียนโดยใช้วิธีการของบทความนี้ ขั้นแรกจะบันทึกเสียงของอีกฝ่ายแล้วส่งกลับมาเพื่อให้บรรลุวัตถุประสงค์ในการติดตามอีกฝ่าย แน่นอนว่าอีกฝ่ายจะต้องติดตั้งไมโครโฟน ไม่เช่นนั้นเสียงที่เล่นโดยอีกฝ่ายจะถูกตรวจสอบ (เช่น เปิด Jieba หรือ Readplay แล้วรันโปรแกรมนี้เพื่อบันทึกเสียงที่เล่น)
ในความเป็นจริง เทคโนโลยีการส่งผ่านเสียงผ่านเครือข่ายในปัจจุบันได้พัฒนามาถึงระดับหนึ่งแล้ว และเสียงอินเตอร์คอมและโทรศัพท์ IP ก็เริ่มเติบโตเช่นกัน อย่างไรก็ตาม พวกเขาใช้รูปแบบ VOX หรือรูปแบบ ACM สามารถดาวน์โหลดรหัสเฉพาะได้จากหน้าแรกของฉัน http://Lovejingtao.126.com แต่ถ้าคุณไม่คุ้นเคยกับรูปแบบ VOX หรือ ACM คุณสามารถใช้วิธีการในบทความนี้เพื่อสร้าง "เครื่องบันทึก" ของคุณเองได้ ส่วนวิธีการเรียก avifil32.dll ที่มาพร้อมกับระบบเล่นวีดีโอออนไลน์นั้นผมจะติดต่อกลับไปเมื่อมีโอกาสครับ
โปรแกรมนี้ผ่านภายใต้ Pwin98+Delphi5
หน่วย หน่วยที่ 1;
อินเตอร์เฟซ
การใช้งาน
Windows, ข้อความ, SysUtils, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม, กล่องโต้ตอบ,
StdCtrls, MPlayer;
พิมพ์
TWavHeader = บันทึก // กำหนดรูปแบบส่วนหัวของไฟล์ Wav
rId: longint;
rLen : ลองจินต์;
wid: ยาว;
fId: ยาว;
fLen : ลองจินต์;
wFormatTag : Word;
nChannels : คำ;
nSamplesPerSec : ยาว;
nAvgBytesPerSec : ยาว;
nBlockAlign: คำ;
wBitsPerSample: คำ;
ไม่ได้: longint;
wSampleLength : ยาว;
จบ;
TForm1 = คลาส (TForm)
MediaPlayer1: TMediaPlayer;
BtStart: TButton;
BtStop: TButton;
ขั้นตอน CreateWav(channel : word; Resolution : word; rate : longint; fn : string);//ปรับแต่งกระบวนการเขียนส่วนหัวของไฟล์ Wav
ขั้นตอน BtStartClick (ผู้ส่ง: TObject);
ขั้นตอน BtStopClick (ผู้ส่ง: TObject);
ส่วนตัว
{ประกาศส่วนตัว}
สาธารณะ
{ประกาศสาธารณะ}
จบ;
var
แบบฟอร์ม 1: TForm1;
การดำเนินการ
{$R *.DFM}
ขั้นตอน TForm1.CreateWav( ช่อง : word; { 1 (โมโน) หรือ 2 (สเตอริโอ) }
ความละเอียด : word; { 8 หรือ 16 แทนเสียง 8 บิตหรือ 16 บิต}
อัตรา: longint; {ความถี่เสียง เช่น 11025, 22050, 44100}
Fn: string {ชื่อไฟล์ที่สอดคล้องกัน});
var
wf: ไฟล์ของ TWavHeader;
wh : TWavHeader;
เริ่ม
wh.rId := $46464952;
wh.rLen := 36;
wh.wId := $45564157;
wh.fId := $20746d66;
wh.fLen := 16;
wh.wFormatTag := 1;
wh.nChannels := ช่อง;
wh.nSamplesPerSec := อัตรา;
wh.nAvgBytesPerSec := ช่อง * อัตรา * (ความละเอียด div 8);
wh.nBlockAlign := ช่อง*(ความละเอียด div 8);
wh.wBitsPerSample := ความละเอียด;
wh.dId := $61746164;
wh.wSampleLength := 0;
มอบหมายไฟล์ (wf, fn); {เปิดไฟล์ที่เกี่ยวข้อง}
เขียนใหม่ (wf); {ย้ายตัวชี้ไปที่จุดเริ่มต้นของไฟล์}
write(wf,wh); {เขียนลงในส่วนหัวของไฟล์}
closefile(wf); {ปิดไฟล์}
จบ;
ขั้นตอน TForm1.BtStartClick (ผู้ส่ง: TObject);
เริ่ม
พยายาม
//สร้างไฟล์ Wav Temp.wav ในไดเร็กทอรีปัจจุบันของโปรแกรม
CreateWav(1, 8, 11025, (ExtractFilePath(application.ExeName)+ 'Temp.wav'));
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.FileName := (ExtractFilePath(Application.ExeName)+ 'Temp.wav');
MediaPlayer1.เปิด;
MediaPlayer1.StartRecording;
BtStart.Enabled:=false;
BtStop.Enabled:=true;
ยกเว้น
BtStart.Enabled:=จริง;
BtStop.Enabled:=false;
Application.MessageBox('การเริ่มต้นอุปกรณ์สื่อล้มเหลว!','ข้อผิดพลาด',MB_ICONERROR+MB_OK);
จบ;
จบ;
ขั้นตอน TForm1.BtStopClick (ผู้ส่ง: TObject);
เริ่ม
พยายาม
MediaPlayer1.หยุด;
MediaPlayer1.บันทึก;
MediaPlayer1.ปิด;
Application.MessageBox('การบันทึกเสียงเสร็จสิ้น!','ข้อความ',MB_ICONINFORMATION+MB_OK);
BtStart.Enabled:=จริง;
BtStop.Enabled:=false;
ยกเว้น
Application.MessageBox('เกิดข้อผิดพลาดในการบันทึกไฟล์เสียง!','ผิดพลาด',MB_ICONERROR+MB_OK);
BtStart.Enabled:=จริง;
BtStop.Enabled:=false;
จบ;
จบ;
จบ.
ภาคผนวก: 1. เมื่อเล่นไฟล์ที่บันทึกไว้ คุณอาจต้องเพิ่มค่า Wav ของคุณลักษณะเสียง
2. หากมีการติดตั้งไดรเวอร์เสียงอื่นๆ ไว้ในระบบ ขนาดของไฟล์ Wav ที่บันทึกไว้อาจเป็นศูนย์ แต่ไฟล์ที่ลงท้ายด้วย TMP จะถูกสร้างขึ้นพร้อมกัน การเปลี่ยนนามสกุลเป็น Wav จะเป็นไฟล์เสียงที่บันทึกไว้ แต่สิ่งนี้ไม่ค่อยเกิดขึ้น (โอกาสเกือบเป็นศูนย์^-^)
3. โปรแกรมนี้สามารถผ่านการบันทึกเสียงในขณะที่รัน Jieba และ Replayer