Что такое синтезаторы речи? Лучшие синтезаторы речи. Как это работает: синтез речи Речевой синтезатор русской речи

Речевые синтезаторы, установленные на компьютеры или мобильные устройства, уже не кажутся такими необычными программами, как раньше. Благодаря современным технологиям обычный настольный ПК может воспроизводить человеческий голос.

Каким образом работают синтезаторы речи? Где они применяются? Какой самый лучший речевой синтезатор? Ответы на эти и другие вопросы изложены в данной статье.

Общее понятие

Синтезаторы речи являются специальными программами, состоящими из некоторого количества модулей, которые предоставляют возможность перевести набранные тексты в озвученные человеческим голосом предложения. Не стоит думать, что вся база слов и фраз записана реальными людьми в профессиональных студиях. Выполнить подобную задачу физически невозможно. Библиотеку с таким большим количеством фраз нельзя установить ни на один современный компьютер, не говоря уже о мобильных телефонах. Для этого разработчики создали технологию Text-to-Speech.

Сфера применения

Синтезаторы речи используются при изучении иностранных языков, прослушивании текстов на страницах книг, создании вокальных партий, выдаче поисковых запросов в форме озвученных фраз и т. п.

Какие разновидности программ существуют? В зависимости от сферы применения утилиты можно разделить на 2 вида: обычные, преобразующие набранный текст в речь, и специальные вокальные модули, используемые в музыкальных приложениях.

Преимущества и недостатки

На данный момент компьютер синтезирует человеческую речь только приблизительно. В простейших программах можно наблюдать проблемы со звуком и правильной постановкой ударений в различных словах. Синтезаторы речи, установленные на мобильные устройства, расходуют много энергии. Нередко можно отметить несанкционированную загрузку дополнительных модулей.

К преимуществам следует отнести удобство восприятия. Многим пользователям гораздо проще усваивать звуковую информацию, нежели какую-либо другую.

Лучшие речевые синтезаторы с русскими голосами

Программа RHVoice была создана Ольгой Яковлевой. Стандартный вариант приложения включает 3 голоса. Настройки очень просты. Программу можно использовать и как самостоятельное приложение, совместимое с SAPI5, и как дополнительный экранный модуль.

Речевой синтезатор Acapela отличается от аналогов идеальным озвучиванием текста. Приложение поддерживает более 30 языков мира. В бесплатной версии доступен лишь 1 женский голос.

Программа Vocalizer часто применяется в call-центрах. Пользователь может настроить постановку ударения, громкость и скорость чтения. При необходимости загружаются дополнительные словари. В приложении есть 1 женский голос. Речевой движок автоматически встраивается в программы для чтения книг в электронном формате.

Утилита eSpeak поддерживает свыше 50 языков. Недостатком программы можно считать сохранение звуковых файлов лишь в формате WAV, который требует много места на жестком диске.

Приложение Festival является мощнейшей утилитой синтеза речи, поддерживающей даже финский язык и хинди.

Установка программы

Как использовать приложения такого типа? Для начала нужно установить программу. В компьютерных ОС применяется стандартный инсталлятор, в котором пользователю остается выбрать лишь поддерживаемый утилитой языковой модуль. Установщик для мобильных устройств можно скачать с официального сайта, Google Play, а также App Store. Инсталляция приложения происходит в автоматическом режиме.

Первый запуск программы

На данном этапе пользователю достаточно установить язык по умолчанию. Иногда требуется отметить качество звучания. Стандартный вариант подразумевает частоту дискретизации 4410 Гц, глубину 16 бит и битрейт 128 кбит/с. В мобильных ОС показатели могут быть ниже. В качестве основы используется определенный голос.

Фильтры и эквалайзеры помогают достичь необходимого звучания. Пользователю доступны три варианта перевода текста. Он может набрать на клавиатуре предложения, включить озвучивание уже имеющегося файла или установить в браузере расширение, которое преобразует содержимое на веб-страницах в речь. Достаточно отметить необходимый вариант действий, тембр голоса и язык, на котором будет произноситься текст. Для включения процесса воспроизведения требуется кликнуть по кнопке «Старт».

Работа со сложными программами

В музыкальных приложениях настройки гораздо сложнее. В речевом модуле программы FL Studio пользователь может выбрать несколько видов голосов, а также указать тональность и скорость воспроизведения. Постановка ударений перед слогами осуществляется с помощью символа «_». С помощью подобного речевого синтезатора можно создать лишь роботизированный голос.

Программа Vocaloid относится к приложениям профессионального типа. Помимо обычных параметров, пользователь может выбирать артикуляцию и глиссандо. В утилите есть база с вокалом профессионалов. При желании можно подгонять под ноты целые предложения. Одна только библиотека с вокалом занимает более 4 Гб в сжатом виде.

"Синтезатор речи Google": что это за программа

В мае 2014 года компания предоставила пользователям возможность опробовать новый бесплатный продукт. Что такое "Синтезатор речи Google" на «Андроиде»? Это программа, озвучивающая текст на экране мобильного устройства или планшета. Теперь нет необходимости устанавливать сторонние утилиты, которые требуют наличия лицензии. "Синтезатор речи Google" используется при чтении электронных книг, прослушивании правильного произношения слов, запуске приложения TalkBack.

Новая версия программы "Синтезатор речи Google 3.1" получила функцию поддержки английского, итальянского, испанского, корейского, немецкого, нидерландского, польского, португальского, русского и французского языков. Где найти голосовые пакеты? Они загружаются из самого приложения.

Преимущества и недостатки продукта от Google

