Speech
Речевые технологии
На этой странице рассматриваются основные вопросы работы с речевыми синтезаторами с точки зрения их применения как средства вывода информации при работе на компьютере без зрительного контроля. Сейчас подготовлены к работе следующие синтезаторы:
- festival (с поддержкой русского языка);
- espeak;
- flite;
- mbrola;
- freetts;
- ru_tts.
Не все из приведённых синтезаторов удовлетворяют описанной ниже схеме.
Механизм унифицированной работы с речевыми синтезаторами
Идея унифицированного вызова речевых синтезаторов заключается в том, чтобы перенаправлять речевую информацию от всех программ источников не напрямую в синтезатор, а в некоторое промежуточное программное обеспечение для предварительной обработки. Такой подход даёт возможность модифицировать порядок вызова синтезаторов и распространить изменения на все источники речи в системе. Также это позволяет исключить наложение звука при одновременном воспроизведении от разных программ.
При рассмотрении вопросов речевого вывода уделяется особое внимание:
- расширяемости - добавление в систему нового синтезатора или программы-источника не должно требовать модификаций всей системы речевого вывода;
- управляемости - у пользователя должен быть единый инструмент управления параметрами вывода речи.
Речевой сервер VoiceMan
В ALT Linux вывод речи выполняет речевой сервер VoiceMan. Этот речевой сервер разрабатывался с 2003г. непосредственно для применения в среде ALT Linux. В него периодически вносятся изменения для более детальной интеграции в общий механизм вывода речи. Тем не менее, он не содержит каких-либо зависимостей на компоненты ALT Linux и может использоваться в любом дистрибутиве.
Функции сервера:
- автоматическое переключение между синтезаторами для обработки разных национальных языков;
- передача текстовой информации для произношения по сети;
- единый конфигурационный файл;
- некоторые возможности по предварительной обработке текста перед произношением;
- полная UNICODE реализация.
Конфигурационный файл может быть собран автоматически при каждом запуске сервера из фрагментов, сохранённых в специальной директории. Это очень важная особенность, плотно используемая в общей системе управления синтезаторами.
VoiceMan не занимается самостоятельно выводом звука. Другими словами, в нём нет кода, для обращения к какой-либо звуковой библиотеке. Вывод звука выполняет внешняя программа. Вызов каждого синтезатора заключается в порождении новой группы процессов, и передаче главному процессу текста на поток стандартного ввода. Описание внутреннего устройства VoiceMan можно прочитать в документе с описанием архитектуры вывода речи на его основе.
В настоящий момент VoiceMan имеет следующие недостатки:
- нет возможности дать команду серверу обновить конфигурацию без перезагрузки всего сервера;
- неполная обработка команд emacspeak, что приводит к недостаточной регулировке скоростью речи;
- неисследованная ошибка, приводящая к задержке при постраничной прокрутке в emacspeak;
- в конфигурационных параметрах синтезатора явно указан вывод звука в ALSA через вызов утилиты aplay. Нужно сделать замену на специальный скрипт, который будет способен выполнять переключение на утилиту paplay пакета PulseAudio для случаев, когда требуется программное смешивание звука.
Возможно, это будет не нужно, т. к. PulseAudio способен выполнять перехват вывода от ALSA нна системном уровне.
Speech Dispatcher и другие варианты речевых серверов
Речевой сервер VoiceMan не единственный вариант приложения, который способен решать описанные задачи. Также для этих задач может применяться известная разработка Speech Dispatcher. Существует возможность распространить приводимую концепцию и на Speech Dispatcher, если конфигурационные возможности сервера окажутся достаточно гибкими, чтобы удовлетворять схеме, описанной ниже.Speech DispatcherБ упакован и помещён в репозитарий. Любые предложения по его поддержки принимаются и будут рассмотрены. Это утверждение также справедливо и для сервера multispeech.
ПВ вопросах применения различных серверов речи существует только одно ограничение: VoiceMan предпочтительно оставить сервером по умолчанию для программ-чтецов. Это связано с тем, что при установки пользователь должен получать максимально подготовленную и согласованную среду. В настоящий момент этому вопросу уделяется серьёзное внимание.
Как это устроено?
Директория /etc/tts.d
Ключевую роль в описываемой схеме играет директория /etc/tts.d. Предполагается, что каждый пакет с речевым синтезатором будет добавлять в эту директорию один или несколько файлов, достаточных, чтобы организовать взаимодействие с этим синтезатором каких-либо речевых серверов.
Рассмотрим пример : мы хотим установить синтезатор espeak. В пакете этого синтезатора присутствуют два файла:
- /etc/tts.d/espeak.voiceman
- /etc/tts.d/espeak-ru.voiceman
Эти файлы содержат необходимую конфигурационную информацию для работы с английским и русским языком в сервере VoiceMan. Расширение .voiceman обозначает, что конфигурация предназначена именно для сервера VoiceMan. Допускается, чтобы в пакете также поставлялась конфигурационная информация и для других серверов. Например, файлы для Speech Dispatcher должны иметь расширение .spd.
Содержимое директории /etc/tts.d фактически показывает, какие синтезаторы способны работать с какими речевыми серверами. Содержимое файлов для VoiceMan будет приведено ниже.
Использование файлов из директории /etc/tts.d
Как указывалось выше, сервер VoiceMan имеет единый конфигурационный файл, который при запуске составляется из фрагментов. В частности, директория /etc/voiceman.d содержит фрагменты, которые будут пристыкованы к главному файлу конфигурации при каждом запуске сервера.
Директория /etc/voiceman.d должна содержать символьные ссылки на файлы директории /etc/tts.d, указывающие, какие именно синтезаторы должны быть использованы в работе сервера. Манипулируя этими ссылками можно получить желаемое сочетание синтезаторов для работы с английским и русским языками. Эти ссылки не нужно создавать вручную. Доступны пять команд, для работы с ними:
- voiceman-available - перечисляет все синтезаторы, доступные для работы на текущей системе;
- voiceman-list - перечисляет синтезаторы, подключенные для работы с VoiceMan;
- voiceman-enable и voiceman-disable - подключают и отключают некоторый синтезатор;
- voiceman-clear - отключает все синтезаторы от использования в VoiceMan.
При помощи этих команд можно выполнить манипуляции, и новая конфигурация будет задействована при следующем старте сервера.