Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kurs_12-12-19.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
175.25 Кб
Скачать

III.Практическая часть

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

Для начала описания, необходимо определить некоторые используемые понятия:

Лексема – абстрактный элемент морфологического анализа в лингвистике, грубо говоря, соответствующий слову.

Токен – последовательность символов в лексическом анализе, соответствующая лексема. Далее будут использоваться дополнительные характеристики: графемные токены обозначаются слова, а так же обычные разделители, такие как пробел, дефис, апостроф и т.п. Символьные токены – всевозможные нечитаемые специальные символы, знаки препинания, числа: ‘#’, ‘$’, ‘;’, ‘4’, и т.п. (возможно, для русского так же здесь были бы отдельно стоящие ‘ь’, ‘ъ’, ‘й’.)

Токенизация – процесс разбивания строки на токены

Фонема – минимальная единица звукового строя языка, не имеющая самостоятельного лексического или грамматического значения, но служит для различения и отождествления значимых единиц языка (морфем и слов)

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

1. Tokenizer | Text preprocessing

Первым делом программа считывает полученный каким-либо образом текст в виде отдельной строки (которая, в свою очередь, – массив символов, причем в нашей программе они кодируются в UTF-8 или UTF-16).

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

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

Особое внимание приходится обращать на азиатские языки, так как, например, в японском языке нет типичного разделения на слова пробелами или другими символами, однако при произношении четко выделяются отдельные структуры, текстовое (хотя здесь ближе слово «иероглифическое») изображение которого и будет токеном

2. Word Analysisч

Далее, за 2 перехода мы преобразуем полученные наборы в ряд фонем.

Сначала каждую графему мы раскладываем на морфемы, часть речи, ударение и аффиксы (морфемы, присоединяемые к корню в процессе словообразования. Например, un-, re-, -ed, -ing, -ly и т.п.), использованные в ней. Теперь, если для отдельной полученной графемы удастся задать соответствующую фонему (или их последовательность), то мы меняем графему на эту фонему. Здесь же мы обрабатываем и символьные токены: их фонемы определены заранее их «общепризнанным названием».

3. Speech Analysis | “Grapheme2Phoneme” | Accentuation & Phrasing

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

4. Syllabification and Phonotactic Constraints

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

5. Phonetic to acoustic mapping

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

6. Cepstral smoothing and frame transformation

Здесь каждый фон, вместе с данными о длительности и преобразуется в звуковое окно. На этом шаге мы берем все объекты – какие-то (данные, определяющие фон, определенные архитектурой) параметры объекта и из него создаем маленький звук.В итоге получается много звуковых кусочков. Далее, для стыковки без дефектов, мы «размываем», или, точнее, подгоняем друг к другу, границы этих кусочков и передаем в финальный рабочий модуль, который склеит всё это в один сигнал и «отшлифует».

7. Synthesis

Теперь, имея набор «склееваемых» звуковых окон, мы создаем его представление ввиде звукового сигнала заданного в самом начале формата, применяем к нему соответствующие акцентовые признаки (изменяя скорость и громкость произношения) и выводим полученный массив байтов в output buffer.

IV. PSOLA

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]