РУКОВОДСТВО

Озвучка текста в 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, или собственный голос, обученный по записи диктора, давшего согласие; фанатские голоса персонажей — для фанатских игр и пародий.