Особенностями русскоговорящего женского голоса является четкое, громкое звучание и плавная интонация. Скорость воспроизведения можно регулировать в настройках программы. Пользователи, использующие TalkBack и русскую языковую локализацию ОС Android, должны проявлять осторожность при переключении на речевой синтезатор, если ранее в приложении по умолчанию был установлен другой голос. Могут возникнуть проблемы, связанные с сохранением контроля над мобильным устройством на слух. Практически все голоса, кроме русского, неспособны обрабатывать предложения на кириллице.

Среди минусов можно отметить задержку реакции на чтение текстов, состоящих из фраз на разных языках. Русский голос отличается металлическими нотками тембра. Можно услышать дребезжащий звук на низких частотах. К преимуществам можно отнести стабильность работы приложения и приемлемое качество чтения англоязычных слов.

"Синтезатор речи Google": как пользоваться программой

Для того чтобы утилита заработала как надо, требуется обновить ее до последней версии. Чтобы активировать процесс озвучивания текста, нужно открыть настройки. В разделе «язык и ввод» необходимо поставить флажок на пункте «синтез речи». Тут же следует отметить строку «система по умолчанию». Не стоит забывать о том, что голосовые пакеты в самой программе также нуждаются в обновлении.

Проблемы при работе с утилитой

При необходимости пользователь может отключить приложение. В самых простых утилитах кнопка остановки находится в самой программе. Деактивация расширения, установленного в браузере, производится путем отключения дополнения или полного удаления плагина. При работе с программой на мобильном телефоне также могут возникнуть проблемы. Дело в том, что синтезатор речи автоматически включает загрузку ненужных пользователю языковых модулей.

Данный процесс занимает много времени и существенно расходует трафик. Как отключить "Синтезатор речи Google" на мобильном устройстве и избавиться от этой проблемы? Для начала нужно открыть настройки приложения. Потом необходимо выбрать раздел «язык и голосовой ввод». Далее нужно отметить последнюю строку.

Выбрав голосовой поиск, следует кликнуть по крестику у пункта «распознавание речи офлайн». Затем рекомендуется удалить кэш приложений. Далее требуется перезагрузить мобильный телефон. Чтобы полностью отключить утилиту, необходимо открыть в настройках раздел «приложения», выбрать в списке синтезатор речи и кликнуть по кнопке «остановить».

Удаление программы

Бывает так, что пользователь вообще не использует "Синтезатор речи Google". Можно ли удалить утилиту с мобильного устройства? Для этого нужно открыть Google Play. Затем следует выбрать в перечне установленных программ синтезатор речи и кликнуть по кнопке «удалить».

Итоги

Обычным пользователям и людям с ограниченными возможностями подойдут приложения с простым интерфейсом. Это может быть как RHVoice, так и "Синтезатор речи Google". Русский голос озвучит отображаемый на экране текст. Большего рядовому пользователю не требуется.

Музыкантам рекомендуется отдавать предпочтение профессиональной программе Vocaloid. В приложении есть дополнительные голосовые библиотеки и множество различных опций. Программа позволит получить естественное звучание голоса. Ведь музыкантам так важно, чтобы компьютерный синтез не ощущался на слух.

Синтез речи на сегодняшний день применяется в самых разных областях. Это и голосовые ассистенты, и IVR-системы, и умные дома, и еще много чего. Сама по себе задача, на мой вкус, очень наглядная и понятная: написанный текст должен произноситься так, как это бы сделал человек.

Некоторое время назад в область синтеза речи, как и во многие другие области, пришло машинное обучение. Выяснилось, что целый ряд компонентов всей системы можно заменить на нейронные сети, что позволит не просто приблизиться по качеству к существующим алгоритмам, а даже значительно их превзойти.

Синтез речи

Чтобы построить систему синтеза речи, нужна целая команда специалистов из разных областей. По каждой из них существует целая масса алгоритмов и подходов. Написаны докторские диссертации и толстые книжки с описанием фундаментальных подходов. Давайте для начала поверхностно разберемся с каждой их них.

Лингвистика

  1. Нормализация текста . Для начала нам нужно развернуть все сокращения, числа и даты в текст. 50е годы XX века должно превратиться в пятидесятые годы двадцатого века , а г. Санкт-Петербург, Большой пр. П.С. в город Санкт-Петербург, Большой проспект Петроградской Стороны . Это должно происходить так естественно, как если бы человека попросили прочитать написанное.
  2. Подготовка словаря ударений . Расстановка ударений может производиться по правилам языка. В английском ударение часто ставится на первый слог, а в испанском - на предпоследний. При этом из этих правил существует целая масса исключений, не поддающихся какому-то общему правилу. Их обязательно нужно учитывать. Для русского языка в общем смысле правил расстановки ударения вообще не существует, так что без словаря с расставленными ударениями совсем никуда не деться.
  3. Снятие омографии . Омографы - это слова, которые совпадают в написании, но различаются в произношении. Носитель языка легко расставит ударения: дверной замок и замок на горе . А вот ключ от замка - задача посложнее. Полностью снять омографию без учета контекста невозможно.

Просодика

  1. Выделение синтагм и расстановка пауз . Синтагма представляет относительно законченный по смыслу отрезок речи. Когда человек говорит, он обычно вставляет паузы между фразами. Нам нужно научиться разделять текст на такие синтагмы.
  2. Определение типа интонации . Выражение завершенности, вопроса и восклицания - самые простые интонации. А вот выразить иронию, сомнение или воодушевление задача куда сложнее.

