Приветствую всех.
Владимир пишет:
> интересно: при работе джоза синтезатор работает в отдельном потоке или
> в отдельном процессе?
Зависит от синтезатора, а не от JAWS.
Можно проследить цепочку на примере sapi4 или sapi5 синтезаторов.
Дело в том, что jls-драйвер работает в пространстве процесса jfw (и скорее всего,
в отдельном потоке), системные компоненты, например, sapi4 или sapi5 работают
тоже в пространстве использующего их процесса (т.е. в jfw), компоненты синтезатора,
взаимодействующие с системными компонентами sapi4 или sapi5, тоже работают в
пространстве использующего их процесса (все вышеназванное является динамически
загружаемыми библиотеками -- dll).
Как правило, на этом все заканчивается, но потенциально есть возможность с этой
точки запустить самостоятельный процесс, который и будет заниматься синтезом
речи, взаимодействуя с процессом jfw (т.е. взаимодействовать он, конечно, будет
с компонентом синтезатора, размещенным в пространстве процесса jfw).
Примером синтезатора с самостоятельным процессом является Elan Sayso/Tempo Multimedia
TTS .
Он имеет два компонента для взаимодействия с sapi4 и с sapi5 (так называемые
клиенты) и серверное приложение ettsengine.exe , работающее в самостоятельном
процессе.
> С очень постороннего взгляда :-) кажется сам
> синтезатор достаточно автономен чтобы работать в отдельном процессе.
Это обычная дилемма выбора модели многозадачного приложения: отдельный процесс
или поток -- что лучше?
Переключение между процессами сопровождается большими накладными расходами, что
снижает быстродействие взаимодействующих компонентов(плюс к этому механизмы межпроцессного
взаимодействия тоже не отличаются высоким быстродействием). Потоковый вариант
лишен таких недостатков, т.к. все компоненты расположены в одном адресном пространстве
и могут напрямую обращаться друг к другу (т.е. просто передавать управление на
нужный адрес).
С другой стороны, если в потоке происходит ошибка, то вышибает весь процесс (или
нужно принимать серьезные профилактические меры, чтобы избежать падения приложения).
Если же у вас два отдельных процесса, то ошибка в одном не приведет к аварийному
завершению другого (более того, оставшийся в живых может перезапустить упавший
процесс и продолжить работу).
В Windows системные компоненты sapi5 и sapi4 выполняются в пространстве использующего
их процесса, а в Linux известные мне речевые серверы реализованы как самостоятельные
процессы, с которыми скринридеры взаимодействуют либо через каналы, либо через
сокеты. (а речевые серверы уже взаимодействуют с "движками", непосредственно
выполняющими tts).
> Но, возможно, управление им со стороны джоза требует его выполнения в
> одном процессе?
JAWS работает с синтезаторами через собственные драйверы (jls), что позволяет,
написав соответствующий драйвер, адаптировать его к любому синтезатору, независимо
от того, как он реализован (внутрипроцессно, или как внешний процесс, или вообще
находится на другом компьютере).
Успехов. Анатолий.