Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64 )

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par Ar-S »

J'ai installé les 2 runtimes de tes liens chez crosoft x86 et x64.. Pas de dossier plateform :?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par nico »

Du coup je viens de vérifier les liens et je me suis gouré pour le runtime, j'ai mis à jour le lien, désolé.
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par Ar-S »

Voilà qui est mieux ! :P
ça marche
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par nico »

J'ai rectifié le premier post car on ne peut pas installer les deux version x86 ou x64, car bien que cela semble fonctionner la première fois, au reboot ça ne sera plus le cas.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par Backup »

marche bien chez moi en x86 ... :)

sympath la Hortense , elle cause bien :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par nico »

Bon, je voulais faire un essai de reconnaissance vocal en remplaçant sapi par speech mais comateplus fait des siennes, je verrais ça plus tard, je travaille en x64.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par poshu »

Questions vraiment innocentes (j'ai pas de Windows, donc je ne peux pas tester):
_ Le text to speech est compréhensible sans avoir à faire des efforts?
_ Le speech recognition, ça donne quoi? Je suis très impressionné par Kinect Xbox One de ce coté là, qui reconnait très bien le français et mon anglais approximatif (même sans apprentissage: je l'ai testé chez un pote), j'aimerais bien ajouter quelques fonctions, même basiques, avec de la reconnaissance vocale à mon media center...
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par nico »

_ Le text to speech est compréhensible sans avoir à faire des efforts?
Oui sans aucun problème.
_ Le speech recognition, ça donne quoi? Je suis très impressionné par Kinect Xbox One de ce coté là, qui reconnait très bien le français et mon anglais approximatif (même sans apprentissage: je l'ai testé chez un pote), j'aimerais bien ajouter quelques fonctions, même basiques, avec de la reconnaissance vocale à mon media center...
Je dois dire qu'il faut passer par une phase d'apprentissage sinon ça reste relativement aléatoire.
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par poshu »

Et tu as testé avec un micro d'ambiance? En tous cas, je suis tenté... Faut que j'installe ça sur ma machine virtuelle. Y'a moyen de lui faire analyser un fichier son aussi, où il est conditionné à l'écoute d'une entrée?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par nico »

Il est possible de lui faire analyser un fichier son, lors d'un test, j'ai constaté que le résultat était très médiocre; cependant vu que la phase d'apprentissage de la voix se cale donc sur celle ci, il aurait été intéressant d'enregistrer sa voix pour faire le test, évidemment ça limite l'intérêt.

Voici le code que j'ai utilisé à l'époque, je ne peux garantir le fonctionnement (faite le test et dîte moi!) Attention SAPI 5 seulement:

Code : Tout sélectionner

XIncludeFile "COMatePLUS.pbi"

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Text_Message
  #String
  #Text_2
  #Text_3
  #Editor
EndEnumeration
;}
;{ Fonts
Enumeration
  #Font_Text_Message
  #Font_String_1
EndEnumeration
;}
;}

Structure Parametres
  SpRecoContext.i
  SpRecoGrammar.i
EndStructure

Procedure SpeechRecoContextEvents(event.COMateObject, event$, parameterCount)
  Protected iParam.iUnknown
  Protected SpeechRecoResult.COMateObject
  Protected SpeechPhraseInfo.COMateObject
  Protected Texte.s
  
  ;Debug("EVT " + Str(parameterCount) + " " + event$)
  
  Select event$
    Case "Recognition"
      Debug "-------------Recognition-----------------"
      iParam = event\GetObjectEventParam(4)
      If iParam
        SpeechRecoResult = COMate_WrapCOMObject(iParam)
        If SpeechRecoResult
          SpeechPhraseInfo = SpeechRecoResult\GetObjectProperty("PhraseInfo()")
          If SpeechPhraseInfo

            Texte = SpeechPhraseInfo\GetStringProperty("GetText(0, -1, 1)")
            SetGadgetText(#Editor, Texte + Chr(13) + GetGadgetText(#Editor))
            
            
            If FindString(LCase(Texte), "bonjour")
              MessageRequester("Info", "Vous avez dit le mot Bonjour!")
            EndIf
            
            SpeechPhraseInfo\Release()
          EndIf
          SpeechRecoResult\Release()
        EndIf
        iParam\Release()
      EndIf
      
    Case "Hypothesis"
      Debug "------------Hypothesis------------------"
      
      SetGadgetText(#Text_Message, "Enregistrement en cours...")
      
      iParam = event\GetObjectEventParam(3)
      If iParam
        SpeechRecoResult = COMate_WrapCOMObject(iParam)
        If SpeechRecoResult
          SpeechPhraseInfo = SpeechRecoResult\GetObjectProperty("PhraseInfo()")
          If SpeechPhraseInfo
            Texte = SpeechPhraseInfo\GetStringProperty("GetText(0, -1, 1)")
            
            ;SetGadgetText(#Editor, Texte + Chr(13) + GetGadgetText(#Editor))
            
            SpeechPhraseInfo\Release()
          EndIf
          SpeechRecoResult\Release()
        EndIf
        iParam\Release()
      EndIf
      
    Case "SoundStart"
      Debug "SoundStart"
      SetGadgetText(#String, "")
      
    Case "SoundEnd"
      Debug "SoundEnd"
      SetGadgetText(#Text_Message, "Parler")
      
    Case "StartStream"
      ; Debug "StartStream"
      
      
    Case "EndStream"
      ; Debug "EndStream"
      
  EndSelect
  
EndProcedure

Procedure Load_Speech_Recognition(*Speech_Recognition.Parametres)
  Protected SpRecoContext.COMateObject
  Protected SpRecoGrammar.COMateObject
  Protected SpRecognizer.COMateObject
  Protected SpeechRecognizer.COMateObject
  Protected SpObjectTokenCategory.COMateObject
  Protected SpObjectToken.COMateObject
  Protected Init_Recognition.l = 0
  
  SpRecoContext = COMate_CreateObject("SAPI.SpInProcRecoContext")
  If SpRecoContext = 0 : Goto Clean : EndIf
  
  
  SpRecoGrammar = SpRecoContext\GetObjectProperty("CreateGrammar(0)")
  If SpRecoGrammar = 0 : Goto Clean : EndIf
  
  
  SpRecognizer = SpRecoContext\GetObjectProperty("Recognizer()")
  If SpRecognizer = 0 : Goto Clean : EndIf
  
  
  Recognizer.idispatch = SpRecognizer\GetCOMObject()
  If Recognizer = 0 : Goto Clean : EndIf
  
  Recognizer\QueryInterface(?IID_SpeechRecognizer, @SpeechRecognizer_)
  If SpeechRecognizer_ = 0 : Goto Clean : EndIf
  
  SpeechRecognizer.COMateObject = COMate_WrapCOMObject(SpeechRecognizer_)
  If SpeechRecognizer = 0 : Goto Clean : EndIf
  
 
  
  #SPLO_STATIC = 0
  SpRecoGrammar\invoke("Dictationload('', " + Str(#SPLO_STATIC) + ")")
  
  SpFileStream.COMateObject = COMate_CreateObject("SAPI.SpFileStream")
  Debug comate_getlasterrordescription()
  
  * SpFileStream\Invoke("Open('E:\essai.wav')") ;modifier le chemin du fichier wav !!!
  Debug comate_getlasterrordescription()
  
  SpeechRecognizer\Setpropertyref("AudioInputStream(" + Str(SpFileStream) + " As COMateObject )")
  Debug comate_getlasterrordescription()
  
  If SpRecoContext\SetEventHandler(#COMate_CatchAllEvents, @SpeechRecoContextEvents()) <> 0
    Goto Clean
  EndIf
  
;   Lance le moteur de reconnaissance vocale
  #SGDSActive = 1
  If SpRecoGrammar\invoke("DictationSetState(" + Str(#SGDSActive) + ")") <> 0
    Goto Clean
  Else
    Init_Recognition = 1
  EndIf
  
  Clean:
  If SpRecognizer <> 0 : SpRecognizer\Release() : EndIf
  If SpeechRecognizer <> 0 : SpeechRecognizer\Release() : EndIf
  If SpObjectTokenCategory <> 0 : SpObjectTokenCategory\Release() : EndIf
  If SpObjectToken <> 0 : SpObjectToken\Release() : EndIf
  
  If Init_Recognition = 0
    If SpRecoContext <> 0 : SpRecoContext\Release() : EndIf
    If SpRecoGrammar <> 0 : SpRecoGrammar\Release() : EndIf
  Else
    *Speech_Recognition\SpRecoContext = SpRecoContext
    *Speech_Recognition\SpRecoGrammar = SpRecoGrammar
  EndIf
  
  ProcedureReturn Init_Recognition
EndProcedure

Procedure Finish_Speech_Recognition(*Speech_Recognition.Parametres)
  Protected SpRecoContext.COMateObject
  Protected SpRecoGrammar.COMateObject
  
  SpRecoContext = *Speech_Recognition\SpRecoContext
  SpRecoGrammar = *Speech_Recognition\SpRecoGrammar
  
  If SpRecoGrammar <> 0
    ; Arrête le moteur de reconnaissance vocale
    #SGDSInActive = 0
    SpRecoGrammar\invoke("DictationSetState(" + Str(#SGDSInActive) + ")")
    SpRecoGrammar\Release()
    Debug "ok"
  EndIf
  
  If SpRecoContext <> 0
    SpRecoContext\SetEventHandler(#COMate_CatchAllEvents, 0)
    SpRecoContext\Release()
  EndIf
  
EndProcedure

Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 0, 0, 400, 400, "Speech Recognition", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
    TextGadget(#Text_Message, 0, 0, 400, 50, "Parler et commencer par dire : Bonjour", #PB_Text_Center)
    StringGadget(#String, 0, 95, 400, 35, "")
    TextGadget(#Text_2, 0, 75, 400, 20, "  Phrase Reconnue:")
    TextGadget(#Text_3, 0, 160, 400, 20, "  Phrase décryptée au fur et à mesure de l'enregistrement:")
    EditorGadget(#Editor, 0, 180, 400, 220)
    ; Gadget Fonts
    SetGadgetFont(#Text_Message, LoadFont(#Font_Text_Message, "Microsoft Sans Serif", 12, 272))
    SetGadgetFont(#String, LoadFont(#Font_String_1, "Microsoft Sans Serif", 12, 16))
  EndIf
EndProcedure

CoInitialize_(0)

If Load_Speech_Recognition(@Speech_Recognition.Parametres) = 0
  MessageRequester("Erreur", "L'initialisation du moteur de la reconnaissance vocale à échoué!")
  End
EndIf

OpenWindow_Window_0()

;{- Event loop
Repeat
  Select WaitWindowEvent()
      ;/ //////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Text_Message
        Case #String
        Case #Text_2
        Case #Text_3
        Case #Editor
      EndSelect
      ;/ ///////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Finish_Speech_Recognition(@Speech_Recognition.Parametres)
          CoUninitialize_()
          Break
      EndSelect
  EndSelect
ForEver
;
;}


Macro GUID(iid, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0)
  DataSection
    IID:
    Data.l $a0
    Data.w $a1, $a2
    Data.b $a3, $a4, $a5, $a6, $a7, $a8, $a9, $b0
  EndDataSection
EndMacro

GUID(IID_SpeechRecognizer, 2D5F1C0C, BD75, 4B08, 94, 78, 3B, 11, FE, A2, 58, 6C)
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Speech nouveau SDK 11 (Vista ou supérieur x86 et/ou x64

Message par poshu »

Je vois un intérêt à enregistrer sa voix :
Mon media center codé avec mes petites mimines a un port ouvert pour recevoir des commandes via mon téléphone (j'ai codé une pitite application android capable de faire play/pause... s'pas magique, mais j'avais pas de télécommande); hors donc, je pourrais faire une fonction vocale via le téléphone qui enregistre la voix et l'envoi au HTPC pour traitement :p

Merci, je testerai quand j'aurais le courage de relancer la machine virtuelle ^_^
Répondre