Фонетика

  1. Получение транскрипции . Так как в конечном итоге мы работаем с произнесением, а не с написанием, то очевидно вместо букв (графем), логично использовать звуки (фонемы). Преобразование графемной записи в фонемную - отдельная задача, состоящая из множества правил и исключений.
  2. Вычисление параметров интонации . В этот момент нужно решить как будет меняться высота основного тона и скорость произнесения в зависимости от расставленных пауз, подобранной последовательности фонем и типа выражаемой интонации. Помимо основного тона и скорости есть и другие параметры, с которыми можно долго экспериментировать.

Акустика

  1. Подбор звуковых элементов . Системы синтеза оперируют так называемыми аллофонами - реализациями фонемы, зависящими от окружения. Записи из обучающих данных нарезаются на кусочки по фонемной разметке, которые образуют аллофонную базу. Каждый аллофон характеризуется набором параметров, таких как контекст (фонемы соседи), высота основного тона, длительность и прочие. Сам процесс синтеза представляет собой подбор правильной последовательности аллофонов, наиболее подходящих в текущих условиях.
  2. Модификация и звуковые эффекты . Для получившихся записей иногда нужна постобработка, какие-то специальные фильтры, делающие синтезируемую речь чуть ближе к человеческой или исправляющие какие-то дефекты.
Если вдруг вам показалось, что все это можно упростить, прикинуть в голове или быстро подобрать какие-то эвристики для отдельных модулей, то просто представьте, что вам нужно сделать синтез на хинди. Если вы не владеете языком, то вам даже не удастся оценить качество вашего синтеза, не привлекая кого-то, кто владел бы языком на нужном уровне. Мой родной язык русский, и я слышу, когда синтез ошибается в ударениях или говорит не с той интонацией. Но в тоже время, весь синтезированный английский для меня звучит примерно одинаково, не говоря уже о более экзотических языках.

Реализации

Мы попытаемся найти End-2-End (E2E) реализацию синтеза, которая бы взяла на себя все сложности, связанные с тонкостями языка. Другими словами, мы хотим построить систему, основанную на нейронных сетях, которая бы на вход принимала текст, а на выходе давала бы синтезированную речь. Можно ли обучить такую сеть, которая позволила бы заменить целую команду специалистов из узких областей на команду (возможно даже из одного человека), специализирующуюся на машинном обучении?

На запрос end2end tts Google выдает целую массу результатов. Во главе - реализация Tacotron от самого Google. Самым простым мне показалось идти от конкретных людей на Github, которые занимаются исследованиям в этой области и выкладывают свои реализации различных архитектур.

Я бы выделил троих:

Загляните к ним в репозитории, там целый кладезь информации. Архитектур и подходов к задаче E2E-синтеза довольно много. Среди основных:
  1. Tacotron (версии 1, 2).
  2. DeepVoice (версии 1, 2, 3).
  3. Char2Wav.
  4. DCTTS.
  5. WaveNet.
Нам нужно выбрать одну. Я выбрал Deep Convolutional Text-To-Speech (DCTTS) от Kyubyong Park в качестве основы для будущих экспериментов. Оригинальную статью можно посмотреть по ссылке . Давайте поподробнее рассмотрим реализацию.

