[Homeros] Про скорость речи voiceman и другие вопросы

Michael Pozhidaev msp на altlinux.ru
Вс Окт 17 01:25:09 UTC 2010


Анатолий и Геннадий, здравствуйте!

Про скорость, это не баг, это я просто забыл предупредить. :)) Очень
прошу прощения. На моей системе были затычки, я забыл про них. Сейчас
постараюсь предельно подробно объяснить проблему, включая метод её
решения. если что-нибудь не ясно, переспрашивайте.

Значит так, новый voiceman-emacspeak пытается более глубоко обрабатывать
команды изменения параметров речи, которые шлют emacspeak, orca и
yasr. Как когда-то говорил, воспринимаемый формат изменён с espeak на
dectalk.

Во время разработки достаточно быстро обнаружился неожиданный прикол:
параметры по умолчанию, которые разные чтецы считают нормальными, имеют
разное значение. Другими словами, если настроить нечто для emacspeak, то
orca и yasr начинают болтать не в меру быстро или медленно. 

Для решения этой проблемы утилита voiceman-emacspeak воспринимает
несколько переменных, корректирующих обработку команд:

$VOICEMAN_EMACSPEAK_RATE_FRACTION - делитель темпа речи;

$VOICEMAN_EMACSPEAK_RPITCH_SHIFT - добавка к высоте голоса;

Ещё есть $VOICEMAN_EMACSPEAK_FAMILY - голос по умолчанию, если нужно,
чтобы orca илиyasr говорили другими голосами при соответствующих
настройках конфига, но сейчас это к делу не относится.

Короче говоря, если вызвать такие команды:

export VOICEMAN_EMACSPEAK_PITCH_SHIFT=20
export VOICEMAN_EMACSPEAK_RATE_FRACTION=10

то в orca всё будет нормально. Эти команды можно вызывать в любом месте перед
запуском voiceman-emacspeak. В частности, у меня для orca была отдельная
директория servers, где эти команды были вписаны в скрипт voiceman,
вызывавший затем voiceman-emacspeak. Поэтому я и забыл про это.

Но если эти команды вписать в /opt/voiceman/share/servers/voiceman, то
они начнут работать для всех чтецов, что не есть хорошо. Если выпустить
из рассмотрения yasr, то окончательным решением могло бы быть добавление
в файл /opt/voiceman/share/servers/voiceman перед строкой exec... таких
строк:

if [ -z "$EMACSPEAK_DIR" ]; then
    export VOICEMAN_EMACSPEAK_PITCH_SHIFT=20
    export VOICEMAN_EMACSPEAK_RATE_FRACTION=10
fi

Суть этих строк в том, что они проверят, если сервер вызывается не из
под emacspeak, то нужно немного модифицировать обработку
команд. Переменная $EMACSPEAK_DIR устанавливается самим emacspeak, можно
на неё ориентироваться, для какого чтеца используется сервер.

Так что вот. Я бы предложил вернуть параметры вызова синтезаторов в их
исходное значение, а затем просто немного поправить файл
/opt/voiceman/share/servers/voiceman, как написал выше. Надо придумать
что-нибудь такое и для yasr. Если Вы скажете, что всё сработало, я внесу
сразу изменения и в пакет.

> Попутно хочу спросить. Когда я изменил настройки и решил обновить
> параметры не перегружая voiceman командой
> $ /opt/voiceman/bin/voiceman-reload /tmp/voiceman.pid
> то мне было выдано примерно такое сообщение:
> ]- 19: /tmp/voiceman.pid: unexpected operator,
> хотя изменения в параметрах сразу же заработали. Чтобы это значило?

А можно посмотреть, что записано в файл /tmp/voiceman.pid? Кроме этого: 

1. Какой будет вывод на команду

echo "$(cat /tmp/voiceman.pid)"

Появится ли ошибка. 

2. voiceman-reload нужно запускать с правами того же пользователя,
который запустил и демона. Хотя в этих случаях он пишет permission
denied.

> Есть для меня и приятная неожиданность: стали читаться нормально
> цифры. Так что новая версия уже лучше.

Угу, очень рад.

> На запрос LANG я получил такой ответ:
> en_US.UTF-8

Угу, нормально. Кодировка явно указано, этого достаточно.

> Что теперь надо сделать, чтобы получить другую консоль?

Тут, Геннадий, не понял вопроса. Можно подробнее, что именно Вы хотите
получить?

-- 
Michael Pozhidaev. Tomsk, Russia. E-mail: msp на altlinux.ru
Russian info page: http://www.marigostra.ru/



Подробная информация о списке рассылки Homeros