Как использовать все доступные голоса?
Я использую эту команду для вывода списка доступных голосов
private static SpeechSynthesizer sprecher;
...
sprecher = new SpeechSynthesizer();
...
private static List<VoiceInfo> GetInstalledVoices()
{
var listOfVoiceInfo = from voice
in sprecher.GetInstalledVoices()
select voice.VoiceInfo;
return listOfVoiceInfo.ToList<VoiceInfo>();
}
Я получаю только 4 разных голоса (Хедда, Хейзел, Дэвид и Зира), но сама Windows показывает гораздо больше динамиков.
Поэтому я получаю только голоса "-Desktop". Как я могу получить доступ к другим ораторам через C#?
1 ответ
Редактировать 2: OP заставил его работать, используя экспорт вместо копирования из командной строки
Экспортируйте весь каталог токенов компьютера \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices в файл. Замените все маркеры HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\ на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\ в файле и запустите файл (я удалил голоса, которые у меня уже были ранее).
В следующей ветке пользователь MSDN, A.Kelany, задает аналогичный вопрос, где он получает только два голоса от GetInstalledVoices
метод.
Он сказал, что смог это исправить, сделав следующее:
Мне удалось заставить его работать в тестовом проекте, выполнив следующее: я открыл реестр и заметил, что есть узел: Цитата: Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Voices
который содержал голоса, которые появляются в методе приложения GetInstalledVoices
и есть еще один узел:
Цитата: Компьютер \ HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Speech_OneCore \ Voices
который содержал все голоса, в том числе те, которые не появляются в вышеупомянутом методе,
Поэтому я скопировал один из голосов со второго узла на первый, и это сработало!
Он также заявляет, что он не мог опираться на Any CPU
после этого изменения, и пришлось изменить тип сборки на x64