Озвучка текста в Pygame естественными голосами
Pygame — это то, где многие пишут свою первую игру, и рано или поздно персонажу нужно заговорить. pyttsx3 говорит роботизированными системными голосами, а облачным API нужны ключ и интернет, которых может не быть на школьном компьютере или ноутбуке на геймджеме.
Движок SuperClonica — это Python-пакет, поэтому проект на Pygame может сам озвучивать текст офлайн, естественными голосами на 31 языке, и проигрывать результат через pygame.mixer, не трогая файлы. В этом руководстве — код, как сохранить плавность игры, пока реплика озвучивается, и когда лучше поставлять файлы.
Два способа заставить игру на Pygame говорить
Озвучку во время игры используйте для прототипов, инструментов и игр, запускаемых из исходников; для готовой игры поставляйте файлы.
- Во время игры: игра озвучивает любой текст, например имя игрока, и сразу его проигрывает.
- Заранее озвученные файлы: реплики, сделанные при разработке, загружаются через pygame.mixer.Sound как любой звуковой эффект.
- Оба способа используют один движок, голоса и языки; китайский пока не поддерживается.
- Всё работает на обычном процессоре, видеокарта не нужна.
Подберите голоса бесплатно онлайн
На странице любого голоса впишите реплику персонажа, от 30 до 100 символов, выберите язык и нажмите «Озвучить». Через несколько секунд вы услышите, подходит ли голос, без регистрации.
Озвучка реплики во время игры
Загрузка движка занимает несколько секунд, поэтому создавайте его один раз при старте, а не для каждой реплики.
- Установите оба пакета: python -m pip install superclonica-cpu pygame.
- Настройте микшер на формат движка до pygame.init(): pygame.mixer.init(frequency=44100, size=-16, channels=1).
- Создайте движок один раз, tts = Superclonica(), затем озвучьте и проиграйте реплику: audio, rate = tts.synthesize("Добро пожаловать, герой! Деревня ждёт тебя.", "M2", "ru"); sound = pygame.mixer.Sound(array=(audio * 32767).astype(np.int16)); sound.play().
- Движок возвращает отсчёты с плавающей точкой при 44,1 кГц; перевести их в 16-битные целые — всё, что нужно pygame.
Чтобы игра не подтормаживала
Короткая реплика занимает около полсекунды на настольном процессоре, а замерший кадр заметен. Озвучивайте реплики в фоновом потоке и кладите готовый Sound в очередь, которую проигрывает главный цикл, или озвучивайте реплики уровня, пока показан экран загрузки. Держите словарь «текст → Sound», чтобы повторяющаяся реплика озвучивалась один раз.
Если выпускаете игру
Озвучке во время игры нужны движок, около 385 МБ модели и Python на компьютере игрока: для джем-игры из исходников это нормально, для скачиваемой игры тяжело. Для релиза озвучьте все реплики заранее через tts.save('line.ogg', audio) и поставляйте файлы OGG. Используйте десять стандартных голосов модели, от M1 до M5 и от F1 до F5, или собственный голос, обученный по записи диктора, давшего согласие; фанатские голоса персонажей — для фанатских игр и пародий.