مرحبا بالجميع.
في المقالة ألعاب الصوت: سوق غير مرئي ينتظر الأبطال ، تم فحص الألعاب الصوتية ذات الصوت المحيطي الرائع والمكتبات لإنشائها.
حسنًا ، قررت أن أبدأ صغيرًا ، وبالنسبة للمبتدئين ، قم بتنظيم درجات أخصائي المزج في الألعاب التي تعتمد على الأدوار في لعبة pygame.
بالطبع ، هذه التقنية ليست مناسبة لجميع الألعاب ، ولكن في بعض الألعاب.
إنشاء وحدة الكلام.
سننظم خيارين للعمل فيه:
- اتصل بـ NVDA Narrator عبر أداة التحكم dll
- مباشرة إلى مركب النوافذ من خلال SAPI5 ؛
أولا نقوم باستيراد جميع الوحدات اللازمة.
لربط nvdaControllerClient32.dll ، نحتاج إلى أنواع.
import ctypes
وفي حالة عدم وجود NVDA على الكمبيوتر ، فإننا نعمل مباشرة مع مركب SAPI من خلال win32api.
import win32com.client
نقوم بإنشاء فصل دراسي لحديثنا.
class Speech: def __init__(self, config): """Initialize speech class.""" self.config = config
هنا ربما تحتاج إلى شرح التكوين. في لعبة Class العامة ، المسؤولة عن تهيئة جميع وحدات اللعبة وتحريف الحلقة الرئيسية ، يتم تحميل إعدادات اللعبة.
يمكن تحميل الإعدادات من المكان الذي تكون فيه أكثر ملاءمة: ملفات ini أو json أو sqlite أو أي خيار مناسب آخر.
لكن دعنا نواصل تهيئة خطابنا.
# COM . self.speaker = win32com.client.Dispatch("Sapi.SpVoice") # self.voices = self.speaker.GetVoices() # self.voices_names = [voice.GetDescription() for voice in self.voices]
قم بتكوين المزج المتصل ببعض المعلمات من الإعدادات.
في هذا المثال ، أقوم فقط بفهرسة الصوت المثبت (الصوت الافتراضي يحتوي على فهرس 0) ، ولكن يمكنك ضبط الإعدادات باختيار من القائمة المنسدلة بالاسم ، التي تم الحصول عليها كما هو موضح أعلاه.
يتم تعيين سرعة الصوت في النطاق من -10 إلى +10. ولكن لا أعتقد أن شخصًا ما يريد الاستماع إلى صوت بسرعة أقل من 5. يمكنك تجربة نفسك بتغيير القيمة في الإعدادات.
وبالطبع حجم الصوت. هنا قياسي من 0 إلى 100.
self.set_voice(self.config.voice) self.speaker.Rate = self.config.rate self.speaker.Volume = self.config.volume
أخيرًا ، قم بتهيئة nvda.
self.nvda = self.config.nvda self.nvda_error = False self.sLib = ctypes.windll.LoadLibrary('./nvdaControllerClient32.dll')
تحقق فورًا مما إذا كان برنامجنا يمكنه الاتصال ببرنامج NVDA قيد التشغيل.
nvda_error = self.sLib.nvdaController_testIfRunning() errorMessage = str(ctypes.WinError(nvda_error)) if 0 != nvda_error: print('NVDA error: ' + errorMessage) self.nvda_error = True
بعد أن تقوم بتهيئة كل من مُركِّب SAPI و nvda dll ، يمكنك بدء وظيفة تحديد إخراج الصوت للكلام.
self.set_speak_out()
أضف الوظيفة لضبط الصوت من القائمة المتاحة حسب الفهرس.
def set_voice(self, index): """Set voice for speak.""" try: self.speaker.Voice = self.voices[index] self.speak_sapi(self.voices_names[index]) except: print('error: do not set voice')
والآن وظيفة لتحديد الكلام إخراج الصوت. هنا نختار بالفعل ما سنستخدمه للعمل: nvda أو مركب مباشرة.
يتكون الاختيار من معلمتين:
- العلم هو في الإعدادات ما إذا كان المستخدم يريد اللعبة حتى لاستخدام NVDA ؛
- الأخطاء المحتملة عند الاتصال بـ NVDA ؛
def set_speak_out(self): """Set speak out: nvda or sapi.""" if self.nvda and not self.nvda_error: self.speak = self.speak_nvda else: self.speak = self.speak_sapi
وبالطبع سنكتب وظائف النطق.
بالنسبة لـ NVDA:
def speak_nvda(self, phrase): self.sLib.nvdaController_speakText(phrase)
وهذه هي وظيفة النطق مباشرة إلى المُركِّب:
def speak_sapi(self, phrase): self.speaker.Speak(phrase)
هذا كل شيء. الآن ، في أي مكان في منطق اللعبة ، نرسل المعلومات الضرورية إلى voice.speak ().
آمل أن تكون هذه المقالة مفيدة لشخص ما وستظهر المزيد من الألعاب المتاحة.