OVH Cloud OVH Cloud

Problème synthèse vocale avec Thread

3 réponses
Avatar
Darwin
Bonjour,

Dans mon appli, j'ai inséré une synthèse vocale. Le problème est que tant
que le programme annonce le message, aucun autre traitement ne peut se
faire.
Exemple : lors de l'ouverture d'une fiche client, le programme annonce le
nom du client et une fois qu'il a fini de parler, la fiche s'affiche
Pour faire en sorte que la fiche s'ouvre pendant que le programme parle,
j'ai décidé d'utiliser les threads.
Je fais donc :
ThreadExécute("ThreadMessage",threadNormal,"MsgVocal",CLIENTS.NomClient)

Le première fois où l'on ouvre une fiche, ça marche nickel, mais dès qu'on
ferme et qu'on veut ouvrir une autre fiche, le programme plante avec comme
message d'erreur : "L'objet automation 'sapi.SPVOICE' n'est pas installé sur
votre système."

Pour info, voici ma procédure "MsgVocal"
----------------------------------------------------
PROCEDURE MsgVocal(sMessage)
Voice est un objet OLE dynamique
Voice = allouer un objet OLE("sapi.SPVOICE")
Voice>>Speak(sMessage)
-----------------------------------------------------

J'ai essayé de mettre un "ThreadArrete" à la fin de la procédure, mais ça ne
change rien.
Si quelqu'un a une idée, ça m'arrangerait bien.

Merci d'avance.

3 réponses

Avatar
patrice
"Darwin" a écrit dans le message de
news:450ee676$0$25944$
Pour info, voici ma procédure "MsgVocal"
----------------------------------------------------
PROCEDURE MsgVocal(sMessage)
Voice est un objet OLE dynamique
Voice = allouer un objet OLE("sapi.SPVOICE")
Voice>>Speak(sMessage)
-----------------------------------------------------

J'ai essayé de mettre un "ThreadArrete" à la fin de la procédure, mais ça


ne
change rien.
Si quelqu'un a une idée, ça m'arrangerait bien.

Merci d'avance.




et en ajoutant un "libérer" à la fin ?
Avatar
Darwin
Salut, merci pour ta réponse.
Je viens de tester "Libérer Voice", mais rien de mieux.
Merci quand même pour ta suggestion, et si tu as d'autres idées, ne te gêne
surtout pas.

"Darwin" a écrit dans le message de news:
450ee676$0$25944$
Bonjour,

Dans mon appli, j'ai inséré une synthèse vocale. Le problème est que tant
que le programme annonce le message, aucun autre traitement ne peut se
faire.
Exemple : lors de l'ouverture d'une fiche client, le programme annonce le
nom du client et une fois qu'il a fini de parler, la fiche s'affiche
Pour faire en sorte que la fiche s'ouvre pendant que le programme parle,
j'ai décidé d'utiliser les threads.
Je fais donc :
ThreadExécute("ThreadMessage",threadNormal,"MsgVocal",CLIENTS.NomClient)

Le première fois où l'on ouvre une fiche, ça marche nickel, mais dès qu'on
ferme et qu'on veut ouvrir une autre fiche, le programme plante avec comme
message d'erreur : "L'objet automation 'sapi.SPVOICE' n'est pas installé
sur votre système."

Pour info, voici ma procédure "MsgVocal"
----------------------------------------------------
PROCEDURE MsgVocal(sMessage)
Voice est un objet OLE dynamique
Voice = allouer un objet OLE("sapi.SPVOICE")
Voice>>Speak(sMessage)
-----------------------------------------------------

J'ai essayé de mettre un "ThreadArrete" à la fin de la procédure, mais ça
ne change rien.
Si quelqu'un a une idée, ça m'arrangerait bien.

Merci d'avance.



Avatar
patrice
"Darwin" a écrit dans le message de
news:45102ade$0$27366$
Salut, merci pour ta réponse.
Je viens de tester "Libérer Voice", mais rien de mieux.
Merci quand même pour ta suggestion, et si tu as d'autres idées, ne te


gêne
surtout pas.




essaie peut être d'avoir un seul thread (jamais fermé) pour gérer ton objet
voice (et ainsi de l'allouer une sule fois)

pseudo code:

thread:
allouer voice
boucle sans fin
lecture_bloquante_prochain_message(msg)
jouer msg
finboucle