كيفية إنشاء برنامج تسجيل باستخدام دلفي
تشن جينجتاو
تعد Delphi أداة برمجة مرئية ممتازة من InPRise (المعروفة سابقًا باسم Borland). يعد التحكم المدمج في مشغل الوسائط أداة قوية لتطوير الوسائط المتعددة. باستخدامه، يمكنك إنشاء برنامج يمكنه تشغيل ملفات الوسائط المتعددة مثل Jieba في بضع دقائق فقط. لكن قلة من الناس قد يعرفون أنه يمكنك أيضًا استخدامه لإنشاء برنامج تسجيل.
قم بتشغيل Delphi واسحب عنصر تحكم Mediaplayer الموجود على صفحة النظام إلى النموذج. الاسم الافتراضي هو Mediaplayer1. بما أن برنامجنا يستخدم الزر الخاص به، قم بتعيين الخاصية Visible لـ Mediaplayer1 إلى False واحتفظ بالخصائص الأخرى بقيمها الافتراضية. ضع زرين آخرين، Button1 و Button2. تم تغيير اسم سمة Button1 إلى BtStart، وتم تغيير التسمية التوضيحية إلى "بدء التسجيل"، وتم تغيير اسم سمة Button2 إلى BtStop، وتم تغيير التسمية التوضيحية إلى "إيقاف التسجيل"، وتم تغيير السمة Enabled إلى False. ثم قم بتبديل النافذة إلى نافذة التعليمات البرمجية وابدأ في كتابة التعليمات البرمجية.
في البرنامج، نحدد تنسيق رأس الملف لملف Wav. عند التسجيل، نقوم أولاً بإنشاء ملف Wav برأس الملف فقط، ثم نكتب الصوت المسجل بواسطة Mediaplayer1 في الملف. معاني العديد من المعلمات في عملية CreateWav هي كما يلي: تمثل القنوات الأولى قناة الصوت، وعندما يتم التقاط 1، فإنها تمثل أحادية، وعندما يتم التقاط 2، فإنها تمثل ستيريو. تحتوي الدقة أيضًا على قيمتين فقط للاختيار من بينها. عند تحديد 8، فإنه يمثل صوت 8 بت. وعندما يتم تحديد 16، فإنه يمثل صوت 16 بت، مثل 11025، 22050، 44100. كلما كانت القيمة أكبر، كان الصوت أكثر وضوحًا، وبالطبع كلما زاد حجم الملف المسجل. تمثل المعلمة الأخيرة اسم الملف المقابل. لذلك يمكن أن يكون لدى CreateWav النموذج التالي:
CreateWav(1,8,11025,'C:/abc.wav');// أنشئ ملف Wav أحادي 8 بت باسم abc.wav بتردد 11025 في الدليل الجذر لمحرك الأقراص C
CreateWav(2,16,44100,'C:/abc.wav');// أنشئ ملف Wav باسم abc.wav بتردد قناة استريو 16 بت يبلغ 44100 في الدليل الجذر لمحرك الأقراص C
Netbus، وهو برنامج أجنبي معروف للتحكم عن بعد مكتوب بلغة دلفي، لديه وظيفة مراقبة الصوت، والتي تتم كتابتها باستخدام الطريقة الموضحة في هذه المقالة. يقوم أولاً بتسجيل صوت الطرف الآخر ثم يعيد إرساله لتحقيق غرض مراقبة الطرف الآخر. بالطبع، الفرضية هي أنه يجب أن يكون لدى الطرف الآخر ميكروفون مثبت، وإلا سيتم مراقبة الصوت الذي يتم تشغيله بواسطة الطرف الآخر (على سبيل المثال، افتح Jieba أو Readplay وقم بتشغيل هذا البرنامج لتسجيل الصوت الذي يتم تشغيله).
في الواقع، تطورت تكنولوجيا نقل الصوت عبر الشبكة الحالية إلى مرحلة معينة، كما بدأت أجهزة الاتصال الداخلي الصوتية وهواتف IP في النضج. ومع ذلك، فهم يستخدمون تنسيق VOX أو تنسيق ACM. يمكن تنزيل الرموز المحددة من صفحتي الرئيسية http://Lovejingtao.126.com. ولكن إذا لم تكن على دراية بتنسيقات VOX أو ACM، فيمكنك أيضًا استخدام الطريقة المذكورة في هذه المقالة لإنشاء "المسجل" الخاص بك. أما بالنسبة لكيفية استدعاء avifil32.dll الذي يأتي مع نظام تشغيل الفيديو عبر الإنترنت، فسوف أتواصل معك عندما تتاح لي الفرصة.
تم تمرير هذا البرنامج تحت Pwin98 + Delphi5.
الوحدة 1؛
واجهة
الاستخدامات
Windows، الرسائل، SysUtils، الفئات، الرسومات، عناصر التحكم، النماذج، مربعات الحوار،
ستدكترلس، إمبلاير؛
يكتب
TWavHeader = سجل // تحديد تنسيق رأس ملف Wav
المعرف: لونجينت؛
rLen : لونجينت؛
معرف المرأة: لونجينت؛
معرف الهوية: لونجينت؛
لين : لونجينت؛
wFormatTag: كلمة؛
القنوات: كلمة؛
nSamplesPerSec : longint;
nAvgBytesPerSec : longint;
nBlockAlign: كلمة؛
wBitsPerSample: كلمة؛
معرف الهوية: لونجينت؛
طول العينة: لونجينت؛
نهاية؛
TForm1 = الفئة (TForm)
ميديا بلاير 1: تي ميديا بلاير؛
بت ستارت: تي بوتون؛
بت ستوب: تي بوتون؛
إجراء CreateWav (القنوات: كلمة؛ الدقة: كلمة؛ المعدل: longint؛ fn: سلسلة)؛// تخصيص عملية كتابة رأس ملف Wav
الإجراء BtStartClick(Sender: TObject);
الإجراء BtStopClick(Sender: TObject);
خاص
{تصريحات خاصة}
عام
{التصريحات العامة}
نهاية؛
فار
Form1: TForm1؛
تطبيق
{$R *.DFM}
الإجراء TForm1.CreateWav (القنوات: كلمة؛ {1 (أحادية) أو 2 (ستيريو)}
الدقة: كلمة {8 أو 16، تمثل صوت 8 بت أو 16 بت}
المعدل: الطولي {تردد الصوت، مثل 11025، 22050، 44100}
fn: سلسلة {اسم الملف المقابل})؛
فار
wf: ملف TWavHeader؛
wh : TWavHeader؛
يبدأ
wh.rId := 46464952 دولار؛
wh.rLen := 36;
wh.wId := 45564157 دولارًا أمريكيًا؛
wh.fId := $20746d66;
wh.fLen := 16;
wh.wFormatTag := 1;
wh.nChannels :=channels;
wh.nSamplesPerSec := معدل؛
wh.nAvgBytesPerSec := القنوات*المعدل*(الدقة شعبة 8);
wh.nBlockAlign :=channels*(resolution div 8);
wh.wBitsPerSample := الدقة؛
wh.dId := 61746164 دولارًا أمريكيًا؛
wh.wSampleLength := 0;
تعيين ملف (wf، fn)؛ {افتح الملف المقابل}؛
rewrite(wf); {حرك المؤشر إلى بداية الملف}
write(wf,wh); {الكتابة في رأس الملف}
ملف مغلق(wf);
نهاية؛
الإجراء TForm1.BtStartClick(Sender: TObject);
يبدأ
يحاول
// أنشئ ملف Wav Temp.wav في الدليل الحالي للبرنامج
CreateWav(1, 8, 11025, (ExtractFilePath(application.ExeName)+ 'Temp.wav'));
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.FileName := (ExtractFilePath(Application.ExeName)+ 'Temp.wav');
MediaPlayer1.Open;
MediaPlayer1.StartRecording;
BtStart.Enabled:=false;
BtStop.Enabled:=true;
يستثني
BtStart.Enabled:=True;
BtStop.Enabled:=false;
Application.MessageBox('فشلت تهيئة جهاز الوسائط!','خطأ',MB_ICONERROR+MB_OK);
نهاية؛
نهاية؛
الإجراء TForm1.BtStopClick(Sender: TObject);
يبدأ
يحاول
MediaPlayer1.Stop;
MediaPlayer1.Save;
MediaPlayer1.Close;
Application.MessageBox('اكتمل التسجيل الصوتي!','Message',MB_ICONINFORMATION+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
يستثني
Application.MessageBox('خطأ في حفظ ملف الصوت!','Error',MB_ICONERROR+MB_OK);
BtStart.Enabled:=True;
BtStop.Enabled:=false;
نهاية؛
نهاية؛
نهاية.
ملحق: 1. عند تشغيل الملف المسجل، قد تحتاج إلى زيادة قيمة Wav لسمة الصوت.
2. في حالة تثبيت بعض برامج تشغيل الصوت الأخرى على النظام، قد يكون حجم ملف Wav المسجل صفرًا، ولكن سيتم إنشاء ملف ينتهي بـ TMP في نفس الوقت، وتغيير امتداده إلى Wav هو ملف الصوت المسجل. ولكن هذا نادرا ما يحدث. (الفرصة صفر تقريبا ^-^)
3. يمكن لهذا البرنامج تمرير التسجيل الصوتي أثناء تشغيل Jieba وReplayer.