Привет.

06.01.2010 19:22, Дмитрий Падучих пишет:
> А что это даст?
Не знаю. Но ни одно из существующих решений меня не удовлетворяет. 
Пробовал следующее:
1. Подключал ru_tts к speech-dispatcher при помощи модуля sd_generic. В 
качестве проигрывателя использовал pacat. Для этого пришлось написать 
маленькую утилитку на c++ (моя первая программа под linux) для 
конвертации 8 bit signed в 8 bit unsigned, ибо первый не поддерживается 
pacat'ом, да и вобще pulseaudio. Результат - отклик так себе (я 
сравниваю с тем, что имею под windows), текст на вход к ru_tts надо 
активно процессить, без этого вобще не возможно работать. Ни пунктуация, 
ни английские буквы, ни даже мягкие/твердые знаки им просто не 
обрабатываются. Я выдрал функции из драйвера newfon для NVDA, и оформил 
их в питоновский скрипт. Подключив его к связке перед ru_tts, получил 
чтение английского текста и т.д., украинский язык, но пунктуация по 
прежнему не читается (т.к. при адаптации newfon'а такая задача не 
ставилась, NVDA сам обрабатывает пунктуацию). В любом случае, этот 
вариант не подошел из-за отклика.
2. Собрал multispeech 2. Как обычно, без правки исходников и мейкфайлов 
не обошлось.
В ubuntu библиотека libboost_thread называется libboost_thread-mt. Так 
же, без добавления библиотеки X11 multispeech вылетает с ошибкой о 
нехватке bobcat'у этой библиотеки.
В файле src/server.cpp, line 68, надо
     catch (exception& failure)
заменить на
     catch (std::exception& failure)
ибо gcc ругается о том, что не знает, какой эксепшн имеется ввиду: 
std::exception / boost::exception.
Результат - multispeech молчит. пробовал посылать ему команды
q {hi}
d
без малейшего успеха. У меня настроена эмуляция alsa pulseaudio на alsa 
устройстве pulse, в конфиге multispeech везде параметр device 
устанавливал в pulse.
3. Собрал voiceman. Опять же, без правки исходников не обошлось:
в файле utils/trim.cpp нехватает инклуда stdio.h. gcc ругается на perror 
(undefined in this scope)
Ну да я уже привык.
Пробовал voiceman через sox (с параметром -t pulse) - отклик чуть лучше, 
чем через pacat, но все же не тот, к которому я привык. с sign2unsign | 
pacat все еще хуже, чем у speech-dispatcher.
Вобще, voiceman работает достаточно странно. Переключение с русского на 
английский в середине фразы (без знаков пунктуации) на мой взгляд не 
обосновано, паузы после каждой запятой тоже бъют по уху. Думаю, что 
voiceman вызывает синтезатор после каждого куска фразы, это так?
Удалить pulseaudio в ubuntu так просто уже нельзя, я читал, что после 
этого весь гномовский софт, который работает со звуком ломается, и даже 
регулятор громкости не работает. Да и сомневаюсь я, что pulseaudio 
корень всех бед. У них на сайте написано, что latency у звукового 
сервера ниже, чем у alsa dmix.
Возможно, хорошего отклика можно добится написав нативный вывод на 
pulseaudio без создания кучки процессов на каждое нажатие клавишь. Но 
это значит создание еще одного велосипеда "yet-another-speech-server", 
чего делать не хочется. Или это и есть пресловутый linux way? Допустим, 
можно выбросить из multispeech 2 portaudio и реализовать проигрывание 
аудио через нативные вызовы pulseaudio. Но попрежнему остается открытым 
вопрос с кривой обработкой команд протокола dectalk, из-за которого 
multispeech 2 не работает с orca, а, как я понял, протокол не 
документирован...
Да и все эти варианты не заставят меня забыть о прекрасном параметре 
"ускорение" в виндовом порте ru_tts aka newfon, которое не делает речь 
неразборчивой.
Еще теоретически можно портировать newfon под linux используя winelib, 
которая дает возможность вызывать виндовые dll (а значит и 
newfon_nvda.dll) из нативного linux-кода. Но боюсь, что с моими 
познаниями в linux и опытом программирования под него я сам в этом 
проекте зароюсь этак на год.

Lex
-- 
Blinux-rus mailing list
[email protected]
http://www.a11ywiki.org/cgi-bin/mailman/listinfo/blinux-rus

Ответить