Тред про game audio: Как синтезировать речь персонажа из простых звуков
![Тред про game audio: Как синтезировать речь персонажа из простых звуков](https://coremission.net/wp-content/uploads/2021/07/celeste-1080x608.jpg)
Перевод треда Kevin Regameyk с рассказом, как он смог синтезировать речь Селесты из одноименной игры.
Создание диалогов Селесты — тема вопросов №1, когда дело касается звука в игре. Расскажу о том, как мы их создавали.
Во-первых, мы исследовали несколько простых синтезаторных звуков, чтобы определить общий тон для голоса данного персонажа. Когда был установлен основной тембр, мы перешли к настройке, как этот тон может меняться со временем.
По сути, используя параметрический эквалайзер в FL Studio, мы смоделировали так называемые «форманты» — то есть естественные спектральные пики в человеческих гласных звуках. У этих спектральных пиков есть определенные частотные положения и отношения, и они выглядели примерно так:
![Даже когда нет слов, можно выразить эмоции звуками](https://coremission.net/wp-content/uploads/2021/07/sintez-rechi-3.jpg)
Затем мы настроили частотные положения этих пиков во времени, чтобы они напоминали то, как человеческий голос может изменяться между гласными звуками.
Затем мы составили эмоциональный диапазон данного персонажа и выяснили, какими могут быть звуковые характеристики этих эмоций.
![Портреты Селесты с разными эмоциями](https://coremission.net/wp-content/uploads/2021/07/sintez-rechi-5.jpg)
Эмоции обычно высокие или низкие? Они однородны или сильно изменяются? Речь идет медленно и осторожно или быстро и отрывисто? Какую высоту звука мы должны слышать и какие предложения представляют собой эти звуки?
![Описание особенностей разных эмоций, как бы они выглядели в спектре](https://coremission.net/wp-content/uploads/2021/07/sintez-rechi-6.jpg)
Попросту, я часто читал сценарий и «переигрывал» диалоги.
![Кусочек сценария с диалогами из игры](https://coremission.net/wp-content/uploads/2021/07/sintez-rechi-7.png)
Затем мы нажали PLAY в FL Studio (чтобы запустить автоматизацию формант) и после этого «исполнили» эмоции на миди-клавиатуре пианино, возясь с колесом высоты тона в попытке достичь всех тех характеристик, которые изложили выше.
Мы записали аудиовыход этого выступления на отдельный компьютер, а затем просмотрели и выбрали «хорошие дубли». Эти хорошие результаты были разделены на 3 основные категории по эмоциям:
- Быстрое прохождение слогов (20)
- Слоги с ударением (10)
- Окончания предложений (10)
Используя @fmodstudio, мы настроили систему событий, управляемую эмоциями (на самом деле изображениями эмоций персонажа)… У нас было одно звуковое событие для каждого персонажа, и каждое диалоговое событие воспроизводится без остановки в течение всего разговора данного персонажа в игре.
![Код, который отправляет на определенную часть звуковой дорожки](https://coremission.net/wp-content/uploads/2021/07/sintez-rechi-9.png)
Мы зацикливаем тишину, пока не наступит очередь данного персонажа говорить. Когда этот персонаж говорит, сторона кода отправляет информацию об изображении текущего персонажа в FMOD, а FMOD отвечает, отправляя точку воспроизведения в соответствующую эмоцию на временной шкале события.
![Еще одна вспомогательная таблица, чтобы синтезировать речь Селесты](https://coremission.net/wp-content/uploads/2021/07/sintez-rechi-10.png)
Когда мы достигаем данной эмоции, мы проходим через случайную последовательность слогов с помощью построенной нами системы переходов. Ее создание было довольно утомительным, потому что при перемещении по случайной последовательности аудиофайлов FMOD не может отлично обрабатывать такую степень точности.
![Если нужно синтезировать речь с настоящими словами, те шли бы не в случайном порядке. Но здесь можно и так.](https://coremission.net/wp-content/uploads/2021/07/sintez-rechi-11.jpg)
Это потребовало вручную разместить каждый слог на временной шкале и настроить «переходный узел», который бы быстро отправлял точку воспроизведения к этим различным слогам. Ни один слог не мог воспроизводиться дважды подряд, а вероятность воспроизведения подчеркнутых слогов была ниже.
![Маркеры слогов из которых можно синтезировать речь](https://coremission.net/wp-content/uploads/2021/07/sintez-rechi-12.png)
Хаб также сделал тривиальной настройку интервала между слогами (поскольку мы могли перемещать всю позицию хаба, а не сорок отдельных маркеров перехода).
![Время между слогами](https://coremission.net/wp-content/uploads/2021/07/sintez-rechi-13.png)
В любом случае, как только отрисовка текста в пользовательском интерфейсе игры заканчивается, FMOD получает уведомление о том, что речь должна завершиться. Затем ползунок возвращается в режим ожидания следующего изображения / эмоции. (Он либо проигрывает последний слог перед возвратом, либо сразу же возвращается, если был на подчеркнутом слоге).
Вот и все! Надеюсь, вы узнали что-нибудь о #gameaudio! Если хотите увидеть подробную разбивку того, как работает диалоговое событие, можете посмотреть его здесь:
https://www.twitch.tv/videos/248998904?sr=a&t=1250s
Вы также можете скачать и попробовать всю @celeste_game
Проект FMOD (со всеми исходными звуками и музыкой — спасибо @kuraine!) доступен на сайте. https://fmod.com/resources/documentation-studio?version=2.00&page=appendix-a-celeste.html
Всем привет!
Ссылка на тред: https://twitter.com/regameyk/status/1416483668869062656