Вызов SAPI на C# для TTS, но он использует скрытое меню вместо Windows по умолчанию

#c# #sapi #blind

Вопрос:

Поэтому для этого давайте просто воспользуемся тестовой программой, предоставленной Microsoft, чтобы все было просто. Перед запуском вам нужно будет перейти к управлению пакетом nuget для проекта и добавить speech.synthesis. Но после этого это сработает.

 using System;
using System.Speech.Synthesis;

namespace SampleSynthesis

{
    class Program
    {
        static void Main(string[] args)
    {

        // Initialize a new instance of the SpeechSynthesizer.  
        SpeechSynthesizer synth = new SpeechSynthesizer();

        // Configure the audio output.   
        synth.SetOutputToDefaultAudioDevice();

        // Speak a string.  
        synth.Speak("This example demonstrates a basic use of Speech Synthesizer");

        Console.WriteLine();
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }
}
 

Итак, вот в чем проблема, он будет говорить голосом по умолчанию. Но он не использует обычный голос по умолчанию. Если вы перейдете в панель управления — измените настройки текста на речь, эти настройки не повлияют на используемый здесь голос.

Но если вы зайдете сюда: %windir%SysWOW64речьSpeechUXSAPI.cpl

И измените настройки там, это повлияет на программу.

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

Я попытался посмотреть, можно ли прочитать ключ reg, а затем выбрать его из списка после прочтения ключа, но тот, который я нашел:

КомпьютерHKEY_CURRENT_USERПРОГРАММНОЕ обеспечениеMicrosoftРечьГолоса

Отображается значение по умолчанию для меню SAPI, а не для меню панели управления.

Я прочитал всю документацию по командам, но не вижу способа заставить ее обратить внимание на фактическое значение по умолчанию для пользователя. Использование голоса, который они не выбрали с помощью обычных опций, кажется странным, так как изменение голоса для моей программы потребовало бы, чтобы они перешли в это странное меню.

Как бы я заставил SAPI обратить внимание на меню панели управления?

ПРАВКА: Для уточнения также не менее важно получить фактическую скорость и громкость текста, которые были настроены.

Ответ №1:

Это верно. SAPI-это очень, очень старый API, и Windows 8 (и не только) перешла на API WinRT TTS.

В частности, параметры TTS панели управления Windows устанавливают значения по умолчанию для API WinRT TTS в Windows.Медиафайлы.Пространство имен для синтеза речи.

К счастью для вас, однако, изменение кода C# для использования API WinRT довольно просто; большая часть работы должна заключаться в изменении пространства имен и ссылки на сборку.