Page 1 sur 2

Comate et les Agents windows !!

Publié : ven. 27/févr./2009 0:20
par Backup
Comate est une lib a récuperer ici :
http://www.purebasic.fr/english/viewtop ... ght=comate

elle permet d'utiliser sans effort, les activeX

et donc ... les agents microsoft !

faire grace a eux, de la synthese vocale, des animations etc ...
c'est plus sympath de faire parler un agent, plutot qu'une bete boite d'alerte :)

l'exemple fourni avec comate concernant les agents, n'est pas tres complet aussi , je me suis permis de le peaufiner un peu , en y ajoutant pratiquement toute les animations des agents, mais aussi de pouvoir choisir les agents microsoft (prenez soin de les installer auparavent )

ces agents sont telechargeables ici :
http://www.microsoft.com/MSAgent/downloads/user.aspx

profitez en pour récupérer aussi le moteur de synthèse vocale en français
et aussi en espagnole, puisque mon code montre comment on peut changer de voix facilement :)
recuperez aussi le moteur de reconnaissance vocale
mon petit doigt me dit que ça pourrai bien servir un jour :)

voici donc le code a copier a la place du code "Demo_Agent.pb"
du dossier "Basic demo" :)

code edité le 04/03/2009

Code : Tout sélectionner

;EnableExplicit

; recuperer les agents et la reconaissance vocale ici
;http://www.microsoft.com/MSAgent/

IncludePath "..\"
XIncludeFile "COMate.pbi"

Define.l cHeight, cWidth


If ExamineDesktops()
    cWidth  = DesktopWidth(0)   / 2 - 50
    cHeight = DesktopHeight(0)  / 4
EndIf 

Define.COMateObject oAgent, oGenie

oAgent = COMate_CreateObject("Agent.Control.1")

