«Voice» - система синтеза русской речи Работу выполнил: ученик 11 класса МАОУ ДСОШ №7 Куковинец Дмитрий Валерьевич Голос: ученица 11 класса МАОУ ДСОШ №7 Демченко Людмила Львовна Руководитель проекта: учитель информатики МАОУ ДСОШ №7 Лидовская Виктория Викторовна Московская обл., г. Домодедово 2012 г. Цель работы: создать синтезатор речи, работающий в Linux. В рамках обозначенной цели ставим следующие задачи: 1) найти и изучить правила разбиения текста на звуки; 2) изучить систему обработки звука PulseAudio; 3) изучить особенности работы с wav-файлами, научиться их воспроизводить с помощью PulseAudio; 4) ознакомиться с существующими аналогичными программами. Методы решения поставленных задач: 1) изучение литературы; 2) изучение средств STL, PulseAudio и Gtk+. Использованные материалы: 1) Самоучитель C++ (Автор: Г. Шилдт); 2) Википедия, http://ru.wikipedia.org/ (теория о способах синтеза речи); 3) Сайт PulseAudio, http://pulseaudio.org/ (теория об использовании библиотек PulseAudio в C++ для воспроизведения звука); Системные требования: 1) Компилятор C++ (для компиляции voice и voice-gtk); 2) Стандартная библиотека C/C++, STL; 3) PulseAudio; 4) Gtk+ (для создания графического интерфейса voice-gtk). Актуальность: В наше время, когда автоматизация приобретает широкий размах, становится актуальным использование синтезаторов речи, например, в робототехнике, или как дополнительное средство взаимодействия компьютера с человеком (удобно использовать синтезаторы речи для оповещения пользователя ПК о каких-либо событиях). Оглавление Глава 1. Теория. Способы синтеза речи. ........................................................... 4 1.1. Параметрический синтез. ........................................................................ 4 1.2. Компиляционный синтез. ........................................................................ 4 1.3. Синтез по правилам. ................................................................................ 4 Глава 2. Настройка и установка Voice. .............................................................. 5 2.1. Организация файлов и каталогов проекта. ............................................ 5 2.2. Базы данных правил и звуков.................................................................. 5 2.3. Установка и удаление. .............................................................................. 6 Глава 3. Работа Voice. .......................................................................................... 7 3.1. Подготовительный этап. .......................................................................... 7 3.2. Получение текста от пользователя. ........................................................ 7 3.3. Преобразование введённого текста и воспроизведение. ...................... 7 3.4. Завершение работы. ................................................................................. 7 Глава 4. Аналоги. Сравнение с Voice. ................................................................ 8 4.1. Festival ....................................................................................................... 8 4.2. eSpeak ........................................................................................................ 8 4.3. Google ........................................................................................................ 8 4.4. Voice ........................................................................................................... 8 Заключение........................................................................................................... 9 Информация об оборудовании автора. .............................................................. 9 Приложение........................................................................................................ 10 Глава 1. Теория. Способы синтеза речи. Существует 3 основных способа синтеза речи: параметрический синтез; конкатенативный, или компиляционный (компилятивный) синтез; синтез по правилам. 1.1. Параметрический синтез. Данный способ предполагает предварительное кодирование речи и сохранение некоторых её параметров. Синтезатор раскодирует и воспроизводит обработанную кодировщиком речь в соответствии с этими параметрами. Для синтеза человеческой речи из печатного текста он неприменим. 1.2. Компиляционный синтез. Данный способ предполагает синтез речи из предварительно записанных слов. Из-за простоты и нетребовательности к аппаратуре (не надо никаких дополнительных устройств или сложных алгоритмов) используется в военной и бытовой технике, но неудобен для использования в повседневной жизни, т. к. требует словаря больших размеров. 1.3. Синтез по правилам. Данный способ имеет множество разновидностей, которые предполагают либо использование для синтеза специальных устройств (например, модель дыхательных путей и рта человека), либо использование различных звуковых элементов для синтеза (слоги, полуслоги и т. п.). Несомненный плюс этого способа – отсутствие необходимости знать заранее всё текстовое сообщение (синтез можно осуществлять по мере поступления текста). Voice реализует именно этот способ синтеза речи, используя звуки в качестве исходных элементов для синтеза. Обработка текста производится пословно, поэтому для произношения достаточно знать только текущее слово. Глава 2. Настройка и установка Voice. 2.1. Организация файлов и каталогов проекта. Примечание: 1) файл «sounds.db» (будет упоминаться в дальнейшем) расположен в каталоге с активным набором звуков; 2) «default» и «rules.db» – не являются обычными каталогом и файлом, это символьные ссылки, созданные при помощи команды: ln -s АДРЕС ИМЯ_ССЛЫКИ (Это сделано для того, чтобы была возможность легко изменить используемый набор звуков и БД правил.) 2.2. Базы данных правил и звуков. Voice необходимы два файла, содержащие базы данных звуков и правил. БД звуков представлена в следующем формате: ЗВУК_1 = ФАЙЛ_1 ЗВУК_1 = ФАЙЛ_2 звука ЗВУК_2 = ФАЙЛ_3 ... # Комментарий # Несколько файлов для В ней звукам сопоставляются wav-файлы, которые надо воспроизводить. Можно сопоставить одному звуку несколько файлов (тогда файлы будут воспроизведены в том же порядке, в котором записаны). Примечание: для большей скорости работы все файлы автоматически загружаются в оперативную память, поэтому не стоит экспериментировать с очень большими файлами. Имена файлов записываются относительно каталога «sounds/default/» в каталоге с данными Voice. БД правил представлена в следующем формате: СТРОКА_1_1_ИСХ = СТРОКА_1_1_КОН # Комментарий СТРОКА_1_2_ИСХ = СТРОКА_1_2_КОН # 2-е правило СТРОКА_1_3_ИСХ = ; # Пропуск подстроки ... --# Конец блока ... # Следующий блок правил В ней одним наборам символов сопоставляются другие. Например, если задано правило «А = а», то когда в тексте встретится «А», она будет заменена на «а», а «се = с*э» означает, что «се» будет заменено на «с*э». Правила просматриваются в том порядке, в котором они записаны, поэтому, например, запись: чь = ч* ь=; означает, что будет пропущен только мягкий знак, не следующий за «ч». Прямого отношения к используемому набору звуков эта БД не имеет, с её помощью происходит простое преобразование текста. 2.3. Установка и удаление. Для установки предназначен скрипт «install.sh»: ./install.sh [PREFIX] Для удаления предназначен скрипт «uninstall.sh»: ./uninstall.sh [PREFIX] PREFIX – каталог для установки (по умолчанию исполняемые файлы «voice» и «voice-gtk» будут установлены в каталог «bin», а данные – в каталог «share» внутри каталога PREFIX). Примечание: Полученные при установке префиксы сохраняются в файле «prefix.sh». Если Вы забыли, куда установлен voice и его данные (и «prefix.sh» сохранён), при удалении с помощью uninstall.sh не указывайте ничего. Если при установке использовались параметры по умолчанию, для корректного удаления файл «prefix.sh» не обязателен. Для удаления временных файлов, созданных при установке, предназначен скрипт «clear.sh»: ./clear.sh [ЛЮБОЙ_АРГУМЕНТ] Если необходимо удалить абсолютно все временные файлы, укажите ЛЮБОЙ_АРГУМЕНТ (не рекомендуется), иначе будут удалены все временные файлы, кроме скрипта «prefix.sh». Примечание: для каждого из данных скриптов можно просмотреть краткую справку, если ввести «-h» или «--help» первым аргументом. ВНИМАНИЕ: перед установкой, удалением или очисткой временных файлов необходимо перейти в каталог с программой (родительский каталог для каталогов «src», «voice-data» и др.)! PREFIX должен указываться относительно корневого каталога! Глава 3. Работа Voice. 3.1. Подготовительный этап. На данном этапе Voice производит обработку параметров, полученных через командную строку (см. Приложение), обрабатывает базы данных правил и звуков. Затем выполняется ветвление программы на несколько потоков (это необходимо для возможности продолжать обработку команд пользователя при одновременной обработке слов). В графической версии происходит также создание окна. 3.2. Получение текста от пользователя. Voice получает от пользователя текст (или считывает его из указанного файла) и разбивает его на слова, которые добавляет в очередь для последующей обработки. 3.3. Преобразование введённого текста и воспроизведение. На данном этапе Voice, в соответствии с заданными правилами, в несколько этапов преобразует каждое из полученных на предыдущем этапе слов. Количество этапов может быть произвольным, оно равно количеству блоков правил в БД правил. Затем, при помощи базы данных звуков, Voice разбивает преобразованное слово на звуки, определяет, какие файлы и в каком порядке необходимо воспроизвести, и воспроизводит их. Если режим проверки воспроизведения установлен в «always», проверка будет производиться после воспроизведения каждого файла (не рекомендуется использовать, т. к. образуются большие задержки). 3.4. Завершение работы. На данном этапе, если режим проверки воспроизведения установлен в «always» или «once», Voice выполняет проверку. Затем (если обработаны не все слова и файлы) производится очистка очередей слов и файлов, и работа завершается. Глава 4. Аналоги. Сравнение с Voice. Разумеется, существует аналогичное ПО. На аналогах для других платформ (например, функцией синтеза речи обладает переводчик Promt для Windows) останавливаться не будем, рассмотрим те, что работают в Linux. Синтезаторов речи для Linux немного, особенно русскоговорящих. Рассмотрим две такие программы: Festival и eSpeak, а также синтезатор речи в переводчике Google и сравним их с Voice. 4.1. Festival К несомненным плюсам Festival можно отнести высокое качество синтезированной речи, а также поддержку различных языков. Минусы: Festival работает очень медленно, задержка перед началом произношения может составлять от нескольких секунд до минуты. Кроме того, по видимому, Festival выводит звук в специальное устройство - «/dev/dsp», а этот механизм почему-то не всегда работает — Festival просто выводит сообщение об ошибке и завершает работу. Заметим также, что Festival после установки занимает несколько сотен мегабайт на жёстком диске, и что он не имеет графического интерфейса. 4.2. eSpeak eSpeak занимает на жёстком диске гораздо меньше места (всего несколько мегабайт). Он работает гораздо быстрее (нет задержки перед началом воспроизведения, возможна регулировка скорости), имеет множество настроек, поддерживает различные языки, для него существуют графические интерфейсы (например, Gespeaker). Но синтезированная им речь малопригодна для постоянного прослушивания, т. к. мало похожа на человеческую. 4.3. Google Заслуживает внимания синтезатор речи, встроенный в переводчик Google. Качество синтезированной им речи высоко (сравнимо с Festival). Но он неприменим для повседневного использования, т. к. сам синтезатор нельзя установить и использовать локально — для работы с ним необходимо подключение к сети Интернет. 4.4. Voice Рассмотрим Voice. Скорость его работы высока, задержка перед началом воспроизведения составляет не более 2-х секунд (время задержки можно поменять перед компиляцией), а место, занимаемое на жёстком диске, мало (около 2 МБ). Voice имеет графический интерфейс, позволяет воспроизводить речь с разной скоростью, имеет гибкую систему правил, позволяющую использовать его для синтеза речи на различных языках. Voice не синтезирует речь искусственно, как eSpeak, а составляет её из предварительно записанных звуков, что (при хорошем качестве записей) позволяет добиться «человеческого» звучания. Программа Voice спроектирована в расчёте на работу в многопоточном режиме, что позволяет достичь хорошей управляемости воспроизведением и непрерывности воспроизведения. Заключение. Все задачи, поставленные в рамках данного проекта, решены. Автор признаёт, что на данном этапе развития программа Voice ещё далека от совершенства, т. к. некоторые аспекты требуют наличия специальных возможностей и навыков (в частности, запись и обработка звука). Информация об оборудовании автора. Voice создан и протестирован на системе со следующими характеристиками: Железо: Acer Aspire 5920g (Core 2 Duo 2,4 GHz, 2 GB RAM, Nvidia GeForce 8600M) ОС: Ubuntu 10.04 LTS Lucid Lynx (x86_64), gcc 4.4.3 Примечание: вся информация о работе вышеперечисленных программ получена при личном их использовании на данной системе. Приложение. Поддерживаемые параметры: s ЧИСЛО Установить скорость воспроизведения: ЧИСЛО (по умолчанию: 1) f ФАЙЛ Читать текст из файла ФАЙЛ (для чтения из нескольких файлов используйте ключ повторно) S ЗВУК_БД Использовать базу данных звуков ЗВУК_БД R ПРАВ_БД Использовать базу данных правил ПРАВ_БД q ЧИСЛО Установить уровень подробности вывода сообщений (поэкспериментируйте с этим параметром, если надо получать от Voice уведомления, имеет смысл указывать ЧИСЛО от 0 до 5) c АРГУМЕНТ Проверять, всё ли воспроизведено (АРГУМЕНТ: no - не проверять, once - один раз, always - всегда) h Показать справку и выйти Пример: voice -s2 -f hello.txt -q1 -f world.txt -R rules.db Скорость воспроизведения звуков будет в 2 раза выше, будут выводиться некоторые сообщения (в терминале), чтение будет производиться из файлов «hello.txt» и «world.txt», а вместо стандартной базы данных правил будет использоваться «rules.db». Поддерживаемые команды (для консольной версии): play Начать воспроизведение pause Приостановить воспроизведение stop Остановить воспроизведение next Перейти к следующему слову sleep Усыпить сервер (сервер не будет принимать слова на обработку) exit Выйти speed ЧИСЛО Установить скорость воспроизведения равной ЧИСЛО file ФАЙЛ Обработать файл print АРГУМЕНТ rules Печать БД правил sounds Печать БД звуков playlist Печать очереди слов filelist Печать очереди файлов help АРГУМЕНТ params Справка по параметрам командной строки sounds Справка по БД звуков rules Справка по БД правил about Информация о программе others Прочее all Всё Примечание: все команды должны при вводе отделяться от других слов пробельными символами. Команды «speed», «file», «print» и «help» умеют давать подсказки, если ввести их без аргумента.