Halo semuanya.
Dalam artikel Sound games: pasar yang tak terlihat menunggu para pahlawan , permainan suara dengan suara surround yang keren dan perpustakaan untuk pembuatannya diperiksa.
Yah, saya memutuskan untuk memulai dari yang kecil, dan sebagai permulaan, mengatur skor tindakan synthesizer dalam game berbasis giliran di pygame.
Tentu saja, teknik seperti itu tidak cocok untuk semua gim, tetapi dalam beberapa sangat.
Buat modul pidato.
Kami akan mengatur dua opsi kerja di dalamnya:
- Terhubung ke NVDA Narrator melalui Kontroler dll
- langsung ke windows synthesizer melalui SAPI5;
Pertama kita mengimpor semua modul yang diperlukan.
Untuk menghubungkan nvdaControllerClient32.dll, kita perlu ctypes.
import ctypes
Dan dengan tidak adanya NVDA di komputer, kami bekerja secara langsung dengan synthesizer SAPI melalui win32api.
import win32com.client
Kami membuat kelas untuk pembicaraan kami.
class Speech: def __init__(self, config): """Initialize speech class.""" self.config = config
Di sini Anda mungkin perlu menjelaskan tentang konfigurasi. Di Game kelas umum, yang bertanggung jawab untuk menginisialisasi semua modul game dan memutar loop utama, pengaturan game dimuat.
Pengaturan dapat diambil dari tempat yang lebih nyaman: file ini, json, sqlite, atau opsi praktis lainnya.
Tetapi mari kita lanjutkan inisialisasi Pidato kita.
# COM . self.speaker = win32com.client.Dispatch("Sapi.SpVoice") # self.voices = self.speaker.GetVoices() # self.voices_names = [voice.GetDescription() for voice in self.voices]
Konfigurasikan synthesizer yang terhubung dengan beberapa parameter dari pengaturan.
Dalam contoh ini, saya hanya mengambil indeks suara yang dipasang (defaultnya memiliki indeks 0), tetapi Anda dapat membuat pengaturan dengan pilihan dari daftar drop-down dengan nama, diperoleh seperti dijelaskan di atas.
Kecepatan suara diatur dalam kisaran dari -10 hingga +10. Tetapi saya tidak berpikir bahwa seseorang akan ingin mendengarkan suara dengan kecepatan di bawah 5. Anda dapat mencoba sendiri dengan mengubah nilai dalam pengaturan.
Dan tentu saja volume suaranya. Ini standar dari 0 hingga 100.
self.set_voice(self.config.voice) self.speaker.Rate = self.config.rate self.speaker.Volume = self.config.volume
Akhirnya, inisialisasi nvda.
self.nvda = self.config.nvda self.nvda_error = False self.sLib = ctypes.windll.LoadLibrary('./nvdaControllerClient32.dll')
Segera periksa apakah program kami dapat terhubung ke program NVDA yang sedang berjalan.
nvda_error = self.sLib.nvdaController_testIfRunning() errorMessage = str(ctypes.WinError(nvda_error)) if 0 != nvda_error: print('NVDA error: ' + errorMessage) self.nvda_error = True
Setelah menginisialisasi SAPI synthesizer dan nvda dll, Anda dapat memulai fungsi untuk memilih output audio ucapan.
self.set_speak_out()
Tambahkan fungsi untuk mengatur suara dari daftar yang tersedia menurut indeks.
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')
Dan sekarang fungsi untuk memilih suara keluaran audio. Di sini kita benar-benar memilih apa yang akan kita gunakan untuk pekerjaan: nvda atau synthesizer secara langsung.
Pilihannya terdiri dari dua parameter:
- Bendera ada di pengaturan apakah pengguna bahkan ingin game menggunakan NVDA;
- Kemungkinan kesalahan saat menghubungkan ke 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
Dan tentu saja, kami akan menulis fungsi pelafalan.
Untuk NVDA:
def speak_nvda(self, phrase): self.sLib.nvdaController_speakText(phrase)
Dan ini adalah fungsi untuk mengucapkan langsung ke synthesizer:
def speak_sapi(self, phrase): self.speaker.Speak(phrase)
Itu saja. Sekarang, di mana saja dalam logika permainan, kami mengirimkan informasi yang diperlukan ke speech.speak ().
Saya harap artikel ini bermanfaat bagi seseorang dan lebih banyak game yang tersedia akan muncul.