IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Synthèse Vocale avec Automation


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 39
    Points : 30
    Points
    30
    Par défaut Synthèse Vocale avec Automation
    Bonjour.
    Pour intégrer dans mon application un accès aux non-voyants, j'utilise la synthèse vocale SAPI et un moteur de synthèse gratuit de chez SCANSOFT.

    J'en profite pour vous donner les liens, pour ceux que cela pourrait intéresser:
    http://www.microsoft.com/france/chez...e/tts/tts.mspx

    Voici le code que j'utilise pour manipuler SAPI et faire parler mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Global
       voix est un objet Automation dynamique
     
    voix = allouer un objet Automation("sapi.SPVOICE")
    voix>>voice=:voix>>GetVoices("Name=ScanSoft Virginie_Dri40_16kHz")>>item(0)
    voix>>speak("Bonjour à tous!")
    Tout cela fonctionne très bien, sauf que la diction des textes par le moteur suspend le fonctionnement du programme.
    Or, je ne souhaite pas que l'utilisateur soit contraint d'attendre que chaque phrase soit lue pour continuer à travailler sur la fenêtre en cours.

    J'ai essayé Multitache(-2) et MultitacheRepeint() mais, tel que je l'utilise, ça ne change absolument rien.

    Quelqu'un aurait-il une idée?
    Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    La seule façon que je connais pour executer 2 taches en paralléle est d'utiliser les threads.

    Un thread devait suffir suffit de lui envoyer des messages pour lui dire "parle" ce qui fait que ton thread principal (celui chargé du reste IHM,timersys,...) n'est plus bloqué.

    A toi de synchroniser le tout
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par hegros
    La seule façon que je connais pour executer 2 taches en paralléle est d'utiliser les threads.
    Un thread devait suffir suffit de lui envoyer des messages pour lui dire "parle" ce qui fait que ton thread principal (celui chargé du reste IHM,timersys,...) n'est plus bloqué.

    Merci infiniment!! La solution était là.
    Après avoir essayé sans succès de lancer un thread depuis une classe contenant l'objet Automation SAPI, j'ai finalement trouvé mon bonheur en appelant depuis un thread une procedure qui crée l'objet SAPI en local, prononce la phrase passée en paramètre, puis libère l'objet.

    Cela m'oblige à créer un objet à chaque phrase à prononcer.
    Apparemment, on ne peut pas utiliser un objet Automation créé en global à l'intérieur d'un thread.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Pourquoi ne pas avoir cet objet en local dans la procédure du thread ?

    Dans cette procédure tu as une boucle infini et tu te mets en attends d'un message.Lorsque tu envoies un message ca libére le thread (l'objet lui ne bouge pas)

    Biensur avant d'envoyer ton message il faut que tu mettes a jour une variable avec la chaine à "parler"
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par hegros
    Pourquoi ne pas avoir cet objet en local dans la procédure du thread ?
    Je ne connais pas du tout les threads. Faut que je potasse ça.

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    D'accord n'hésite pas à poser des questions dessus.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    As tu essayé d'insérer un 1 après la phrase qui doit être dite:

    voix>>speak("Bonjour à tous!",1)

    Par défaut la méthode Speak de SAPI fonctionne de manière synchrone (et donc bloque toutes les autres actions). En rajoutant 1 tu lui permets de fonctionner de manière asynchrone.

    Essaie, cela a marché pour moi.

Discussions similaires

  1. Synthèse vocale avec JSP
    Par roura-12 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 27/05/2012, 20h30
  2. Synthèse et reconnaissance vocale avec speech sdk 5.1
    Par katebe dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/03/2009, 17h34
  3. Synthèse vocale
    Par Gilles Louïse dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 11/11/2005, 13h41
  4. petit probleme avec automation Excel
    Par Tempotpo dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 05/08/2005, 09h57
  5. synthèse vocale libre et gratuite
    Par widad_pgm dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 26/04/2004, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo