الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كتم الصوت برمجياً

بدأه الحلفاوي في 26 فبراير 2012 · 4 رد · 683 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي برنامج للتنبيه الكترونياً يكون الحاسب متصلا بجهاز مكبر صوت ومنه الى اماكن التنبيه ولكن بالخطا قد يتم استخدام الحاسوب وتشغيل اي ملف صوتي قد يحدث ارباكا

فكيف اجعل الحاسوب في وضعية كتم الصوت (وتعهد الكتم داخل تايمر وهو مقدور عليه اذا تمكنت من الكتم ابتداءاً) على ان يتم تشغيل الصوت قبيل التنبيه بثواني

بالغ الثناء لكم

#2

السلام عليكم...

الإجراءان التاليان كنت قد كتبتهما منذ مدة بعيدة ضمن وحدة برمجية (Unit) عامة أستعملها في معظم برامجي. يجب أن تضيف الوحدة MMSystem إلى عبارة uses في برنامجك.

لاحظ أن الإجرائين يمكنهما التعامل مع كل جانب (كل مكبر صوت) على حدة (إذا كان الجهاز يدعم ذلك).

* إجراء للحصول على مستوى الصوت:

procedure GetSoundVolume(var BothSidesVolume: DWORD; var LeftSideVolume, RightSideVolume: Word);
begin
    waveOutGetVolume(0, @BothSidesVolume);
    LeftSideVolume := BothSidesVolume and $0000FFFF;
    RightSideVolume := ((BothSidesVolume and $FFFF0000) div $00010000) and $0000FFFF;
end;

* إجراء لضبط حجم الصوت

procedure SetSoundVolume(LeftSideVolume, RightSideVolume: Word);
var
    BothSidesVolume: DWORD;
begin
    BothSidesVolume := LeftSideVolume + (RightSideVolume * $00010000);
    waveOutSetVolume(0, BothSidesVolume);
end;

حجم الصوت لكل جانب يتراوح بين القيمة 0000$ التي تعني الصمت، و القيمة FFFF$ التي تعني الحجم الكامل للصوت.

* الدالة waveOutSetVolume المستخدمة هنا في ضبط الصوت لا علاقة لها بزر ضبط الصوت التابع للنظام Windows (الموجود بجانب الساعة).

إذا كنت تريد - بعد كتم الصوت - استعادته إلى حجمه السابق فيجب حفظ القيم الحالية - قبل الكتم - في متغيرات عامة:

var
    ALVolume, ARVolume: Word;
    AVolume: DWORD;
//...
//...
implementation
//...
// عند إنشاء النافذة أو ضمن زر
GetSoundVolume(AVolume, ALVolume, ARVolume);
//...
// لكتم الصوت
SetSoundVolume(0, 0);
//...
// لاستعادة الصوت إلى ما كان عليه
SetSoundVolume(ALVolume, ARVolume);

* إذا كنت تريد استعادة الصوت إلى حجم معروف لديك فلست في حاجة إلى استدعاء الإجراء GetSoundVolume و لا المتغيرات الخارجية.

* فكرة أخرى أيضاً أن تستعمل Scroll Bar أو Slider لتحديد حجم الصوت المناسب لبرنامجك، و الذي يمكنك بعد ذلك استعماله عند استعادة الصوت.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3
najy_zl كتب:

* الدالة waveOutSetVolume المستخدمة هنا في ضبط الصوت لا علاقة لها بزر ضبط الصوت التابع للنظام Windows (الموجود بجانب الساعة).

.

وعليكم السلام ..................... اشكرك اخي ناجي على هذه الوحدة البرمجية الدسمة

عذراً على عدم وضوح السؤال ربما ... اريد ان لا يكون هنالك اي خرج صوتي من الحاسوب لا من البرنامج ولا من برامج تشغيل وسائط اخرى

وكأني بعبارة اخرى سالت عن تعطيل مقبس اخراج الصوت للسماعات الخارجية

جوزيتم

#4

السلام عليكم...

حسب تجربة الكود على جهازي فإن استدعاء كود كتم الصوت السابق يعمل على كتم الصوت حتى في برامج أخرى (جربته مع Windows MediaPlayer).

سلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#5
najy_zl كتب:

السلام عليكم...

حسب تجربة الكود على جهازي فإن استدعاء كود كتم الصوت السابق يعمل على كتم الصوت حتى في برامج أخرى (جربته مع Windows MediaPlayer).

سلام.

وعليكم السلام

بارك الله فيك اخي ناجي ونفع الله بك عباده وشكر

مواضيع مشابهة