Я ищу подходящее решение, чтобы разобраться со вторым заданием, которое было описано в моих предыдущих вопросах Распознавание речи для настольного приложения 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, но я не уверен, как и если это как-то возможно.
Любой совет, руководство или пример был бы очень полезен