If oAgent
    oAgent\SetProperty("Connected = #True") 
    
    ;SL.Add(IAgentCtlCharacter(id).Name); 
    
    
    
    
    ; **************************** le peroquet ***********************
    ; oAgent\Invoke("Characters\Load('peedy','Peedy.acs')") ; 
    ;oGenie = oAgent\GetObjectProperty("Characters('peedy')")
    ; *************************************************************
    ; **************************** le Genie  ***********************
    ; oAgent\Invoke("Characters\Load('Genie','Genie.acs')") 
    ; oGenie = oAgent\GetObjectProperty("Characters('Genie')")
    ; *************************************************************
    
    ; **************************** le Robot  ***********************
    ;oAgent\Invoke("Characters\Load('Robby','Robby.acs')") 
    ;oGenie = oAgent\GetObjectProperty("Characters('Robby')")
    ; *************************************************************
    
    ; **************************** Merlin  ***********************
    oAgent\Invoke("Characters\Load('Merlin','Merlin.acs')") ;
   oGenie = oAgent\GetObjectProperty("Characters('Merlin')")
    ; *************************************************************
    ; ************************** personages suplementaire *****************************************
    ; **************************** Oscar ***********************
    ; a recuperer ici : http://www.agentland.fr/cgi-bin/relocationFR.cgi?http://www.agentland.fr/Download/6Artificial_Life/Desktop_Agents/Ms_agents/Characters/more2.html
    ;  oAgent\Invoke("Characters\Load('Oscar','Oscar.acs')") ;
    ;   oGenie = oAgent\GetObjectProperty("Characters('Oscar')")
    
    ; *******************************; a recuperer ici : http://www.agentland.fr/cgi-bin/relocationFR.cgi?http://www.agentland.fr/Download/6Artificial_Life/Desktop_Agents/Ms_agents/Characters/more2.html
    ;  oAgent\Invoke("Characters\Load('Baron','Baron.acs')") ;
    ;   oGenie = oAgent\GetObjectProperty("Characters('Baron')")
    ; ******************************************************************************************
    
    ; *******************************; a recuperer ici : http://www.agentland.fr/cgi-bin/relocationFR.cgi?http://www.agentland.fr/Download/6Artificial_Life/Desktop_Agents/Ms_agents/Characters/more2.html
     ; oAgent\Invoke("Characters\Load('Actmanii','Actmanii.acs')") ;
    ;   oGenie = oAgent\GetObjectProperty("Characters('Actmanii')")
    ; ******************************************************************************************
    
    If oGenie
        oGenie\Invoke("show")
        Delay(3000)
        oGenie\Invoke("MoveTo("+StrU(cWidth)+", "+StrU(cHeight)+", 3000)") ; x,y,vitesse de deplacement
        ; les animations :
        
        
        ; 
        oGenie\Invoke("LanguageID=$409") ; $40C force a parler français ($409 pour l'anglais et la reconnaissance vocale)
        ;************** comment changer la voix !! *****************************
        ; aller dans la base de registre cherchez la chaine qui caracterise la voix !!
        ;hklm\Software\Microsoft\
        ;  Debug  oGenie\GetStringProperty("TTSModeID")
        veronique.s="{0879A4E0-A92C-11d1-B17B-0020AFED142E}" ;voix française
        pierre.s="{0879A4E1-A92C-11d1-B17B-0020AFED142E}" ;voix fançaise
        carmen.s="{2CE326E0-A935-11d1-B17B-0020AFED142E}" ; voix espagnole a telecharger
        julio.s="{2CE326E1-A935-11d1-B17B-0020AFED142E}" ; voix espagnole a telecharger
        ;;;virginie.s="{CAC6785B-655E-4ae1-A656-BDEFD18DC46C}" ; Sapi 5 ne marche pas avec les agents
        ;;;Sam.s="{65DBDDEF-0725-11D3-B50C-00C04F797396}";Sapi 5 ne marche pas avec les agents
       ;  oGenie\SetProperty("TTSModeID='"+pierre.s+"'") ; choisi pierre si présent
        
        
        
        
        ;Peedy.Commands.Add('calcul','&lancer la calculatrice','(calculatrice)',True,True);
        
     
        
        ; Peedy.Commands.Add('Bonjour','&Bonjour','(Hello | Bonsoir)',True,True);  
        ; 
        ; Character.Commands.Add("Hello",  // Command name
        ; 
        ; (object)"Say Hello",  // Display name
        ; 
        ; (object)"([say](hello | hi) | good (day | morning | evening))", // SR String
        ; 
        ; (object)true,  // Enabled
        ; 
        ; (object)true);  // Visible
   ;    oGenie\Invoke("Commands\RemoveAll");
        
   ;    oGenie\SetProperty("Commands\Caption='Test english voice'")
   ;    oGenie\SetProperty("Commands\Voice='Merlin recognize english'")
        
   ;     oGenie\Invoke("Commands\Add('yes','&yes','(yes |oui)',#true,#true");
    ;    oGenie\SetProperty("Commands\Visible=#true");
        
        
    ; oGenie\Invoke("listen(#true)")
       ; Debug oGenie\GetStringProperty("listen(0)")
     ;  Repeat
      
          ; CommandeVocale:=IAgentCtlUserInput(UserInput).name;
     ;   Debug oGenie\GetStringProperty("IAgentCtlUserInput\name")
       ; If oGenie\Invoke("IAgentCtlUserInput\name")<>""
         
      ;      Debug oGenie\Invoke("IAgentCtlUserInput\name")
        ;EndIf
        
            ; If rep.s="calcul"
             ;   oGenie\Invoke("Speak('Bonjour'");
            ;EndIf
            
       ;ForEver
       ;CallDebugger
        
         
        
        ch$="'\Chr='Whisper'\'"  ;Monotone;Whisper,Normal
        ch$="'bonjour, je vais vous parler de Purebasic'"
        oGenie\Invoke("Speak("+ch$+")")
        
        ch$="'tiens a quoi je pense la ?'"
        oGenie\Invoke("Think("+ch$+")") ; fait penser l'agent !!
        
        oGenie\Invoke("play('Greet')") 
        Delay(1000)
        oGenie\Invoke("play('confused')") 
        Delay(1000)
        
        oGenie\Invoke("play('alert')")
        Delay(1000)
        
        oGenie\Invoke("play('Announce')")
        Delay(1000)
        
        oGenie\Invoke("play('Congratulate')")
        Delay(1000)
        
        oGenie\Invoke("play('DoMagic2')")
        Delay(1000)
        
        oGenie\Invoke("play('Decline')")
        Delay(1000)
        
        oGenie\Invoke("play('DontRecognize')")
        Delay(1000)
        
        oGenie\Invoke("play('Explain')")
        Delay(1000)
        
        oGenie\Invoke("play('GestureDown')")
        Delay(1000)
        
        oGenie\Invoke("play('GestureLeft')")
        Delay(1000)
        
        oGenie\Invoke("play('GestureRight')")
        Delay(1000)
        
        oGenie\Invoke("play('GestureUp')")
        Delay(1000)
        
        oGenie\Invoke("play('GetAttention')") 
        Delay(1000)
        
        oGenie\Invoke("play('GetAttentionContinued')")
        Delay(1000)
        
        oGenie\Invoke("play('GetAttentionReturn')")
        Delay(1000)
        
        oGenie\Invoke("play('LookDown')")
        Delay(1000)
        
        oGenie\Invoke("play('LookDownreturn')")
        Delay(1000)
        
        oGenie\Invoke("play('LookDownBlink')")
        Delay(1000)
        
        oGenie\Invoke("play('LookDownreturn')")
        Delay(1000)
        
        oGenie\Invoke("play('LookLeft')")
        Delay(1000)
        
        oGenie\Invoke("play('LookLeftreturn')")
        Delay(1000)
        
        oGenie\Invoke("play('LookLeftBlink')")
        Delay(1000)
        
        oGenie\Invoke("play('LookLeftreturn')")
        Delay(1000)
        
        oGenie\Invoke("play('LookRight')")
        Delay(1000)
        
        oGenie\Invoke("play('LookRightreturn')")
        Delay(1000)
        
        oGenie\Invoke("play('LookRightBlink')")
        Delay(1000)
        
        oGenie\Invoke("play('LookRightreturn')")
        Delay(1000)
        
        oGenie\Invoke("play('LookUp')")
        Delay(1000)
        
        oGenie\Invoke("play('LookUpReturn')")
        Delay(1000)
        
        oGenie\Invoke("play('LookUpBlink')")
        Delay(1000)
        
        oGenie\Invoke("play('LookUpReturn')")
        Delay(1000)
        
        oGenie\Invoke("play('LookUpReturn')")
        Delay(1000)
        
        oGenie\Invoke("play('MoveDown')")
        Delay(1000)
        
        oGenie\Invoke("play('MoveLeft')")
        Delay(1000)
        
        oGenie\Invoke("play('MoveRight')")
        Delay(1000)
        
        oGenie\Invoke("play('MoveUp')")
        Delay(1000)
        
        oGenie\Invoke("play('Pleased')")
        Delay(1000)
        
        oGenie\Invoke("play('Processing')") ; bloc
        Delay(5000)
        oGenie\Invoke("StopAll") ; obligé apres les animations qui boucles
        
        Delay(2000)
        ;oGenie\Invoke("play('Stop')")
        
        oGenie\Invoke("play('Read')")
        Delay(1000)
        
        oGenie\Invoke("play('ReadContinued')")
        Delay(1000) 
        
        oGenie\Invoke("play('Reading')"); bloc
        Delay(5000)
        oGenie\Invoke("StopAll") ; obligé apres les animations qui boucles
        Delay(1000) 
        
        oGenie\Invoke("play('Sad')")
        Delay(1000) 
        
        oGenie\Invoke("play('Searching')") ; bloc 
        Delay(5000)
        oGenie\Invoke("StopAll") ; obligé apres les animations qui boucles
        Delay(1000) 
        
        oGenie\Invoke("play('StartListening')")
        Delay(1000) 
        
        oGenie\Invoke("play('StopListening')")
        Delay(1000) 
        
        oGenie\Invoke("play('Suggest')") ; bloc
        Delay(5000)
        oGenie\Invoke("StopAll") ; obligé apres les animations qui boucles
        Delay(1000) 
        ;
        oGenie\Invoke("play('Surprised')")
        Delay(1000) 
        ;  
        oGenie\Invoke("play('Think')")
        Delay(1000) 
        
        oGenie\Invoke("play('Uncertain')")
        Delay(1000) 
        
        oGenie\Invoke("play('Wave')")
        Delay(1000)  
        ;
        oGenie\Invoke("play('Write')")
        Delay(1000) 
        
        oGenie\Invoke("play('WriteContinued')") ;bloc
        Delay(5000)
        oGenie\Invoke("StopAll") ; obligé apres les animations qui boucles
        
        Delay(1000) 
        
        oGenie\Invoke("play('Writing')") ; bloc
        Delay(5000)
        oGenie\Invoke("StopAll") ; obligé apres les animations qui boucles
        Delay(1000) 
        
        oGenie\Invoke("play('Writereturn')")
        
        
        oGenie\Invoke("play('StopAll')")
        
        
        ch$="'bonjour, je vais vous parler de Purebasic'"
        oGenie\Invoke("Speak("+ch$+")")
        
        oGenie\Invoke("play('Reading')") ; bloc 
        Delay(5000)
        oGenie\Invoke("StopAll") ; obligé apres les animations qui boucles
        Delay(2000)
        
        
        ch$="'\Pit=100\ PureBasic est vraiment un super langage'" ; en principe le pitch en hertz entre 50 et 400
        
        oGenie\Invoke("Speak("+ch$+")")
        Delay(5000)
        ch$=" '\Spd=200\ je sais parler plus vite aussi'" ; en mot par minutes (de 50 a 250)
        
        oGenie\Invoke("Speak("+ch$+")")
        Delay(6000)
        ch$=" '\Spd=80\ je sais parler plus lentement aussi'" ; en mot par minutes
        
        oGenie\Invoke("Speak("+ch$+")")
        Delay(6000)
        ch$="'\Vol=1000\ et moins fort '" ;de 0 a 65535 ; le volume en principe
        
        oGenie\Invoke("Speak("+ch$+")")
        
        ch$="'\Vol=65535\ \Pit=50\ et beaucoup plus fort !! '" ;de 0 a 65535 ; le volume en principe
        
        oGenie\Invoke("Speak("+ch$+")")
        
        ch$="'\Rst\'" ; reset les tag
        oGenie\Invoke("Speak("+ch$+")")
        Delay(6000) 
        oGenie\Invoke("Speak('Au revoir ! .')") 
        
        oGenie\Invoke("play('Hide')")
        Delay(3000) 
        oGenie\Release()
    EndIf
    oAgent\Release()
EndIf

    
        
  

Publié : ven. 27/févr./2009 0:25
par Backup
je vais essayer de voir si je peut mettre en oeuvre la reconnaissance vocale
hum ... :)

