UWP Windows.Media.SpeechSynthesis Viseme, SpeakProgress, SpeakCompleted событие с использованием - PullRequest
1 голос
/ 30 июня 2019

Я ищу подходящее решение, чтобы разобраться со вторым заданием, которое было описано в моих предыдущих вопросах Распознавание речи для настольного приложения Windows и Подходящее проектное решение UWP и, наконец, привело к другой проблеме:

Я хочу переписать / перестроить C# WinForms настольное приложение на Универсальная платформа Windows . Как я уже сказал, единственная причина, по которой я хочу использовать UWP в данном конкретном случае, это качество распознавания речи UWP (использование на других устройствах в настоящее время очень второстепенно для моего проекта).

Я разрабатываю некоммерческое, персональное, активно используемое настольное приложение Windows (без других устройств), которое требует лучшего качества распознавания речи, работает на ПК и может использовать системные ссылки или заменять аналогичные. Вот почему я ищу бесплатное решение. Итак, как отмечалось в предыдущих ответах, приложения UWP используют API распознавания речи в облаке и являются бесплатными только в том случае, если вы остаетесь на свободном уровне этого API.

Мое текущее WinForms настольное приложение включает использование системных ссылок как System.Speech.Recognition; и System.Speech.Synthesis; с VisemeReachedEventArgs Class, а также System.IO.Ports; для последовательного USB-подключения и внешней библиотеки EmguCV dll-s.

Использование System.Speech.Recognition; работает нормально, но недостаточно по сравнению с UWP Распознавание речи , и не совсем точно с требованиями в моем конкретном проекте, довольно часто событие дает много неточных результатов распознавания, особенно если речь не очень четкая или звук микрофона недостаточно громкий.

UWP Пространство имен Windows.Media.SpeechRecognition , которое Распознавание речи работает впечатляюще, идеально подходит для моих требований, но проблема в том, что мне нужно использовать VisemeReachedEventArgs Class с SpeechSynthesizer.VisemeReached Событие в приложении UWP.

В WinForms я использую

e.Viseme

событие с

void speech_VisemeReached(object sender, VisemeReachedEventArgs e)

инициализируется как

speech.VisemeReached += new EventHandler<VisemeReachedEventArgs>(speech_VisemeReached);

В приложении UWP для преобразования текста в речь с использованием Windows.Media.SpeechSynthesis; звучит так же, как System.Speech.Synthesis reference, но работает с

MediaElement mediaElement = this.TTS;

например, таким образом:

private async void TTS(string txt)
{               
    using (var speech = new SpeechSynthesizer()) 
    {                    
        SpeechSynthesisStream stream = await speech.SynthesizeTextToStreamAsync(txt);  
        mediaElement.SetSource(stream, stream.ContentType); 
        mediaElement.Play();
    } 
} 

Я пытаюсь выяснить, как можно получить событие Viseme с платформой UWP, а также события SpeakProgress и SpeakCompleted , что тоже очень важно в моем проекте.

Единственный ответ, который я нашел, - это использование пакета настольных приложений (Desktop Bridge) , приведенного в моем предыдущем вопросе UWP подходящее проектное решение пользователем Bite, но я не знаю, если это единственный и лучший способ, и я не уверен, что это решит эту конкретную проблему с определенной причиной.

Похоже, что UWP не поддерживает необходимые события Пространство имен Windows.Media.SpeechSynthesis in SpeechSynthesizerOptions Class

Другой возможный способ, который приходит мне в голову, - это вызов приложения UWP с желаемым Windows.Media.SpeechRecognition с использованием приложения WinForms. Учитывая, что я новичок в UWP, я не уверен, какой именно способ упаковки Упакуйте приложение UWP с Visual Studio UWP или просто упакуйте UWP с расширением рабочего стола и обработайте вызывающий метод, например, описанный в следующих ответах Как запустить универсальное приложение Windows из WinForms или Как передать строку в приложение UWP и запустить ее из приложения Windows Forms или, возможно, C # Консольные приложения UWP , будут правильными, простыми и уместными в этом случае для получения значения распознавания из UWP в WinForms, но я также не уверен, что это правильный способ делать то, что я хочу, и ничего не происходит более прямолинейно, я просто пытаюсь найти что-нибудь возможное, что даст мне желаемый результат

Лучшим из возможных решений было бы использование Windows.Media.SpeechRecognition в WinForms или наоборот с использованием VisemeReachedEventArgs Class с SpeechSynthesizer.VisemeReached Event в UWP, но я не уверен, как и если это как-то возможно.

Любой совет, руководство или пример был бы очень полезен

...