|
|
Строка 1: |
Строка 1: |
- | [[Category:Sisyphus]]
| + | '''Было бы интересно узнать о возможностях речевых движков в LINUX''' |
- | | + | |
- | == Речевые технологии ==
| + | |
- | На этой странице рассматриваются основные вопросы работы с речевыми синтезаторами с точки зрения их применения как средства вывода информации при работе на компьютере без зрительного контроля. Сейчас подготовлены к работе следующие синтезаторы:
| + | |
- | * festival (с поддержкой русского языка);
| + | |
- | * espeak;
| + | |
- | * flite;
| + | |
- | * mbrola;
| + | |
- | * freetts;
| + | |
- | * ru_tts.
| + | |
- | | + | |
- | Не все из приведённых синтезаторов удовлетворяют описанной ниже схеме.
| + | |
- | | + | |
- | === Механизм унифицированной работы с речевыми синтезаторами ===
| + | |
- | Идея унифицированного вызова речевых синтезаторов заключается в том, чтобы перенаправлять речевую информацию от всех программ источников не напрямую в синтезатор, а в некоторое промежуточное программное обеспечение для предварительной обработки. Такой подход даёт возможность модифицировать порядок вызова синтезаторов и распространить изменения на все источники речи в системе. Также это позволяет исключить наложение звука при одновременном воспроизведении от разных программ.
| + | |
- | | + | |
- | При рассмотрении вопросов речевого вывода уделяется особое внимание:
| + | |
- | * '''расширяемости''' - добавление в систему нового синтезатора или программы-источника не должно требовать модификаций всей системы речевого вывода;
| + | |
- | * '''управляемости''' - у пользователя должен быть единый инструмент управления параметрами вывода речи.
| + | |
- | | + | |
- | === Речевой сервер VoiceMan ===
| + | |
- | В '''ALT Linux''' вывод речи выполняет речевой сервер <tt>VoiceMan</tt>. Этот речевой сервер разрабатывался с 2003г. непосредственно для применения в среде '''ALT Linux'''. В него периодически вносятся изменения для более детальной интеграции в общий механизм вывода речи. Тем не менее, он не содержит каких-либо зависимостей на компоненты '''ALT Linux''' и может использоваться в любом дистрибутиве.
| + | |
- | | + | |
- | Функции сервера:
| + | |
- | * автоматическое переключение между синтезаторами для обработки разных национальных языков;
| + | |
- | * передача текстовой информации для произношения по сети;
| + | |
- | * единый конфигурационный файл;
| + | |
- | * некоторые возможности по предварительной обработке текста перед произношением;
| + | |
- | * полная '''UNICODE''' реализация.
| + | |
- | | + | |
- | Конфигурационный файл может быть собран автоматически при каждом запуске сервера из фрагментов, сохранённых в специальной директории. Это очень важная особенность, плотно используемая в общей системе управления синтезаторами.
| + | |
- | | + | |
- | <tt>VoiceMan</tt> не занимается самостоятельно выводом звука. Другими словами, в нём нет кода, для обращения к какой-либо звуковой библиотеке. Вывод звука выполняет внешняя программа. Вызов каждого синтезатора заключается в порождении новой группы процессов, и передаче главному процессу текста на поток стандартного ввода.
| + | |
- | Описание внутреннего устройства <tt>VoiceMan</tt> можно прочитать в [ftp://ftp.altlinux.org/pub/people/msp/VoiceManArchitecture.pdf документе] с описанием архитектуры вывода речи на его основе.
| + | |
- | | + | |
- | В настоящий момент <tt>VoiceMan</tt> имеет следующие недостатки:
| + | |
- | * нет возможности дать команду серверу обновить конфигурацию без перезагрузки всего сервера;
| + | |
- | * неполная обработка команд <tt>emacspeak</tt>, что приводит к недостаточной регулировке скоростью речи;
| + | |
- | * неисследованная ошибка, приводящая к задержке при постраничной прокрутке в <tt>emacspeak</tt>;
| + | |
- | * в конфигурационных параметрах синтезатора явно указан вывод звука в <tt>ALSA</tt> через вызов утилиты <tt>aplay</tt>. Нужно сделать замену на специальный скрипт, который будет способен выполнять переключение на утилиту <tt>paplay</tt> пакета <tt>PulseAudio</tt> для случаев, когда требуется программное смешивание звука.
| + | |
- | Возможно, это будет не нужно, т. к. <tt>PulseAudio</tt> способен выполнять перехват вывода от <tt>ALSA</tt> нна системном уровне.
| + | |
- | | + | |
- | === <tt>Speech Dispatcher</tt> и другие варианты речевых серверов ===
| + | |
- | Речевой сервер <tt>VoiceMan</tt> не единственный вариант приложения, который способен решать описанные задачи. Также для этих задач может применяться известная разработка <tt>Speech Dispatcher</tt>. Существует возможность распространить приводимую концепцию и на <tt>Speech Dispatcher</tt>, если конфигурационные возможности сервера окажутся достаточно гибкими, чтобы удовлетворять схеме, описанной ниже.<tt>Speech DispatcherБ</tt> упакован и помещён в репозиторий. Любые предложения по его поддержки принимаются и будут рассмотрены. Это утверждение также справедливо и для сервера <tt>multispeech</tt>.
| + | |
- | | + | |
- | ПВ вопросах применения различных серверов речи существует только одно ограничение: <tt>VoiceMan</tt> предпочтительно оставить сервером по умолчанию для программ-чтецов. Это связано с тем, что при установки пользователь должен получать максимально подготовленную и согласованную среду. В настоящий момент этому вопросу уделяется серьёзное внимание.
| + | |
- | | + | |
- | == Как это устроено? ==
| + | |
- | === Директория <tt>/etc/tts.d</tt> ===
| + | |
- | Ключевую роль в описываемой схеме играет директория <tt>/etc/tts.d</tt>. Предполагается, что каждый пакет с речевым синтезатором будет добавлять в эту директорию один или несколько файлов, достаточных, чтобы организовать взаимодействие с этим синтезатором каких-либо речевых серверов.
| + | |
- | | + | |
- | Рассмотрим пример : мы хотим установить синтезатор <tt>espeak</tt>. В пакете этого синтезатора присутствуют два файла:
| + | |
- | * <tt>/etc/tts.d/espeak.voiceman</tt>
| + | |
- | *<tt>/etc/tts.d/espeak-ru.voiceman</tt>
| + | |
- | | + | |
- | Эти файлы содержат необходимую конфигурационную информацию для работы с английским и русским языком в сервере <tt>VoiceMan</tt>. Расширение <tt>.voiceman</tt> обозначает, что конфигурация предназначена именно для сервера <tt>VoiceMan</tt>. Допускается, чтобы в пакете также поставлялась конфигурационная информация и для других серверов. Например, файлы для <tt>Speech Dispatcher</tt> должны иметь расширение <tt>.spd</tt>.
| + | |
- | | + | |
- | Содержимое директории <tt>/etc/tts.d</tt> фактически показывает, какие синтезаторы способны работать с какими речевыми серверами. Содержимое файлов для <tt>VoiceMan</tt> будет приведено ниже.
| + | |
- | | + | |
- | === Использование файлов из директории <tt>/etc/tts.d</tt> ===
| + | |
- | | + | |
- | Как указывалось выше, сервер <tt>VoiceMan</tt> имеет единый конфигурационный файл, который при запуске составляется из фрагментов. В частности, директория <tt>/etc/voiceman.d</tt> содержит фрагменты, которые будут пристыкованы к главному файлу конфигурации при каждом запуске сервера.
| + | |
- | | + | |
- | Директория <tt>/etc/voiceman.d</tt> должна содержать символьные ссылки на файлы директории <tt>/etc/tts.d</tt>, указывающие, какие именно синтезаторы должны быть использованы в работе сервера. Манипулируя этими ссылками можно получить желаемое сочетание синтезаторов для работы с английским и русским языками. Эти ссылки не нужно создавать вручную. Доступны пять команд, для работы с ними:
| + | |
- | | + | |
- | * <tt>voiceman-available</tt> - перечисляет все синтезаторы, доступные для работы на текущей системе;
| + | |
- | * <tt>voiceman-list</tt> - перечисляет синтезаторы, подключенные для работы с <tt>VoiceMan</tt>;
| + | |
- | * <tt>voiceman-enable</tt> и <tt>voiceman-disable</tt> - подключают и отключают некоторый синтезатор;
| + | |
- | * <tt>voiceman-clear</tt> - отключает все синтезаторы от использования в <tt>VoiceMan</tt>.
| + | |
- | | + | |
- | При помощи этих команд можно выполнить манипуляции, и новая конфигурация будет задействована при следующем старте сервера.
| + | |
- | == Установка речевых компонентов на систему '''ALT Linux''' ==
| + | |
- | | + | |
- | Для установки речевого вывода на систему '''ALT Linux''' в репозитории <tt>4.1/branch</tt> доступны следующие пакеты:
| + | |
- | * <tt>voiceman-config-espeak</tt> - устанавливает речевой вывод, основанный на синтезаторе <tt>espeak</tt>;
| + | |
- | * <tt>voiceman-config-espeak-ru_tts</tt> - устанавливает речевой вывод, используя синтезатор <tt>espeak</tt> для английского языка и <tt>ru_tts</tt> - для русского;
| + | |
- | * <tt>voiceman-config-mbrola-ru_tts</tt> - устанавливает речевой вывод, используя синтезатор <tt>mbrola</tt> для английского языка и <tt>ru_tts</tt> - для русского. Доступен только для архитектуры <tt>i586</tt>.
| + | |
- | | + | |
- | Установка любого из этих пакетов выполнит все необходимые конфигурационные операции, которые требуются для работы программ-чтецов. Эти пакеты также можно ставить один поверх другого, как средство изменения конфигурации. В этом случае пакет, который был установлен системе, будет удалён автоматически. Эта операция совершенно безопасна, но изменение конфигурации при помощи средств <tt>VoiceMan</tt> предпочтительнее.
| + | |
- | | + | |
- | == Как упаковать речевой синтезатор в пакет <tt>RPM</tt>? ==
| + | |
- | | + | |
- | В этом разделе приводится сводка требований, которые нужны для правильной упаковки речевого синтезатора. Предположим, что мы упаковываем синтезатор с именем <tt>ttsname</tt>.
| + | |
- | * в секцию <tt>Requires:</tt> нужно добавить пакет <tt>tts-base</tt>;
| + | |
- | * в секцию <tt>BuildRequires:</tt> нужно добавить пакет <tt>tts-devel</tt>;
| + | |
- | * должен присутствовать файл <tt>/etc/tts.d/ttsname.voiceman</tt> с содержимым, которое будет приведено ниже. Указание директории <tt>/etc/tts.d</tt> нужно заменять макросом <tt>%_ttsdir</tt>;
| + | |
- | * в секции <tt>%preun</tt> необходимо для каждого <tt>*.voiceman</tt> файла добавить вызов <tt>/usr/sbin/tts-unregister ttsname</tt>, где <tt>ttsname</tt> в данном случае - это имя файла без расширения <tt>.voiceman</tt>. Вызов этой команды отключит использования синтезатора в установленных речевых серверах при удалении пакета.
| + | |
- | | + | |
- | Остановимся на содержимом файла <tt>/etc/tts.d/ttsname.voiceman</tt>. Он должен содержать следующий текст (пример взят из синтезатора <tt>espeak</tt>):
| + | |
- | <pre>
| + | |
- | [output]
| + | |
- | name = "eng_output"
| + | |
- | type = command
| + | |
- | lang = "eng"
| + | |
- | command = "espeak --stdout -p %p -s %r -a %v | voiceman-trim --words | aplay -t raw -f s8 -c 1 -r 22500"
| + | |
- | pitch = "0:1:99"
| + | |
- | rate = "0:200:90"
| + | |
- | volume = "0:0:150"
| + | |
- | cap list = "a eigh b bee c see d dee e ee f ef g gee h eighch i ei j jay k kay l el m em n en o oh p pee q quu r ar s es t tee u ou v vee w doubloo x ecs y why z zet"
| + | |
- | </pre>
| + | |
- | | + | |
- | Параметры <tt>name</tt> и <tt>type</tt> должны быть все одинаковые и иметь значение из примера. Параметр <tt>lang</tt> указывает язык и должен быть <tt>eng</tt> или <tt>rus</tt>.
| + | |
- | | + | |
- | Параметр <tt>command</tt> содержит текст команды, которую нужно вызвать, чтобы выполнить произношение текста. Предполагает, что сам текст поступит на поток стандартного ввода. В тексте команды могут присутствовать три подстановки : <tt>%v</tt>, <tt>%p</tt> и <tt>%r</tt>. На месте этих подстановок будут вставлено значения соответственно громкости, высоты и скорости речи.
| + | |
- | | + | |
- | Внутренние операции с этими параметрами сервер выполняет в диапазоне от 0 до 100. Перед вызовом команды текущее значение отображается в числовой диапазон, подходящий для конкретного синтезатора, а затем оставляется нужное количество десятичных знаков после запятой. Диапазон и количество знаков после запятой указываются тремя последующими параметрами из примера, где через двоеточие перечисляется количество знаков, нижняя граница и верхняя граница.
| + | |
- | | + | |
- | Последний параметр <tt>caplist</tt> содержит пары подстановок, где на первом месте стоит некоторая буква, а за ней следует короткая строка, которая должна быть озвучена в том случае, если была получена команда прочитать только эту букву. Эта возможность бывает очень полезна, т. к. не все синтезаторы выполняют разборчивое произношение отдельных букв.
| + | |