Publié : ven. 27/févr./2009 3:03
par Frenchy Pilou
Pratique pour écouter une texte écrit! :D

Publié : ven. 27/févr./2009 9:45
par Kwai chang caine
Cool et en plus ça cause :D

Je vois que tu as été faire un tour du coté de COMATE :wink:
J'ai dit que la moitié d'une connerie alors :D

COMATE c'est l'enfer...avec ça plus rien de chez crosoft ne devrais resister a PB :?
PB y va pouvoir jouer dans la cour des grands :D

Par contre, moi j'ai un petit "buguinet", a la deuxieme fois qu'il dit "bonjour....parler de pure basic", j'ai une bulle vide et il plante 8O
Et j'suis obligé d'utiliser les 3 touches favorites de crosoft :cry:

Et aussi, j'ai pas tout compris comment tu choisis ton personnage

Merci DOBRO de partager tes sources comme dab 8)

Publié : ven. 27/févr./2009 9:54
par Backup
Kwai chang caine a écrit :
Et aussi, j'ai pas tout compris comment tu choisis ton personnage

Merci DOBRO de partager tes sources comme dab 8)
cette partie :

Code : Tout sélectionner

; **************************** le peroquet ***********************
    ;oAgent\Invoke("Characters\Load('peedy','Peedy.acs')") ;
    ;oGenie = oAgent\GetObjectProperty("Characters('peedy')")
    ; *************************************************************
    ; **************************** le Genie  ***********************
   ; oAgent\Invoke("Characters\Load('Genie','Genie.acs')")
    ; oGenie = oAgent\GetObjectProperty("Characters('Genie')")
    ; *************************************************************
   
    ; **************************** le Robot  ***********************
    ;oAgent\Invoke("Characters\Load('Robby','Robby.acs')")
    ;oGenie = oAgent\GetObjectProperty("Characters('Robby')")
    ; *************************************************************
   
    ; **************************** Merlin  ***********************
    oAgent\Invoke("Characters\Load('Merlin','Merlin.acs')") ;
    oGenie = oAgent\GetObjectProperty("Characters('Merlin')")
    ; ************************************************************* 
