2012-05-23 5 views
0

Я разработал приложение TTS (текст в речь) на C# с использованием SAPI 5.x. Я хотел бы лицензировать или разрабатывать свой собственный речевой профиль (или файл голоса), который будет исключительно доступен для моего приложения.Могу ли я установить собственный голос SAPI исключительно с моим приложением, к которому у других приложений TTS не будет доступа?

То есть он не будет установлен так же, как обычные голоса SAPI установлены, потому что я не хочу, чтобы другие приложения TTS могли использовать голос И я не хочу, чтобы пользователи могли выбирать пользовательский голос в панели управления системы.

Возможно ли это? В настоящее время я использую SpeechSynthesizer.SelectVoice («Microsoft Anna»); но мне нужно как-то использовать SelectVoice для использования моего собственного «личного» голосового файла, который устанавливается вместе с моим приложением.

Благодарим за любые советы или помощь по этой теме.

ответ

0

Обычно SAPI хранит информацию о доступных TTS-голосах или языках ASR в реестре Windows (HKEY_CURRENT_USER \ Software \ Microsoft \ Speech).

Другие приложения TTS получат доступные голоса из реестра, поэтому ваш голос также будет доступен для них.

Невозможно обойти это.

Возможно, если вы напишете какой-либо код для добавления речевой информации в реестр при запуске приложения и удалите его, когда вы его закроете. Но это может быть немного ... проблематичным (в отношении прав доступа).

1

Вы можете, но это потребует некоторого (нетривиального) кодирования. SAPI находит свои объекты через Object Tokens, которые являются объектами COM, которые SAPI использует для управления взаимодействием между двигателями и приложениями.

Реализация ISpObjectToken по умолчанию для Microsoft использует реестр, но вы не обязаны использовать эту реализацию.

Если у вас была собственная реализация токенов-токенов (и нередко сторонние движки предоставляют свои собственные реализации токенов-токенов), вы можете создать сопоставление от вашего токена объекта к данным & для вашего частного голоса. Если вы не делаете этот токен общедоступным (т. Е. Вы не регистрируете свою реализацию в реестре как часть DllRegisterServer), тогда панель управления SAPI не сможет создавать какие-либо экземпляры вашего токена объекта, поэтому не будет отображаться вне приложения.