توافر الألعاب على pygame

مرحبا بالجميع.

في المقالة ألعاب الصوت: سوق غير مرئي ينتظر الأبطال ، تم فحص الألعاب الصوتية ذات الصوت المحيطي الرائع والمكتبات لإنشائها.

حسنًا ، قررت أن أبدأ صغيرًا ، وبالنسبة للمبتدئين ، قم بتنظيم درجات أخصائي المزج في الألعاب التي تعتمد على الأدوار في لعبة 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 ().

آمل أن تكون هذه المقالة مفيدة لشخص ما وستظهر المزيد من الألعاب المتاحة.

Source: https://habr.com/ru/post/ar424477/


All Articles