tu décommenté seulement le personnage que tu veux
bien sur , il faut recommenter l'autre , un seul ne peut etre actif !!

et il faut aussi que l'agent soit installé sur l'ordinateur ;)
Kwai chang caine a écrit : Par contre, moi j'ai un petit "buguinet", a la deuxieme fois qu'il dit "bonjour....parler de pure basic", j'ai une bulle vide et il plante 8O
Et j'suis obligé d'utiliser les 3 touches favorites de crosoft
je viens de ré editer le listing peut tu retester s'il te plait ??

c'est bizarre , chez moi ça marche nickel .. mais bon :?

Publié : ven. 27/févr./2009 16:09
par SpaceMan
ouaohh ! c'es vraiment cool. Et là ça me donne pleins d'idées: comme introduire ma soutenance avec...
En tout cas c'est du bon boulot Dobro !
Merci de le partager avec nous :)

Publié : ven. 27/févr./2009 19:23
par gansta93
Bonjour,

Ca a l'air cool, sauf que là... ça ne parle jamais chez moi :S, pourtant j'ai sélectionné Veronique que j'ai téléchargé, Pierre aussi ne fonctionne pas, et Virginie qui est par contre SAPI 5 nonplus...
Quelqu'un a-t-il une idée ?

Publié : ven. 27/févr./2009 20:24
par Ar-S
Merci pour l'info et le partage, c'est excellent !

