Как использовать все доступные голоса?

Я использую эту команду, чтобы вывести список доступных голосов

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 разных голоса (Хедда, Хейзел, Дэвид и Зира), но сами окна показывают гораздо больше динамиков.

введите описание изображения здесь

Поэтому я получаю только "-Desktop"-голоса. Как мне получить доступ к другим динамикам через С#?


person Vitalis Hommel    schedule 02.04.2018    source источник
comment
Я удалил свой ответ, потому что не мог заставить его работать локально, я попытался сделать копию реестра, упомянутую здесь: social.msdn.microsoft.com/Forums /en-US/   -  person hellyale    schedule 02.04.2018
comment
@hellyale Ты был на высоте. Используя эту копию реестра, я решил это. Может быть, вам нужно экспортировать его, как это сделал я? Экспортируйте весь Token Каталог Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices в файл. Замените все HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens в файле и запустите файл (я удалил голоса, которые у меня уже были раньше). Измените ЦП на x64. Наслаждаться.   -  person Vitalis Hommel    schedule 02.04.2018
comment
Хорошо, я собираюсь восстановить и добавить эти детали.   -  person hellyale    schedule 02.04.2018


Ответы (1)


Редактировать 2: OP заставил его работать, используя экспорт вместо копирования из командной строки.

Экспортируйте весь каталог токенов Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices в файл. Замените каждый HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens на HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens в файле и запустите файл (я удалил голоса, которые у меня уже были раньше).

На follow thread пользователь MSDN, A.Kelany, задает аналогичный вопрос, где он получает только два голоса от метода GetInstalledVoices.

Он сказал, что смог исправить это, выполнив следующие действия:

Мне удалось заставить его работать в тестовом проекте, выполнив следующие действия: я открыл реестр и заметил, что там есть узел: Цитата: Компьютер\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices

который содержал голоса, которые появляются в методе GetInstalledVoices приложения

и есть еще один узел:

Цитата: Компьютер\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices

который содержал все голоса, в том числе те, которые не появляются в вышеупомянутом методе,

Итак, я скопировал один из голосов со второго узла на первый узел, и это сработало!

Он также заявляет, что не мог строить на Any CPU после этого изменения, и ему пришлось изменить тип сборки на x64.

person hellyale    schedule 02.04.2018
comment
Wow6432Node — это место, где находятся 32-битные записи реестра в 64-битных окнах. Вам нужно скопировать их для правильной работы на любом процессоре. Просто выполните тот же процесс экспорта записей HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Speech_OneCore\Voices в HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\SPEECH\Voices. - person Jim Berg; 08.01.2019
comment
Некоторые голоса не отображались, но проблема с переходом на x64 устранена. - person Sagynbek Kenzhebaev; 14.06.2020