|
FOROS PROFESIONALES WINDEV, WEBDEV y WINDEV Mobile |
| | | | | |
| Synthèse vocale : sélectionner la voix |
| Iniciado por dakota99, 04,dic. 2018 21:33 - 8 respuestas |
| |
| | | |
|
| |
Miembro registrado 34 mensajes |
|
| Publicado el 04,diciembre 2018 - 21:33 |
Bonjour,
Dans une appli Windev de souhaiterais utiliser la synthèse vocale pour lire des phrases en français puis en anglais. J'ai suivi l'exemple fourni qui utilise un assemblage Dot.net : system.speech et la procédure pTextToSpeech1 à laquelle il faut envoyer une chaîne de caractères à lire.
Jusqu'à présent le texte est lu correctement avec la voix par défaut. Je souhaiterais sélectionner une autre voix. Pour ce faire il faudrait connaître le nom des voix installées.
Dans la doc https://docs.microsoft.com/fr-fr/dotnet/api/system.speech.synthesis.speechsynthesizer… il est indiqué d'utiliser la méthode pTextToSpeech1.gclTextToSpeech.GetInstalledVoices()
Ma question : comment récupérer dans Windev la valeur retournée par cette méthode ? Le code suivant provoque l'erreur suivante : Un élément de type 'objet .NET' ne peut pas être converti vers le type 'chaîne UNICODE'. m est une chaîne = pTextToSpeech1.gclTextToSpeech.GetInstalledVoices()
Merci pour votre aide. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 334 mensajes |
|
| Publicado el 05,diciembre 2018 - 07:30 |
J’ai un peu bossé là dessus, attends que j’arrive au taf, et je publierait mes bouts de codes...
-- ——————————————————————————————————— Ce qui se conçoit bien se code clairement et se débogue facilement...
- Pastiche d’une citation de Nicolas Boileau - |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 334 mensajes |
|
| Publicado el 05,diciembre 2018 - 10:40 |
Exemple qui fonctionne chez moi mais en SAPI:
gautMaVoix est un objet automation "Sapi.SpVoice"
i est un entier;
SAI_Parole = "Transporteur Tayac, veuillez vous positionner au quai 13"
LIB_Compteur = gautMaVoix>>getVoices()>>Count
ListeSupprimeTout(COMBO_Liste_des_voix)
POUR i = 0 À Val(LIB_Compteur) - 1 ListeAjoute(COMBO_Liste_des_voix, gautMaVoix>>getVoices()>>Item(i)>>GetDescription); FIN
SI COMBO_Liste_des_voix..Occurrence > 0 ALORS ListeSelectPlus(COMBO_Liste_des_voix, 1) FIN
gautMaVoix>>rate = -POT_Rate
gautMaVoix>>volume = POT_Volume
gautMaVoix>>Voice = gautMaVoix>>getVoices()>>Item(ListeSelect(COMBO_Liste_des_voix) - 1)
gautMaVoix>>Speak(SAI_Parole, 1)
J'espere que mon bout de code va pouvoir t'aider.
-- ——————————————————————————————————— Ce qui se conçoit bien se code clairement et se débogue facilement...
- Pastiche d’une citation de Nicolas Boileau -Mensaje modificado, 05,diciembre 2018 - 10:44 |
| |
| |
| | | |
|
| | |
| |
| Publicado el 05,diciembre 2018 - 13:53 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 34 mensajes |
|
| Publicado el 09,diciembre 2018 - 21:57 |
Bonjour,
Curieusement le code en SAPI fonctionne sur la machine de développement qui est en Windows 7. L'exécutable fonctionne sur une machine qui tourne en WIN10. Par contre sur 3 autres machines en Windows 7 l'exécutable affiche un message d'erreur lors de l'exécution de la ligne gautMaVoix>>Speak(Txt, 1)
Message d'erreur : "vous avez appelé la méthode <Speak> En tenant d'invoquer la méthode <Speak> ou de lire la propriété <Speak> l'objet automation/activeX a renvoyé l'erreur suivante : erreur 80040154 erreur 80020003 le membre demandé n'existe pas.
Lorsque les voix sont testées via le panneau "Propriétés de la synthèse vocale" elles fonctionnent normalement.
Quelqu'un aurait-il une idée ? Merci pour votre temps. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 962 mensajes |
|
| Publicado el 10,diciembre 2018 - 06:00 |
hello, dakota99 a écrit :
Bonjour,
m est une chaîne = pTextToSpeech1.gclTextToSpeech.GetInstalledVoices()
Merci pour votre aide.
GetInstalledVoices retourne une collection d'objets dotnet de type InstalledVoice. Voici un exemple d'utilisation qui fait prononcer une phrase à toutes les voix installées sur le système :
Phrase est une chaîne =[ Sage chasseur âgé aux yeux chassieux, sachez chasser sans chien chose aisée, ce chat chauve caché sous ces six chiches souches de sauge sèche. ]
LaVoix est un SpeechSynthesizer voix est une InstalledVoice dynamique InfoVoix est une VoiceInfo dynamique
LaVoix.Rate = -5
LaVoix.Volume = 80
POUR TOUTE voix de LaVoix.GetInstalledVoices() InfoVoix = voix.VoiceInfo Trace (InfoVoix.Name) LaVoix.SelectVoice(InfoVoix.Name) LaVoix.Speak(Phrase) FIN
-- Ami calmant, J.PMensaje modificado, 10,diciembre 2018 - 06:01 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 34 mensajes |
|
| Publicado el 10,diciembre 2018 - 07:51 |
Bonjour
Un grand merci pour le code qui fonctionne parfaitement. (en tout cas sur la machine de développement)
Pour sélectionner une voix en particulier :
m est une chaîne = "Microsoft Server Speech Text to Speech Voice (fr-FR, Hortense)" LaVoix.SelectVoice(m) LaVoix.Speak(Phrase)
Reste plus qu'à l'essayer sur les différentes machines. Encore merci et une excellente journée. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 34 mensajes |
|
| Publicado el 14,diciembre 2018 - 21:43 |
Bonjour Le code ci-dessous fonctionne parfaitement sur la machine de développement sous Win 7 Pro. Les différentes voix sont affichées dans une fenêtre Trace.
Phrase est une chaîne ="Bonjour" LaVoix est un SpeechSynthesizer voix est une InstalledVoice dynamique InfoVoix est une VoiceInfo dynamique
LaVoix.Rate = -5 // La vitesse est entre -10 et +10 LaVoix.Volume = 80 // Le Volume est entre 0 et 100
POUR TOUTE voix DE LaVoix.GetInstalledVoices() // on balaie toutes les voix disponibles InfoVoix = voix.VoiceInfo Trace (InfoVoix.Name) m = InfoVoix.name Info(m) LaVoix.SelectVoice(InfoVoix.Name) LaVoix.Speak(Phrase) FIN
Par contre j'ai exécuté ce code sur 2 autres machines sous Win 7 Pro. Sur chacune le code suivant est affiché :
Traitement de 'Clic sur BTN_TST' (FEN_BVN.BTN_TST), ligne 15, thread 0 Que s'est-il passé ? L'invocation de la méthode du type a échoué Le framework .NET a renvoyé l'erreur suivante : Impossible de définir la voix. Aucune voix correspondante n'est installée ou la voix a été désactivée.
Code erreur : 200002 Niveau : erreur fatale
- Il est possible d'afficher toutes les voix mais il n'est pas possible d'en sélectionner une - info(m) : le nom de la voix affichée est bien correct - SpeechPlatformRuntime.msi x64 a bien été exécuté et les différentes voix ont été installées. - lorsqu'on affiche les différentes voix "Modifier les paramètres de la synthèse vocale" : toutes les voix installées sont bien affichées. Et quand on clique sur "Tester la voix" cela fonctionne.
Quelqu'un aurait-il une idée ? Merci pour votre temps. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 34 mensajes |
|
| Publicado el 14,diciembre 2018 - 22:05 |
Il semblerait que le problème vienne du fait que j'ai installé la version x64 de SpeechPlatformRuntime.msi. Cela me paraissait logique puisque ce sont des machines 64 bits. Apparemment il faut installer la version x86 et cela fonctionne sans rien changer au code.... |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|