Publié : ven. 27/févr./2009 20:26
par Backup
gansta93 a écrit :Bonjour,

Ca a l'air cool, sauf que là... ça ne parle jamais chez moi :S, pourtant j'ai sélectionné Veronique que j'ai téléchargé, Pierre aussi ne fonctionne pas, et Virginie qui est par contre SAPI 5 nonplus...
Quelqu'un a-t-il une idée ?
oui! oui! pas grave , il te faut récupérer le moteur Sapi4 'spchapi.exe'
ici : http://www.brains-minds-media.org/archi ... i.exe/view

:)
ps; vous pouvez recuperer plein de personages ici :
http://www.agentland.fr/cgi-bin/relocat ... more2.html

Publié : ven. 27/févr./2009 21:12
par Kwai chang caine
je viens de ré editer le listing peut tu retester s'il te plait ??
Je sais pas ce que tu as fait, mais ça marche nickel maintenant 8)

Et merci aussi pour l'explication :D

Publié : ven. 27/févr./2009 21:36
par gansta93
Bon, je l'avais installé, en le réinstallant ça marche :lol: enfin pas sûr qu'il parle tout le temps qu'il devrait, mais je vais revérifier.

Publié : ven. 27/févr./2009 22:25
par gansta93
Je me permet un rapide Hors-Sujjet mais pas complet : quelqu'un aurait-il les noms des objets avec méthodes&propriétées à utiliser pour contrôler MSN Messenger/Windows Live Messenger ?

Sinon j'ai revérifié et maintenant Véronique me livre tout ses secrets :P par contre Virginie n'a pas envi de parler... ah les femmes ! :lol:

Apparemment on ne peut utiliser que des synthèses SAPI 4 avec les agents. Ou alors c'est encore mon PC qui veut se diférencier, ça ne serait pas la première fois ^^.

Publié : ven. 27/févr./2009 23:45
par Backup
tout a fait !! Agent microsoft = Sapi4

il me semble bien avoir mis un commentaire dans ce sens sur les voix sapi
5 dans le listing !! ;)

Publié : ven. 27/févr./2009 23:50
par gansta93
Dobro a écrit :tout a fait !! Agent microsoft = Sapi4

il me semble bien avoir mis un commentaire dans ce sens sur les voix sapi
5 dans le listing !! ;)
Bon... :? je lirais mieux la prochaine fois...

Publié : sam. 28/févr./2009 0:41
par Backup
par contre le Sapi5 est pris en charge par les agents microsoft, sous Vista !!

vista en principe inclue aussi une reconnaissance vocale en français !! ;)
(peut etre pas la version de base quand meme ;) )