У меня есть форма, и я хочу разрешить пользователю получать асинхронный (возможно перекрывающийся) вывод текста в речь на основе контекста текстового поля при каждом нажатии кнопки.Я пытаюсь сделать это через SAPI 5.4 (Interop.SpeechLib.dll).Я признаю, что System.Speech или другие более «современные» функции будут работать намного лучше, но это мое текущее ограничение.Вот упрощенная версия моей функции:
private void VoiceText(string myText)
{
SpVoice voice = new SpVoice(); // Create new SPVoice instance
voice.Volume = 100; // Set the volume level of the text-to-speech voice
voice.Rate = -2; // Set the rate at which text is spoken by the text-to-speech engine
voice.Speak(text, SpeechVoiceSpeakFlags.SVSFlagsAsync); // Voice text (asynchronously?)
}
Использование SVSFlagsAsync DOES разрешает выполнение последующего кода, однако фактическое голосование всегда выводится синхронно (без перекрытия и существуют короткие паузы между экземплярами голосового вызова).Я пытался вызвать эту функцию как асинхронную задачу, а также в отдельном потоке, и все же это поведение остается.Это просто ограничение SpVoice?