Здравствуйте! Прежде всего хочу поблагодарить за столь быстрый и обстоятельный ответ.
>>>>> "Дмитрий" == Дмитрий Падучих <[email protected]> writes: Дмитрий> Самая большая проблема, по-моему, в том, что Multispeech Дмитрий> делает большие паузы перед тем, как что-нибудь Дмитрий> сказать. Особенно это заметно при вводе текста с Дмитрий> побуквенным озвучиванием и при перемещении по пустым Дмитрий> строкам (пауза перед звуком пустой строки). Внутри текста Дмитрий> после знаков препинания или при переключении на другой Дмитрий> голос эти паузы тоже очень заметны. Речь не всегда хорошо Дмитрий> прерывается. Вот это, пожалуй, самое интересное и удивительное для меня наблюдение. Дело в том, что скорость отклика речевого сервера я считаю одной из самых критичных его характеристик. Если бы она меня не удовлетворяла, вряд ли бы я решился на релиз. Я ведь прежде всего сам переключился полностью на новую версию как дома, так и на работе и использую ее постоянно уже не менее месяца. А произошло это лишь после того, как мне удалось-таки добиться удовлетворительной скорости отклика, то есть, по субъективным ощущениям, не хуже чем в прежнем варианте. А повозиться с этим пришлось. поначалу я боялся, что скорость отклика пострадает от применения довольно тяжеловесного механизма предобработки текста, но практика убедила меня в том, что корень проблемы не в этом, а в механике вывода звука. Я перепробовал целый ряд различных вариантов. Сначала хотел использовать библиотеку libao, привлекшую меня своей универсальностью и простотой. От этой идеи пришлось отказаться, так как там добиться приемлемого отклика оказалось практически невозможно (по крайней мере законными методами) из-за идиотской внутренней буферизации. Пробовал я и старый вариант с внешними проигрывателями, и реализацию подсистемы звукового вывода своими руками на базе libasound и обращений к драйверу через соответствующие вызовы ioctl. Но самый хороший вариант (быстрый, устойчивый и универсальный) получился с PortAudio. Скорость отклика, по моим субъективным ощущениям, стала не то чтобы сравнимой, но даже лучшей, чем в старой версии Multispeech, а каких-либо вылетов я за месяц постоянного использования на двух машинах не наблюдал вовсе ни разу. Пробовали ли вы как-нибудь играться с параметром "latency" в конфигурации? Дмитрий> Например, в буфере *scratch* (то есть, выделение голосом Дмитрий> там соответствующее и полный режим пунктуации, обычный Дмитрий> для меня) есть такие строки: Дмитрий> (let ((dtk-program Дмитрий> "/opt/multispeech-2.0/bin/multispeech")) (tts-restart)) Дмитрий> Если при чтении первой из них прервать речь, то Дмитрий> Multispeech прерывается, но тем не менее довольно часто Дмитрий> всё-таки проговаривает две закрывающие скобки. Я все время работаю с программными текстами (похожая ситуация) и ничего подобного не наблюдаю. Но ради чистоты эксперимента перенес эти строчки в свой scratch и попробовал. Прерывал речь в разных местах и разными способами, но описанного эффекта добиться не удалось. Прерывается мгновенно. Дмитрий> PulseAudio и другие звуковые серверы у меня не запущены. А у меня как раз работает Esound. Но Multispeech свой звук выводит мимо него просто на устройство по-умолчанию. У меня здесь звуковуха Sblive и Ubuntu 7.10 Gutsy. Старый Multispeech в этих условиях тоже работал без нареканий. На работе же звуковуха интегрированная. Определяется как I810-audio, если я правильно помню. Приемлемой работы удалось добиться лишь через aoss, хотя изредка звук вдруг пропадал по непонятным причинам. После установки Hardy (Ubuntu 8.04) все стало и вовсе погано: речь пропадала раз по пять за час работы. Правда, восстанавливалась по "C-e C-s" или (непонятно почему) при выводе звуков от других источников. Я так и не понял в чем тут дело. Ведь Multispeech для вывода звука тоже сторонние программы использовал. Пропадания эти можно было и легко спровоцировать быстрым потоком событий: например, быстро перемещаться по тексту вниз или вверх, чтобы строки не дочитывались. Там тоже у меня стоит Esound. Multispeech же выводит звук на /dev/dsp через aoss. В этой ситуации все работает идеально. Кое-какие проблемы появляются лишь при выводе на умолчательное ALSA устройство (как с aoss, так и без него) при использовании использовании ускорителя. Лишь сегодня обнаружил, - спасибо Сергею Флейтину. Но и в этом случае проблемы отнюдь не с откликом. Просто речевые фрагменты не дочитываются. Я все это так подробно и занудно описываю, так как очень хочется все-таки понять в чем дело, а у меня нет ни четких предположений, ни возможности воспроизвести ситуацию. Дмитрий> Другая проблема - тяжёлые зависимости. Нужные для сборки Дмитрий> библиотеки заняли 164MB свободного места на диске. А если Дмитрий> бы я установил Boost 1.37 вместо 1.34, то потребовалось Дмитрий> бы на 173MB больше. Думаю, при современных объемах дисков это не слишком существенно, хотя обилие зависимостей меня тоже несколько смущает. Тем не менее, я пошел на это совершенно сознательно, стремясь использовать где можно уже готовые и отработанные решения. Надеюсь, актуальность связанных с зависимостями проблем снизится, когда появится готовый пакет, который можно будет просто взять и установить. Я планирую добавить все необходимое для сборки Debian-пакета. Дмитрий> Лучше, наверное, искать файл конфигурации не в Дмитрий> /etc/multispeech.conf, а в ${sysconfdir}/multispeech.conf А у меня в окружении такой переменной нет. Дмитрий> с возможностью задать другой путь в командной строке или Дмитрий> в переменной окружения. Для других настроек тоже хорошо Дмитрий> бы иметь возможность переопределить значение из конфига в Дмитрий> командной строке или в переменной окружения. Например, Дмитрий> Multispeech может вызываться с кодировкой koi8-r из Дмитрий> Emacspeak и с utf-8 - из Orca. Веский аргумент. Возможность задания альтернативных настроек обязательно надо будет предусмотреть. Дмитрий> Если в файле конфигурации указан неправильный путь к Дмитрий> словарю произношения, то вместо Configuration error лучше Дмитрий> было бы выдать куда-нибудь предупреждение и использовать Дмитрий> значение по умолчанию (то есть, без словаря). Согласен. Это относится и к другим возможным нефатальным ошибкам. Тоже учту. Спасибо. Дмитрий> Когда Multispeech завершает работу с Configuration error, Дмитрий> в колонках слышен щелчок. Возможно, лучше Дмитрий> инициализировать звук уже после обработки конфига. Это довольно трудно устроить, если не вовсе невозможно без глобальной перестройки программы. Вряд ли игра стоит свеч. Параметры конфигурации используются только в конструкторах. Порядок же создания объектов отнюдь не произволен, а тесно связан с их взаимоотношениями. Можно считать этот щелчок издержкой архитектуры (терпимой, надеюсь) и использования PortAudio. Без PortAudio его не наблюдалось. Да и сейчас я его наблюдаю только дома. На работе - нет. Что же касается PortAudio, то эта издержка оказалась не единственной. Другая мне кажется более существенной: это некоторый разогрев процессора. Но я счел, что этим все-таки возможно заплатить за полученные прелести, так как проявляется это лишь во время речи. Во время молчания все обратно остывает. Дмитрий> Если запустить Multispeech в командной строке, то по C-d Дмитрий> он не завершает работу, хотя на команды перестаёт Дмитрий> реагировать. К счастью, помогает C-c C-c (в Emacs). Это я знаю и склонен воспринимать как bug. Тем более, что и устранить его очень легко. Спасибо, что напомнили. С уважением, Игорь. -- Blinux-rus mailing list [email protected] http://www.a11ywiki.org/cgi-bin/mailman/listinfo/blinux-rus
