2016-08-23 4 views
1

I objet utilise (SAPI) dans ma demande. Cependant, chaque fois que j'exécute sa fonction, la voix s'exécute mais la performance de l'application (tout le reste) est mise en pause jusqu'à ce que la voix se termine! Je me demande si cela a quelque chose à voir avec la priorité de cet objet parlant. Puis-je l'abaisser jusqu'à ce que le reste du code s'exécute en premier? o_OSAPI exécution Priorité

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) dit "bienvenue" APRÈS avoir chargé le formulaire et son logo?

Merci.


Merci à Mme Lesley Gushurst, la voix fonctionne maintenant selon l'ordre de code (application apparaît, son logo, puis la voix). La solution consistait à ajouter une référence (com-reference) au projet "Microsoft Speech Object Library", puis à l'importer dans le code.

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

Voir la [** événement Form.Shown **] (https://msdn.microsoft.com/en-us/library/system.windows.forms.form.shown (v = vs.110) .aspx), mais vous pouvez l'exécuter dans un autre thread s'il s'agit d'un appel bloquant. –

+0

Merci, monsieur Vincent. Mais ma question concerne la réduction de la priorité de SAPI en général. Ainsi, le gestionnaire d'événements SHOWN ne le fera pas. – Sky7ure

+0

Il n'y a pas de "priorité" en ce qui concerne l'exécution de code. Il est synchrone, asynchrone ou multithread synchrone/asynchrone. –

Répondre

0

Si vous jetez un oeil à la documentation de MSDN SpVoice Speak method, il affirme que

« Quand la parole synchrone est utilisé dans une application, l'exécution de l'application est bloquée tandis que la voix parle, et l'utilisateur peut être acceptable pour les applications simples, ou ceux sans interface utilisateur graphique (GUI), mais lorsque l'interaction de l'utilisateur sophistiqué est prévu, asynchrone sera généralement plus approprié. "

Donc, ce que vous voudrez probablement faire est de parler en appelant parler avec le SVSFlagsAsync en cours de définition. Comme c'est le cas maintenant, votre exécution est bloquée.

Je pense votre code ressemblerait à ceci:

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

Merci beaucoup! Pourtant, quand je l'utilise dans le retour de ma fonction, alors il me dit que (SpeechVoiceSpeaFlags) n'est pas déclaré. Comment puis-je déclarer cela exactement? avant même de l'appeler? – Sky7ure

+0

Ce site semble avoir un exemple de travail de ce que vous cherchez à faire http://vbcity.com/forums/t/166589.aspx ... Je ne travaille pas normalement avec VB, mais si vous êtes encore J'ai des problèmes, je peux regarder plus loin. –

+0

Wowser! Ça a marché. Il s'agissait d'ajouter "Microsoft Speech Object Library" aux références du projet, puis "l'importe" avant la classe principale. Merci beaucoup, madame Lesley.^_ ^ – Sky7ure

0

Je souhaite le mien était facile. Mine SWITCHES voix à la volée en fonction des voix intégrées dans le texte à lire. Et je découvre rapidement que peu de gens essaient de le faire. Mes applications est un outil d'édition verbale Visual Basic (VS2010) pour les écrivains qui parlent le chapitre ou l'histoire afin que l'auteur puisse entendre des fautes de frappe, des phrases incohérentes, etc. en voix masculine ou féminine, selon le personnage qui parle. À l'heure actuelle, je n'ai que 7 voix disponibles, mais à un moment donné, j'ai eu 12 et 22 caractères différents qui leur ont été assignés.

Il a bien fonctionné sur Windows 7, 8 et 8.1, mais a commencé à avoir du texte des grandes fenêtres de problèmes.

Quand je reçois enfin, je ferai travailler le code disponible, peut-être.