2016-08-23 9 views
1

Я использую (SAPI) объект в своем приложении. Однако всякий раз, когда я выполняю свою функцию, голос работает, но производительность приложения (все остальное) приостанавливается до тех пор, пока голос не закончится! Интересно, связано ли это с приоритетом этого Speaking-Object. Могу ли я как-то снизить его до тех пор, пока остальная часть кода не будет выполнена в первую очередь? o_OПриоритет выполнения SAPI

Private Function Lara(ByVal script As String) As Object 
    Lara = CreateObject("SAPI.spvoice") 
    Lara.Voice = Lara.GetVoices.Item(1) 
    Return Lara.speak(script) 
End Function 

Private Sub Test_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Logo.Visible = True 
    Logo.Image = ResizeImage(My.Resources.Spell) 
    Lara("Welcome") 
End Sub 

Can (Lara) say "welcome" ПОСЛЕ загрузки формы и ее логотипа?

спасибо.


Благодаря г-жи Лели Gushurst, голос теперь работает в соответствии с кодом заказа (Приложение показывает вверх, его логотип, а затем голос). Решение заключалось в том, чтобы добавить (ком-ссылку) проект под названием «Библиотека речевых объектов Microsoft», а затем импортировать его в код.

Imports SpeechLib 

Private Sub Test_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Logo.Visible = True 
     Logo.Image = My.Resources.Spell 
     Dim Lara = CreateObject("SAPI.spvoice") 
     Lara.Voice = Lara.GetVoices.Item(1) 
     Lara.speak("Welcome", SpeechVoiceSpeakFlags.SVSFlagsAsync) 'It's declared now! 
End Sub 
+0

См. Событие [** Form.Shown **] (https://msdn.microsoft.com/en-us/library/system.windows.forms.form.shown (v = vs.110) .aspx), однако вы можете запустить это в другом потоке, если это блокирующий вызов. –

+0

Спасибо, мистер Винсент. Но мой вопрос заключается в снижении приоритета SAPI в целом. Таким образом, обработчик событий SHOWN этого не выполнит. – Sky7ure

+0

Не существует такой вещи, как «приоритет», когда дело доходит до выполнения кода. Он синхронный, асинхронный или многопоточный синхронный/асинхронный. –

ответ

0

Если вы посмотрите на документацию MSDN по SpVoice Speak method, он утверждает, что

«При синхронной речи используется в приложении, выполнение приложения будет заблокирован, а голос говорит, и пользователь .Это может быть приемлемым для простых приложений или без графического интерфейса пользователя (GUI), но , когда требуется сложное взаимодействие с пользователем, асинхронный разговор будет более подходящим ».

Итак, что вы, вероятно, захотите сделать, это посмотреть в разговоре с установленным SVSFlagsAsync. Поскольку это прямо сейчас, ваше исполнение блокируется.

Я думаю, ваш код будет выглядеть следующим образом:

Lara.speak(script, SpeechVoiceSpeakFlags.SVSFlagsAsync) 
+0

Большое вам спасибо! Тем не менее, когда я использую его внутри возврата моей функции, он сообщает мне, что (SpeechVoiceSpeaFlags) не объявлен. Как я могу объявить, что Enum точно; прежде чем даже называть его? – Sky7ure

+0

На этом веб-сайте есть рабочий пример того, что вы хотите сделать http://vbcity.com/forums/t/166589.aspx ... Обычно я не работаю с VB, но если вы все еще имея проблемы, я могу заглянуть в нее дальше. –

+0

Wowser! Это сработало. Все дело в добавлении «Библиотеки объектов речи Microsoft» к ссылкам на проект, затем «импортирует» его перед основным классом. Благодарю вас, госпожа Лесли.^_ ^ – Sky7ure

0

Я желаю мое было так просто. Mine SWITCHES голосует «на лету» в соответствии с голосами, встроенными в текст для чтения. И я быстро узнаю, что не так много людей пытаются это сделать.

Мои приложения - инструмент для устного редактирования Visual Basic (VS2010) для писателей, который говорит главу или историю, поэтому автор может печатать опечатки, некогерентные предложения и т. Д. В мужских или женских голосах, в зависимости от того, какой символ говорит. Прямо сейчас у меня есть только 7 голосов, которые доступны, хотя в свое время у меня было 12 и с 22 разными персонажами, назначенными им.

Он отлично работал на окнах 7, 8 и 8.1, но начал иметь большие проблемы с текстом окон.

Когда я, наконец, приступим к работе, я сделаю код доступным, может быть.

 Смежные вопросы

  • Нет связанных вопросов^_^