Автор выложил результаты работы синтеза по трем различным базам и на разных стадиях обучения. На мой вкус, как не носителя языка, они звучат весьма прилично. Последняя из баз на английском языке (Kate Winslet"s Audiobook) содержит всего 5 часов речи, что для меня тоже является большим преимуществом, так как моя база содержит примерно сопоставимое количество данных.

Через некоторое время после того, как я обучил свою систему, в репозитории появилась информация о том, что автор успешно обучил модель для корейского языка. Это тоже довольно важно, так как языки могут сильно разниться и робастность по отношению к языку - это приятное дополнение. Можно ожидать, что в процессе обучения не потребуется особого подхода к каждому набору обучающих данных: языку, голосу или еще каким-то характеристикам.

Еще один важный момент для такого рода систем - это время обучения. Tacotron на том железе, которое у меня есть, по моим оценкам учился бы порядка 2 недель. Для прототипирования на начальном уровне мне показалось это слишком ресурсоемким. Педали, конечно, крутить не пришлось бы, но на создание какого-то базового прототипа потребовалось бы очень много календарного времени. DCTTS в финальном варианте учится за пару дней.

У каждого исследователя есть набор инструментов, которыми он пользуется в своей работе. Каждый подбирает их себе по вкусу. Я очень люблю PyTorch. К сожалению, на нем реализации DCTTS я не нашел, и пришлось использовать TensorFlow. Возможно в какой-то момент выложу свою реализацию на PyTorch.

Данные для обучения

Хорошая база для реализации синтеза - это основной залог успеха. К подготовке нового голоса подходят очень основательно. Профессиональный диктор произносит заранее подготовленные фразы в течение многих часов. Для каждого произнесения нужно выдержать все паузы, говорить без рывков и замедлений, воспроизвести правильный контур основного тона и все это в купе с правильной интонацией. Кроме всего прочего, не все голоса одинаково приятно звучат.

У меня на руках была база порядка 8 часов, записанная профессиональным диктором. Сейчас мы с коллегами обсуждаем возможность выложить этот голос в свободный доступ для некоммерческого использования. Если все получится, то дистрибутив с голосом помимо самих записей будет включать в себя точные текстовки для каждой из них.

Начнем

Мы хотим создать сеть, которая на вход принимала бы текст, а на выходе давала бы синтезированный звук. Обилие реализаций показывает, что это возможно, но есть конечно и ряд оговорок.

Основные параметры системы обычно называют гиперпараметрами и выносят в отдельный файл, который называется соответствующим образом: hparams.py или hyperparams.py , как в нашем случае. В гиперпараметры выносится все, что можно покрутить, не трогая основной код. Начиная от директорий для логов, заканчивая размерами скрытых слоев. После этого гиперпараметры в коде используются примерно вот так:

From hyperparams import Hyperparams as hp batch_size = hp.B # размер батча берем из гиперпараметров
Далее по тексту все переменные имеющие префикс hp. берутся именно из файла гиперпараметров. Подразумевается, что эти параметры не меняются в процессе обучения, поэтому будьте осторожны перезапуская что-то с новыми параметрами.

Текст

Для обработки текста обычно используются так называемый embedding-слой, который ставится самым первым. Суть его простая - это просто табличка, которая каждому символу из алфавита ставит в соответствие некий вектор признаков. В процессе обучения мы подбираем оптимальные значения для этих векторов, а когда синтезируем по готовой модели, просто берем значения из этой самой таблички. Такой подход применяется в уже довольно широко известных Word2Vec, где строится векторное представление для слов.

Для примера возьмем простой алфавит:

["a", "b", "c"]
В процессе обучения мы выяснили, что оптимальные значения каждого их символов вот такие:

{ "a": , "b": , "c": }
Тогда для строчки aabbcc после прохождения embedding-слоя мы получим следующую матрицу:

[, , , , , ]
Эта матрица дальше подается на другие слои, которые уже не оперируют понятием символ.

В этот момент мы видим первое ограничение, которое у нас появляется: набор символов, который мы можем отправлять на синтез, ограничен. Для каждого символа должно быть какое-то ненулевое количество примеров в обучающих данных, лучше с разным контекстом. Это значит, что нам нужно быть осторожными в выборе алфавита.

В своих экспериментах я остановился на варианте:

# Алфавит задается в файле с гиперпараметрами vocab = "E абвгдеёжзийклмнопрстуфхцчшщъыьэюя-"
Это алфавит русского языка, дефис, пробел и обозначение конца строки. Тут есть несколько важных моментов и допущений:

  1. Я не добавлял в алфавит знаки препинания. С одной стороны, мы действительно их не произносим. С другой, по знакам препинания мы делим фразу на части (синтагмы), разделяя их паузами. Как система произнесет казнить нельзя помиловать ?
  2. В алфавите нет цифр. Мы ожидаем, что они будут развернуты в числительные перед подачей на синтез, то есть нормализованы. Вообще все E2E-архитектуры, которые я видел, требуют именно нормализованный текст.
  3. В алфавите нет латинских символов. Английский система уметь произносить не будет. Можно попробовать транслитерацию и получить сильный русский акцент - пресловутый лет ми спик фром май харт .
  4. В алфавите есть буква ё . В данных, на который я обучал систему, она стояла там, где нужно, и я решил этот расклад не менять. Однако, в тот момент, когда я оценивал получившиеся результаты, выяснилось, что теперь перед подачей на синтез эту букву тоже нужно ставить правильно, иначе система произносит именно е , а не ё .
В будущих версиях можно уделить каждому из пунктов более пристальное внимание, а пока оставим в таком немного упрощенном виде.

Звук

Почти все системы оперируют не самим сигналом, а разного рода спектрами полученными на окнах с определенным шагом. Я не буду вдаваться в подробности, по этой теме довольно много разного рода литературы. Сосредоточимся на реализации и использованию. В реализации DCTTS используются два вида спектров: амплитудный спектр и мел-спектр.

Считаются они следующим образом (код из этого листинга и всех последующих взят из реализации DCTTS, но видоизменен для наглядности):

# Получаем сигнал фиксированной частоты дискретизации y, sr = librosa.load(wavename, sr=hp.sr) # Обрезаем тишину по краям y, _ = librosa.effects.trim(y) # Pre-emphasis фильтр y = np.append(y, y - hp.preemphasis * y[:-1]) # Оконное преобразование Фурье linear = librosa.stft(y=y, n_fft=hp.n_fft, hop_length=hp.hop_length, win_length=hp.win_length) # Амплитудный спектр mag = np.abs(linear) # Мел-спектр mel_basis = librosa.filters.mel(hp.sr, hp.n_fft, hp.n_mels) mel = np.dot(mel_basis, mag) # Переводим в децибелы mel = 20 * np.log10(np.maximum(1e-5, mel)) mag = 20 * np.log10(np.maximum(1e-5, mag)) # Нормализуем mel = np.clip((mel - hp.ref_db + hp.max_db) / hp.max_db, 1e-8, 1) mag = np.clip((mag - hp.ref_db + hp.max_db) / hp.max_db, 1e-8, 1) # Транспонируем и приводим к нужным типам mel = mel.T.astype(np.float32) mag = mag.T.astype(np.float32) # Добиваем нулями до правильных размерностей t = mel.shape num_paddings = hp.r - (t % hp.r) if t % hp.r != 0 else 0 mel = np.pad(mel, [, ], mode="constant") mag = np.pad(mag, [, ], mode="constant") # Понижаем частоту дискретизации для мел-спектра mel = mel[::hp.r, :]
Для вычислений почти во всех проектах E2E-синтеза используется библиотека LibROSA (https://librosa.github.io/librosa/). Она содержит много полезного, рекомендую заглянуть в документацию и посмотреть, что в ней есть.

Теперь давайте посмотрим как амплитудный спектр (magnitude spectrum) выглядит на одном из файлов из базы, которую я использовал:


Такой вариант представления оконных спекторов называется спектрограммой. На оси абсцисс располагается время в секундах, на оси ординат - частота в герцах. Цветом выделяется амплитуда спектра. Чем точка ярче, тем значение амплитуды больше.

Мел-спектр - это амплитудный спектр, но взятый на мел-шкале с определенным шагом и окном. Количество шагов мы задаем заранее, в большинстве реализаций для синтеза используется значение 80 (задается параметром hp.n_mels ). Переход к мел-спектру позволяет сильно сократить количество данных, но этом сохранить важные для речевого сигнала характеристики. Мел-спектрограмма для того же файла выглядит следующим образом:


Обратите внимание на прореживание мел-спектров во времени на последней строке листинга. Мы берем только каждый 4 вектор (hp.r == 4 ), соответственно уменьшая тем самым частоту дискретизации. Синтез речи сводится к предсказанию мел-спектров по последовательности символов. Идея простая: чем меньше сети приходится предсказывать, тем лучше она будет справляться.

Хорошо, мы можем получить спектрограмму по звуку, но послушать мы ее не можем. Соответственно нам нужно уметь восстанавливать сигнал обратно. Для этих целей в системах часто используется алгоритм Гриффина-Лима и его более современные интерпретации (к примеру, RTISILA, ссылка). Алгоритм позволяет восстановить сигнал по его амплитудным спектрам. Реализация, которую использовал я:

Def griffin_lim(spectrogram, n_iter=hp.n_iter): x_best = copy.deepcopy(spectrogram) for i in range(n_iter): x_t = librosa.istft(x_best, hp.hop_length, win_length=hp.win_length, window="hann") est = librosa.stft(x_t, hp.n_fft, hp.hop_length, win_length=hp.win_length) phase = est / np.maximum(1e-8, np.abs(est)) x_best = spectrogram * phase x_t = librosa.istft(x_best, hp.hop_length, win_length=hp.win_length, window="hann") y = np.real(x_t) return y
А сигнал по амплитудной спектрограмме можно восстановить вот так (шаги, обратные получению спектра):

# Транспонируем mag = mag.T # Денормализуем mag = (np.clip(mag, 0, 1) * hp.max_db) - hp.max_db + hp.ref_db # Возвращаемся от децибел к аплитудам mag = np.power(10.0, mag * 0.05) # Восстанавливаем сигнал wav = griffin_lim(mag**hp.power) # De-pre-emphasis фильтр wav = signal.lfilter(, , wav)
Давайте попробуем получить амплитудный спектр, восстановить его обратно, а затем послушать.

Оригинал:


Восстановленный сигнал:
На мой вкус, результат стал хуже. Авторы Tacotron (первая версия также использует этот алгоритм) отмечали, что использовали алгоритм Гриффина-Лима как временное решение для демонстрации возможностей архитектуры. WaveNet и ему подобные архитектуры позволяют синтезировать речь лучшего качества. Но они более тяжеловесные и требуют определенных усилий для обучения.

Обучение

DCTTS, который мы выбрали, состоит из двух практически независимых нейронных сетей: Text2Mel и Spectrogram Super-resolution Network (SSRN).


Text2Mel предсказывает мел-спектр по тексту, используя механизм внимания (Attention), который увязывает два энкодера (TextEnc, AudioEnc) и один декодер (AudioDec). Обратите внимание, что Text2Mel восстанавливает именно разреженный мел-спектр.

SSRN восстанавливает из мел-спектра полноценный амплитудный спектр, учитывая пропуски кадров и восстанавливая частоту дискретизации.

Последовательность вычислений довольно подробно описана в оригинальной статье. К тому же есть исходный код реализации, так что всегда можно отладиться и вникнуть в тонкости. Обратите внимание, что автор реализации отошел в некоторых местах от статьи. Я бы выделил два момента:

  1. Появились дополнительные слои для нормализации (normalization layers), без которых, по словам автора, ничего не работало.
  2. В реализации используется механизм исключения (dropout) для лучшей регуляризации. В статье этого нет.
Я взял голос, включающий в себя 8 часов записей (несколько тысяч файлов). Оставил только записи, которые:
  1. В текстовках содержат только буквы, пробелы и дефисы.
  2. Длина текстовок не превышает hp.max_N .
  3. Длина мел-спектров после разреживания не превышает hp.max_T .
У меня получилось чуть больше 5 часов. Посчитал для всех записей нужные спекты и поочередно запустил обучение Text2Mel и SSRN. Все это делается довольно безхитростно:

$ python prepro.py $ python train.py 1 $ python train.py 2
Обратите внимание, что в оригинальном репозитории prepro.py именуется как prepo.py . Мой внутренний перфекционист не смог этого терпеть, так что я его переименовал.

DCTTS содержит только сверточные слои, и в отличие от RNN реализаций, вроде Tacotron, учится значительно быстрее.

На моей машине с Intel Core i5-4670, 16 Gb RAM и GeForce 1080 на борту 50 тыс. шагов для Text2Mel учится за 15 часов, а 75 тыс. шагов для SSRN - за 5 часов. Время требуемое на тысячу шагов в процессе обучения у меня почти не менялось, так что можно легко прикинуть, сколько потребуется времени на обучение с большим количеством шагов.

Размер батча можно регулировать параметром hp.B . Периодически процесс обучения у меня валился с out-of-memory, так что я просто делил на 2 размер батча и перезапускал обучение с нуля. Полагаю, что проблема кроется где-то в недрах TensorFlow (я использовал не самый свежий) и тонкостях реализации батчинга. Я с этим разбираться не стал, так как на значении 8 все падать перестало.

Результат

После того, как модели обучились, можно наконец запустить и синтез. Для этого заполняем файлик с фразами и запускаем:

$ python synthesize.py
Я немного поправил реализацию, чтобы генерировать фразы из нужного файла.

Результаты в виде WAV-файлов будут сохранены в директорию samples . Вот примеры синтеза системой, которая получилась у меня:

Выводы и ремарки

Результат превзошел мои личные ожидания по качеству. Система расставляет ударения, речь получается разборчивой, а голос узнаваем. В целом получилось неплохо для первой версии, особенно с учетом того, что для обучения использовалось всего 5 часов обучающих данных.

Остаются вопросы по управляемости таким синтезом. Пока невозможно даже исправить ударение в слове, если оно неверное. Мы жестко завязаны на максимальную длину фразы и размер мел-спектрограммы. Нет возможности управлять интонацией и скоростью воспроизведения.

Я не выкладывал мои изменения в коде оригинальной реализации. Они коснулись только загрузки обучающих данных и фраз для синтеза уже по готовой системе, а также значений гиперпараметров: алфавит (hp.vocab ) и размер батча (hp.B ). В остальном реализация осталась оригинальная.

В рамках рассказа я совсем не коснулся темы продакшн реализации таких систем, до этого полностью E2E-системам синтеза речи пока очень далеко. Я использовал GPU c CUDA, но даже в этом случае все работает медленнее реального времени. На CPU все работает просто неприлично медленно.

Все эти вопросы будут решаться в ближайшие годы крупными компаниями и научными сообществами. Уверен, что это будет очень интересно.

Теги: Добавить метки

Синтезаторы речи онлайн – это полезная находка, о которой раньше можно было только мечтать. Они позволяют озвучивать любой заданный вами текст, регулируя голос, тембр, темп и др. Изначально утилита была рассчитана на людей с плохим зрением, которые не имеют возможность читать текст с монитора. Сейчас же она часто используется как вспомогательный инструмент в изучении иностранных языков, позволяя воспринимать речь на слух и привыкать к правильной расстановке ударений и интонаций. Также для удобства с помощью синтезатора можно слушать книги, параллельно занимаясь бытовыми делами.

В интернете легко найти массу таких приложений, доступных для скачивания на ПК. Однако, чтобы лишний раз не заполнять память компьютера и не ставить под угрозу безопасность его работы, лучше использовать онлайн-сервисы. Мы расскажем о трех самых удобных и многофункциональных.

Acapela – самый известный синтезатор речи онлайн

Сайт Acapela предоставляет огромный выбор языков и голосов для озвучивания текста. Особенно это актуально для английского – его можно услышать в двадцати разных вариантах: женским голосом, мужским, детским, старческим, радостным и т.д.

Удобно, что все параметры настраиваются сразу на главной странице

К сожалению, с русскими текстами дела обстоят похуже – их озвучивают только одним голосом – некой Алены. Но тем не менее, результат получается вполне достойным.

Настройки здесь очень простые – достаточно только выбрать язык и голос, ввести нужный текст, затем согласиться с условиями использования ресурса и нажать кнопку «Listen!».


Интерфейс оформлен на английском, но и без перевода вполне понятно, что и как нажимать

Лимит на аудиовоспроизведение – 300 символов. В этом главный минус большинства синтезаторов речи онлайн, поэтому если вам нужна озвучка объемного файла, такой вариант явно не подойдет. Чтобы пользоваться озвучиванием без ограничений, предлагают купить полную версию программы. Она доступна для всех операционных систем на ПК и телефоне.

Google Переводчик: быстро, легко, доступно

Говоря о воспроизведении текстовых файлов, нельзя не упомянуть знаменитый Google Translate . Как понятно из названия, этот сервис предназначен для перевода текстов. Помимо этого, здесь можно также прослушивать файлы – делается это буквально в один клик.


Все оформлено на русском языке, поэтому разобраться в интерфейсе очень легко

Чтобы прослушать файл, необходимо вставить свой текст в соответствующее окно и нажать на значок мегафона в левом нижнем углу. Удобно, что сделать это можно как с оригиналом, так и с переводом. Отметим, что лимит здесь гораздо больше, чем в Акапеле – 5000 знаков. Никаких расширений и платных версий не предусмотрено.

Поскольку эта программа создана для других целей, функционал здесь оставляет желать лучшего. Тембр, скорость прочтения и другие важные параметры никак не регулируются. Озвучка получается неестественной, с отчетливыми «металлическими» нотками. Интонации, паузы, смысловые ударения – все это выполнено непрофессионально, поэтому в каждом предложении чувствуется, как слова неровно «склеены» между собой.

Это приложение удобно использовать, например, если вы хотите понять, как воспринимается на слух написанный вами текст. Для этого не особо важны интонации и тембр, ведь интересны сами формулировки, наличие тавтологий и неблагозвучных высказываний.


Из преимуществ можно отметить разве что огромный выбор языков, что, собственно, вполне логично для онлайн переводчика

Сервис Fromt exttospeech для воспроизведения голосом вашего текста

Последнее приложение, о котором мы хотим рассказать – это Fromtexttospeech . Начнем с того, что ограничения по количеству символов здесь самые лояльные – до 50 000. Это серьезное конкурентное преимущество, но давайте разберемся, обладает ли Fromtexttospeech еще какими-либо явными достоинствами.

Алгоритм работы программы примерно такой же, как и у Acapela:

  • настраиваем параметры синтезатора речи онлайн: язык, тембр и скорость;
  • нажимаем «Create Audio File»;
  • скачиваем или просто прослушиваем готовый файл.

Итак, пробуем. Копируем несколько предложений своей статьи и вставляем на fromtexttospeech.com. Чуть ниже рабочей панели высвечивается количество знаков, которые мы еще можем дописать.


Очень удобно, что есть возможность выбирать скорость начитки: медленная, средняя, быстрая и очень быстрая

Больше здесь настраивать нечего, так что переходим к самой процедуре конвертации в аудио. Этот процесс занимает несколько минут (в зависимости от размера файла), после чего в отдельном окне можно будет оценить результат работы.


Возможность сохранить получившийся аудиофайл на компьютер – очень удобная функция, которая отличает этот сервис от многих других

Подводя итоги, стоит сказать, что все рассмотренные нами сервисы очень индивидуальны и имеют свои особенности. Если вас интересует профессиональное озвучивание, то Акапела отлично подойдет для этих целей. На официальном сайте программы вы сможете протестировать ее работу, оценить звучание и функционал, чтобы принять решение о покупке полноценной версии. Если же вопрос качества для вас не слишком важен, выбирайте старый добрый Гугл Переводчик или Fromtexttospeech, которые позволяют бесплатно преобразовывать большие текстовые файлы в аудио.

Послушать, как звучат фрагменты одного текста в исполнении различных голосовых движков, можно в нашем видео.

Недавно передо мной встала проблема выбора голосового синтезатора речи. Основные требования — это поддержка русского языка и более-менее нормальное произношение.
Для тех, кто не в курсе того, что такое синтезатор речи, расскажу — это специальная программа, смысл работы которой заключается в преобразовании письменного текста в устную речь. Это и есть так называемый синтез.
Зачем это надо? Ну, например, когда надо записать голосовое сообщение чужим голосом. Иностранцам оно может быть полезно для того, чтобы услышать произношение того или иного слова. Синтезатор речи удобен для чтения, когда надо включить ребенку сказку, которой нет в аудиокнигах. Да и вообще, ситуации всякие бывают.
Так вот, в процессе выбора я нашел несколько очень полезных инструментов, среди которых работающих в режиме онлайн с поддержкой русского языка и сейчас я Вам о них и расскажу.

Переводчик Google

Вот поистине многоцелевой продукт, которых можно использовать совершенно по-разному. Главные преимущества:
— это совершенно бесплатный сервис;
— работа в режиме Онлайн без установки. Нужен только доступ в Интернет;
— на мой взгляд этот синтезатор речи имеет лучший голосовой модуль, самое близкое к натуральному;
— наверное самая лучшая команда разработчиков и техподдержка в мире;
— самое большое количество поддерживаемых языков.
К сожалению, вариант голоса только один — женский. Выбора я не нашел.

RHVoice

Отличный многоязычный синтезатор речи от российского разработчика — Ольги Яковлевой. Есть версии, как для операционных систем семейства Windows, так и для Linux. Разработчик синтезатора - Ольга Яковлева. Программа распространяется совершенно бесплатно и доступна на официальном сайте в двух вариантах: как SAPI5-совместимая самостоятельная версия и как модуль для бесплатной программы экранного доступа NVDA. Этот синтезатор голосовой речи умеет озвучивать русские тексты тремя голосами — Елена, Ирина и Александр.

Acapela

Acapela - это, пожалуй, один из самых популярных и распространенных голосовых синтезаторов в мире. Главная особенность — это озвучка текстов более чем на тридцати языках мира. Если рассматривать русский язык, то тут доступны два голоса - Николай и Алена. Причем последний более совершенен и естественен в плане произношения. В демонстрационном режиме на сайте доступен только голос Алена.
Программа доступна для скачивания на официальном сайте и поддерживает все популярные современные операционные системы — Windows, Linux, Mac. Есть даже версии для Android u iOS.

Vokalizer

Женских голос Milena — это ещё один очень популярный движок голосового синтезатора речи от компании Nuance — он очень высококачественный и естественно звучащий. Его Вы можете услышать в call-центрах и в различных сетевых речевых системах, а также в различных приложениях приложениях — таких как Moon+ Reader Pro, Full Screen Caller ID , Cool Reader, в навигационной программах TomTom, iGo Primo.
Среди плюсов можно отметить возможность установки различных словарей, регулировки громкости, ударения и скорости чтения.
Код программы открытый, скачать его бесплатно можно на официальном сайте, собственно как и инсталлятор самой программы.

Festival

Festival - это не просто очередной голосовой речевой синтезатор, а уже целая система распознавания и синтеза речи с различными API. Разработчик — Исследовательский Центр Речевых Технологий университета Эдинбурга.
Festival предназначен для поддержки нескольких языков. По умолчанию поддерживает английский, валлийский и испанский языки. Но есть возможность подключить голосовые пакеты других языков: чешский, финский, хинди, итальянский, маратхи, польский, русский и телугу.
Код программы открытый, сам голосовой синтезатор распространяется по лицензии open source и доступна только для операционных систем Linux. Правда есть портированная версия по Макинтош.

ESpeak

Последняя в моём обзоре система синтеза речи — программа ESpeak — разрабатывается уже около 8 лет. Последняя версия — 1.48.04 от 6 апреля 2014. Данный голосовой синтезатор речи кроссплатформенный — есть версии под Windows, Linux, Mac OS X, и даже под RISC OS, хотя последние две уже давно не поддерживаются.
Отдельно отмечу, что eSpeak используется в мобильных операционных системах Android, правда имеет при этом ряд существенных ошибок.
Программа поддерживает пятидесяти различных языков, поддержка которых указывается при установке программы.
Один из главных минусов это голосового синтезатора — генерирование голоса только в файл формата WAV. Скачать программу бесплатно можно на официальном сайте.

От себя добавлю лишь, что мне понравились RHVoice и Vokalizer, хотя тут во много дело индивидуальное и во многом зависит от того, что Вы хотите получить. Так что пробуйте, ставьте и смотрите. Я думаю, что один из представленных вариантов Вам обязательно должен подойти.

В отличие от предыдущего представителя, Cantor 2 представляет собой более «продвинутую» систему для синтезирования вокальных партий, но уже за денежку. Он также имеет версию в виде отдельной программы. Хотя и vst-инструмент представляет собой аналог piano-roll в секвенсоре: взгляните на интерфейс (рис. 4).

Поскольку этот плагин обладает большим инструментарием, он может манипулировать большим количеством параметров голоса. Но начинать нужно всё равно с построения фразы по слогам. Как несложно догадаться, делается это посредством piano roll. Здесь же есть панель инструментов с привычными «карандашами», «ластиками» и т.п. Собственно, попробуем синтезировать упоминавшуюся выше фразу «hey, yo, come on»! Нарисуем события в виде прямоугольных областей, а также подпишем каждый из них, как на рисунке 5.

Как можно увидеть, слова написаны над событиями не все целиком. Например, слово «come on» разбито на два слога - «com» и «on». Внимательные пользователи заметят, что внизу автоматически прописаны фонемы - это довольно удобная функция. Если вдаваться в подробности и нюансы, то нужно очень хорошо представлять себе, что такое фонемы и прочие тонкие нюансы звучания речи, доступные разве что узким специалистам. Мы просто оставим это как есть и посмотрим как оно работает в общем. Но это не всё. Теперь в самой миди-партии дорожки Cantor 2 тоже нужно прописать партию, соответственно которой будут звучать наши слова (слоги). Сделаем так, как на рисунке 6.

Теперь можно включить проигрывание в секвенсоре и убедиться, что у нас появился некий звук на выходе.

Далее настроим некоторые нюансы звучания. Сразу оговорюсь, что для исследования всех нюансов настройки Cantor 2 нужно писать целую книгу. В рамках этой статьи мы рассмотрим общие параметры. Итак, во-первых, можно выбрать уже готовый голос. Доступно их около десятка. Открыть их можно в верхней части программы, в опции Load voice (рис. 7).

По-умолчанию был установлен «Nikki», но я переставил его на «Luther». Можете попробовать различные голоса, как женские, так и мужские.

Во-вторых, здесь есть секция эффектов (собственно, раздел Effects, рис. 8).

Доступно 4 эффекта - Distortion, Echodelay, Chorus и Reverb. Хотя эти же эффекты можно добавлять и отдельно.

Про секции Phoneme и Voice нет смысла рассказывать, т.к. они довольно сложны в освоении и разобраться в их настройках может разве что довольно узкий специалист. Хотя никто не мешает покрутить ручки в этих секциях и таким образом изменить звучание. Либо корпеть над теорией синтезирования речи, а также над руководством пользователя Cantor, чтобы понимать как это всё должно работать. В общем, довольно много параметров, довольно сложно и довольно примитивный звук получается в итоге.

Тем не менее, даже новичок, если постарается, сможет получить звучание, наподобие того, что получилось у меня.

Fruity Loops Studio

Возможно, многие из вас, увидев Fruity Loops, удивятся, каким образом он попал в эту статью, ведь это скорее, нежели синтезатор речи . Всё дело в том, что имеет в своём арсенале очень неплохой синтезатор речи. Называется он Speech Synthesizer. И хоть его нет в виде отдельного плагина, но можно вставить сам FL как vst-плагин в вашу рабочую станцию и там уже использовать его Speech Synthesizer. Но я всё же предпочитаю создавать речевую партию в самом FL, затем экспортировать её в аудиофайл, после чего использовать в любой рабочей станции.

Итак, попробуем создать партию из предыдущего примера непосредственно в FL Studio. Вставим этот плагин в наш проект (рис.9).

Как только мы добавим его в проект, автоматически появится окно, предлагающее ввести наш текст. Можно долго не думать и сразу ввести нашу фразу из примеров выше (рис. 10).

Кроме того, можно сразу же установить и другие параметры речи, такие как голос (доступно около 20 голосов), стиль произношения, режим (шёпотом, с придыханием, либо обычный) и настройки темпа и тональности. Советую сразу настроить темп (у меня он, допустим 140, соответственно темпу проекта). Кнопка Listen позволяет прослушать партию «на лету», до её создания. После того, как мы подобрали нужные параметры нажимаем галочку, программа предложит нам сохранить наш файл с созданной речевой партией и в проекте создаётся новая партия с вокалом (рис. 11).

Нам не нужно заморачиваться - Speech Synthesizer создал за нас дорожку, которая представляет собой Fruity Slicer с созданной в нём партией, разбитой по нотам, где каждому слову соответствует отдельная нота (на рисунке 11 справа как раз видно, что у нас есть партия с 4 кусочками). Кроме того, в piano roll созданы дорожки для нот с подписанными словами, что очень удобно (рис. 12).

Всё довольно наглядно и просто. Не нужно прописывать фонемы, подбирать слоги, чтобы фраза звучала правильно. Достаточно просто ввести фразу - она будет звучать уже довольно сносно и разборчиво. Затем также просто можно переставлять слова и экспортировать партию в желаемый аудиоформат. Можно убедиться самим, прослушав пример.

Что же лучше из рассмотренных синтезаторов речи?

Лично моё мнение: лучше живая речь, живой вокал. Если же выбирать из вышеупомянутых программ, то, безусловно по количеству настроек и параметров выигрывает Cantor 2. Тем более, что он претендует на звание не просто синтезатора речи, а даже вокального синтезатора. Если выбирать по удобству, простоте и качеству звучания, я отдаю предпочтение Speech Synthesizer из Fruity loops.

Дополнение от редакции

Есть ещё бесплатная программа для синтезирования речи - . Можно настроить различные параметры и после предпрослушки сгенерировать результат в звуковой файл.