Page 2 sur 6

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 12:21
par klystron
Ok, je vais réfléchir a tout ce que tu m'as dis, je vais revenir dans l'apres-midi je penses, un grand merci pour ton aide .
a plus tard.
A+

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 13:30
par klystron
re bonjour à tous,
j'ai enlevé les points virgules pour le moment, cela sera plus clair.
j'ai modifié les code mais je n'arrive pas à lire le fichier de texte, j'ai mis sur l'ordinateur un répertoire ( mondossier ) et dans ce répertoire un fichier texte ( monfifichier.txt) mais il ne le lit pas.
j'ai du oublié un truc ...
de meme pour la ligne N° 144 je n'ai pas du faire la bonne manip ?...
voici le code que j'ai modifé:

Code : Tout sélectionner

  

EnableExplicit


; VALMEUR POUR "SpeechVoiceSpeakFlags".
Enumeration
  #SVSFDefault            = 0
  #SVSFlagsAsync          = 1
  #SVSFPurgeBeforeSpeak   = 2
  #SVSFIsFilename         = 4
  #SVSFIsXML              = 8
  #SVSFIsNotXML           = 16
  #SVSFPersistXML         = 32
  #SVSFNLPSpeakPunc       = 64
  #SVSFNLPMask            = 64
  #SVSFVoiceMask          = 127
  #SVSFUnusedFlags        = -128
EndEnumeration
Enumeration
  #CLSCTX_INPROC_SERVER   = $1
  #CLSCTX_INPROC_HANDLER  = $2
  #CLSCTX_LOCAL_SERVER    = $4
  #CLSCTX_REMOTE_SERVER   = $10
  #CLSCTX_ALL             = (#CLSCTX_INPROC_SERVER | #CLSCTX_INPROC_HANDLER | #CLSCTX_LOCAL_SERVER | #CLSCTX_REMOTE_SERVER)
EndEnumeration


Interface ISpeechVoice Extends IDispatch
  get_Status(*ISpeechVoiceStatus .l)
  get_Voice(*ISpeechObjectToken.l)
  put_Voice(*ISpeechObjectToken.l)
  get_AudioOutput(*ISpeechObjectToken.l)
  put_AudioOutput(*ISpeechObjectToken.l)
  get_AudioOutputStream(*ISpeechBaseStream.l)
  put_AudioOutputStream(*ISpeechBaseStream.l)
  get_Rate(long.l)
  put_Rate(long.l)
  get_Volume(long.l)
  put_Volume(long.l)
  put_AllowAudioOutputFormatChangesOnNextSet(VARIANT_BOOL.l)
  get_AllowAudioOutputFormatChangesOnNextSet(VARIANT_BOOL.l)
  get_EventInterests(SpeechVoiceEvents .l)
  put_EventInterests(SpeechVoiceEvents .l)
  put_Priority(SpeechVoicePriority.l)
  get_Priority(SpeechVoicePriority.l)
  put_AlertBoundary(SpeechVoiceEvents.l)
  get_AlertBoundary(SpeechVoiceEvents.l)
  put_SynchronousSpeakTimeout(long.l)
  SynchronousSpeakTimeout(long.l)
  Speak(*Text, SpeechVoiceSpeakFlags.l, long.l)
  SpeakStream(*ISpeechBaseStream, SpeechVoiceSpeakFlags.l, long.l)
  Pause()
  Resume()
  Skip(*Type, NumItems.l, long.l)
  GetVoices(*RequiredAttributes.l, *OptionalAttributes, *ISpeechObjectTokens.l)
  GetAudioOutputs(*RequiredAttributes, *OptionalAttributes, *ISpeechObjectTokens.l)
  WaitUntilDone(msTimeout.l, VARIANT_BOOL.l)
  SpeakCompleteEvent(long.l)
  IsUISupported(*TypeOfUI, *ExtraData.VARIANT, VARIANT_BOOL.l)
  DisplayUI(hWndParent.l, *Title, *TypeOfUI, *ExtraData.VARIANT)
EndInterface 


Procedure.b isSAPIInstalled()

; VERIFICATION DE L'INSTALLATION DE SAPI 4 OU 5.
  Define a.i
  Define bresult.b = #False

  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_SpVoice, 0, #CLSCTX_ALL, ?IID_ISpVoice, @a) = 0
    bresult = #True
  Else
    If CoCreateInstance_(?CLSID_ITextToSpeech, 0, #CLSCTX_ALL, ?IID_ITextToSpeech, @a) = 0
      bresult = #True
    EndIf
  EndIf
  CoUninitialize_()
  ProcedureReturn bresult 
  
EndProcedure


Procedure SAPISpeechtext(stext.s, speed = 0)

  Define.i itemp, bstrtext
  Define text1.s
  Define *buffer1, *buffer2, *buffer3 
  Define clsid.CLSID, refiid.CLSID
  Define speechvoice.ISpeechVoice
    
  If isSAPIInstalled() = #True And stext <> #NULL$
    text1 = "SAPI.SpVoice"
    *buffer1 = AllocateMemory((Len(text1) + 1) * 2)
    PokeS(*buffer1, text1, -1, #PB_Unicode)
    text1 = "{269316D8-57BD-11D2-9EEE-00C04F797396}"
    *buffer2 = AllocateMemory((Len(text1) + 1) * 2)
    PokeS(*buffer2, text1, -1, #PB_Unicode)
    If CLSIDFromProgID_(*buffer1, @Clsid.clsid)    = #S_OK
      If CLSIDFromString_(*buffer2, @Refiid.clsid) = #S_OK
        CoInitialize_(0)
        If  CoCreateInstance_(clsid, #Null, #CLSCTX_INPROC_SERVER, refiid, @speechvoice) = #S_OK
          *buffer3 = AllocateMemory((Len(stext) + 1) * 2)
          PokeS(*buffer3, stext, -1, #PB_Unicode)
          itemp    = #SVSFDefault
          bstrtext = SysAllocString_(*buffer3)
          
                
          speechvoice\put_Rate(speed)
          speechvoice\put_Volume(100)
                            
          speechvoice\Speak(bstrtext, 0, @itemp)
          SysFreeString_(bstrtext)
          FreeMemory(*buffer3)
          speechvoice\Release()
        EndIf
        CoUninitialize_()
      EndIf
    EndIf
    FreeMemory(*buffer1)
    FreeMemory(*buffer2)
    
  EndIf


EndProcedure


; ****************************modification pour fichier exterieur *********************

  If ReadFile(0, "C:MonDossier/MonFichier.txt"); Le fichier MonFichier.txt se trouve dans le dossier MonDossier qui se trouve à la racine du disque C:


    While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
      Debug ReadString(0)      ; Affiche ligne par ligne le contenu du fichier
    Wend
    CloseFile(0)               ; Ferme le fichier précédemment ouvert
  Else
    MessageRequester("Information","Impossible d'ouvrir le fichier!")
  EndIf


SAPISpeechtext("MonFichier.txt ", -5) ; -5 vitesse de lecture lente

;***********************************fin des modifs ***************************************


End


DataSection
  CLSID_SpVoice:
    Data.l $96749377
    Data.w $3391,$11D2
    Data.b $9E,$E3,$00,$C0,$4F,$79,$73,$96
  IID_ISpVoice:
    Data.l $269316D8
    Data.w $57BD,$11D2
    Data.b $9E,$EE,$00,$C0,$4F,$79,$73,$96
  CLSID_ITextToSpeech:
    Data.l $EEE78591
    Data.w $FE22,$11D0
    Data.b $8B,$EF,$00,$60,$08,$18,$41,$DE
  IID_ITextToSpeech:
    Data.l $EEE78590
    Data.w $FE22,$11D0
    Data.b $8B,$EF,$00,$60,$08,$18,$41,$DE


EndDataSection  


Impossible d'ouvrir le fichier .
j'ai du me trompé quelque part .

a la ligne 144 il faut remettre tout le chemin pour trouver le fichier texte , C: ... ?
je n'arrive pas a avoir des infos sur le mot clé sapispeechtext .

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 17:05
par falsam
Une erreur inattention de ma part dans une de mes réponses précédentes.

Remplace

Code : Tout sélectionner

ReadFile(0, "C:MonDossier/MonFichier.txt")
par

Code : Tout sélectionner

ReadFile(0, "C:/MonDossier/MonFichier.txt")

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 17:07
par Marc56
Des pistes

1. C:MonDossier/MonFichier.txt le séparateur de répertoire sous Windows et Dos est l'antislash (\) et pas le slash (/) (mais ça marche en PB) et en plus, il en faut un à la racine (erreur classique de débutant en ligne de commandes) (Celui-là je te le corrige, car ce n'est pas du PB, mais du "dos") (oups, c'était pas toi, mais une faute de frappe dans l'exemple :oops: )
C:\MonDossier\MonFichier.txt

2. Il faut lire le fichier et concaténer les lignes dans une variable chaine et non pas juste les afficher.
À revoir: Debug ReadString(0)

3. Il faut passer la chaine ainsi créée et non pas le nom du fichier
À revoir: SAPISpeechtext("MonFichier.txt ", -5)

Je te laisse faire tes essais

Cela dit, pour que ça fonctionne, je pense que tu devras aussi supprimer les sauts de ligne
(j'ai pas testé)

:wink:

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 18:20
par klystron
bonsoir Marc56, et Falsam ,
j'ai modifié la ligne , en ajoutant le / mais c'est idem, j'ai toujours le meme message .
quant au mot clé pour lire le texte , je ne trouve pas un exemple de code.

et pour lire ligne par ligne le texte, j'en suis pas encore là :D

Code : Tout sélectionner

 

EnableExplicit


; VALMEUR POUR "SpeechVoiceSpeakFlags".
Enumeration
  #SVSFDefault            = 0
  #SVSFlagsAsync          = 1
  #SVSFPurgeBeforeSpeak   = 2
  #SVSFIsFilename         = 4
  #SVSFIsXML              = 8
  #SVSFIsNotXML           = 16
  #SVSFPersistXML         = 32
  #SVSFNLPSpeakPunc       = 64
  #SVSFNLPMask            = 64
  #SVSFVoiceMask          = 127
  #SVSFUnusedFlags        = -128
EndEnumeration
Enumeration
  #CLSCTX_INPROC_SERVER   = $1
  #CLSCTX_INPROC_HANDLER  = $2
  #CLSCTX_LOCAL_SERVER    = $4
  #CLSCTX_REMOTE_SERVER   = $10
  #CLSCTX_ALL             = (#CLSCTX_INPROC_SERVER | #CLSCTX_INPROC_HANDLER | #CLSCTX_LOCAL_SERVER | #CLSCTX_REMOTE_SERVER)
EndEnumeration


Interface ISpeechVoice Extends IDispatch
  get_Status(*ISpeechVoiceStatus .l)
  get_Voice(*ISpeechObjectToken.l)
  put_Voice(*ISpeechObjectToken.l)
  get_AudioOutput(*ISpeechObjectToken.l)
  put_AudioOutput(*ISpeechObjectToken.l)
  get_AudioOutputStream(*ISpeechBaseStream.l)
  put_AudioOutputStream(*ISpeechBaseStream.l)
  get_Rate(long.l)
  put_Rate(long.l)
  get_Volume(long.l)
  put_Volume(long.l)
  put_AllowAudioOutputFormatChangesOnNextSet(VARIANT_BOOL.l)
  get_AllowAudioOutputFormatChangesOnNextSet(VARIANT_BOOL.l)
  get_EventInterests(SpeechVoiceEvents .l)
  put_EventInterests(SpeechVoiceEvents .l)
  put_Priority(SpeechVoicePriority.l)
  get_Priority(SpeechVoicePriority.l)
  put_AlertBoundary(SpeechVoiceEvents.l)
  get_AlertBoundary(SpeechVoiceEvents.l)
  put_SynchronousSpeakTimeout(long.l)
  SynchronousSpeakTimeout(long.l)
  Speak(*Text, SpeechVoiceSpeakFlags.l, long.l)
  SpeakStream(*ISpeechBaseStream, SpeechVoiceSpeakFlags.l, long.l)
  Pause()
  Resume()
  Skip(*Type, NumItems.l, long.l)
  GetVoices(*RequiredAttributes.l, *OptionalAttributes, *ISpeechObjectTokens.l)
  GetAudioOutputs(*RequiredAttributes, *OptionalAttributes, *ISpeechObjectTokens.l)
  WaitUntilDone(msTimeout.l, VARIANT_BOOL.l)
  SpeakCompleteEvent(long.l)
  IsUISupported(*TypeOfUI, *ExtraData.VARIANT, VARIANT_BOOL.l)
  DisplayUI(hWndParent.l, *Title, *TypeOfUI, *ExtraData.VARIANT)
EndInterface 


Procedure.b isSAPIInstalled()

; VERIFICATION DE L'INSTALLATION DE SAPI 4 OU 5.
  Define a.i
  Define bresult.b = #False

  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_SpVoice, 0, #CLSCTX_ALL, ?IID_ISpVoice, @a) = 0
    bresult = #True
  Else
    If CoCreateInstance_(?CLSID_ITextToSpeech, 0, #CLSCTX_ALL, ?IID_ITextToSpeech, @a) = 0
      bresult = #True
    EndIf
  EndIf
  CoUninitialize_()
  ProcedureReturn bresult 
  
EndProcedure


Procedure SAPISpeechtext(stext.s, speed = 0)

  Define.i itemp, bstrtext
  Define text1.s
  Define *buffer1, *buffer2, *buffer3 
  Define clsid.CLSID, refiid.CLSID
  Define speechvoice.ISpeechVoice
    
  If isSAPIInstalled() = #True And stext <> #NULL$
    text1 = "SAPI.SpVoice"
    *buffer1 = AllocateMemory((Len(text1) + 1) * 2)
    PokeS(*buffer1, text1, -1, #PB_Unicode)
    text1 = "{269316D8-57BD-11D2-9EEE-00C04F797396}"
    *buffer2 = AllocateMemory((Len(text1) + 1) * 2)
    PokeS(*buffer2, text1, -1, #PB_Unicode)
    If CLSIDFromProgID_(*buffer1, @Clsid.clsid)    = #S_OK
      If CLSIDFromString_(*buffer2, @Refiid.clsid) = #S_OK
        CoInitialize_(0)
        If  CoCreateInstance_(clsid, #Null, #CLSCTX_INPROC_SERVER, refiid, @speechvoice) = #S_OK
          *buffer3 = AllocateMemory((Len(stext) + 1) * 2)
          PokeS(*buffer3, stext, -1, #PB_Unicode)
          itemp    = #SVSFDefault
          bstrtext = SysAllocString_(*buffer3)
          
                
          speechvoice\put_Rate(speed)
          speechvoice\put_Volume(100)
                            
          speechvoice\Speak(bstrtext, 0, @itemp)
          SysFreeString_(bstrtext)
          FreeMemory(*buffer3)
          speechvoice\Release()
        EndIf
        CoUninitialize_()
      EndIf
    EndIf
    FreeMemory(*buffer1)
    FreeMemory(*buffer2)
    
  EndIf


EndProcedure


; ****************************modification pour fichier exterieur *********************

  If ReadFile(0, "C:/MonDossier/MonFichier.txt"); Le fichier MonFichier.txt se trouve dans le dossier MonDossier qui se trouve à la racine du disque C:


    While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
      Debug ReadString(0)      ; Affiche ligne par ligne le contenu du fichier
    Wend
    CloseFile(0)               ; Ferme le fichier précédemment ouvert
  Else
    MessageRequester("Information","Impossible d'ouvrir le fichier!")
  EndIf


SAPISpeechtext("MonFichier.txt", -5) ; -5 vitesse de lecture lente

;***********************************fin des modifs ***************************************


End


DataSection
  CLSID_SpVoice:
    Data.l $96749377
    Data.w $3391,$11D2
    Data.b $9E,$E3,$00,$C0,$4F,$79,$73,$96
  IID_ISpVoice:
    Data.l $269316D8
    Data.w $57BD,$11D2
    Data.b $9E,$EE,$00,$C0,$4F,$79,$73,$96
  CLSID_ITextToSpeech:
    Data.l $EEE78591
    Data.w $FE22,$11D0
    Data.b $8B,$EF,$00,$60,$08,$18,$41,$DE
  IID_ITextToSpeech:
    Data.l $EEE78590
    Data.w $FE22,$11D0
    Data.b $8B,$EF,$00,$60,$08,$18,$41,$DE


EndDataSection

  

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 18:31
par falsam
klystron a écrit :et pour lire ligne par ligne le texte, j'en suis pas encore là
Dans ton code il y a ces quelques lignes

Code : Tout sélectionner

If ReadFile(0, "C:MonDossier/MonFichier.txt"); Le fichier MonFichier.txt se trouve dans le dossier MonDossier qui se trouve à la racine du disque C:
  While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
    Debug ReadString(0)      ; Affiche ligne par ligne le contenu du fichier
  Wend
  CloseFile(0)               ; Ferme le fichier précédemment ouvert  
Else
  MessageRequester("Information","Impossible d'ouvrir le fichier!")  
EndIf
Une question me brûle les lèvres : Lis tu les commentaires ?

En particulier cette ligne là :

Code : Tout sélectionner

Debug ReadString(0)      ; Affiche ligne par ligne le contenu du fichier

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 18:35
par klystron
Oui, ligne par ligne , il faut mettre une fin de ligne au texte ?

Debug ReadString(0) il faut lui indiqué les lignes ?

debug readstring ( #monfichier.txt )

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 18:50
par falsam
klystron a écrit :Oui, ligne par ligne , il faut mettre une fin de ligne au texte ?
Pour chaque ligne oui (Avec la touche entrée bien sur).

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 18:54
par klystron
oui , mais ça bloque avant d'arrivé a la lecture des lignes ?

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 18:55
par falsam
klystron a écrit :oui , mais ça bloque avant d'arrivé a la lecture des lignes ?
Et voila je suis perdu. Qu'est ce qui bloque ?

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 18:57
par klystron
j'ai le message , m'indiquant Impossible d'ouvrir le fichier!

c'est le debug readstring (0) qui doit-etre pas bon

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 19:10
par falsam
Tu devrais enregistrer ton fichier texte dans le même dossier que ton code Pure Basic.

1 - Enregistre ce code dans le dossier de ton choix.

Code : Tout sélectionner

Enumeration Fichier
  #Fichier
EndEnumeration

If ReadFile(#Fichier, "test.txt") 
  While Eof(#Fichier) = 0
    Debug ReadString(#Fichier)
  Wend
  CloseFile(#Fichier)
Else
  MessageRequester("Information","Impossible d'ouvrir le fichier")  
EndIf
2 - Tu vas créer un fichier texte dans le MÊME DOSSIER que le code qui se nommera test.txt
Tu inséreras ces quelques lignes
1er ligne
2eme ligne
3eme ligne
3 - Exécutes ton code :)

Si ça ne fonctionne pas : PLAN B :mrgreen: Télécharge et décompresse ce fichier dans lequel tu retrouveras ce que je viens de dire et fait un test.
:arrow: http://s242132022.onlinehome.fr/downloa ... 0ligne.zip

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : sam. 13/déc./2014 19:12
par klystron
le dernier code :

Code : Tout sélectionner

  


EnableExplicit

Enumeration Fichier
  #Fichier
EndEnumeration

;************** VALEUR POUR "SpeechVoiceSpeakFlags".*****************

Enumeration
  #SVSFDefault            = 0
  #SVSFlagsAsync          = 1
  #SVSFPurgeBeforeSpeak   = 2
  #SVSFIsFilename         = 4
  #SVSFIsXML              = 8
  #SVSFIsNotXML           = 16
  #SVSFPersistXML         = 32
  #SVSFNLPSpeakPunc       = 64
  #SVSFNLPMask            = 64
  #SVSFVoiceMask          = 127
  #SVSFUnusedFlags        = -128
EndEnumeration
Enumeration
  #CLSCTX_INPROC_SERVER   = $1
  #CLSCTX_INPROC_HANDLER  = $2
  #CLSCTX_LOCAL_SERVER    = $4
  #CLSCTX_REMOTE_SERVER   = $10
  #CLSCTX_ALL             = (#CLSCTX_INPROC_SERVER | #CLSCTX_INPROC_HANDLER | #CLSCTX_LOCAL_SERVER | #CLSCTX_REMOTE_SERVER)
EndEnumeration

Interface ISpeechVoice Extends IDispatch
  get_Status(*ISpeechVoiceStatus .l)
  get_Voice(*ISpeechObjectToken.l)
  put_Voice(*ISpeechObjectToken.l)
  get_AudioOutput(*ISpeechObjectToken.l)
  put_AudioOutput(*ISpeechObjectToken.l)
  get_AudioOutputStream(*ISpeechBaseStream.l)
  put_AudioOutputStream(*ISpeechBaseStream.l)
  get_Rate(long.l)
  put_Rate(long.l)
  get_Volume(long.l)
  put_Volume(long.l)
  put_AllowAudioOutputFormatChangesOnNextSet(VARIANT_BOOL.l)
  get_AllowAudioOutputFormatChangesOnNextSet(VARIANT_BOOL.l)
  get_EventInterests(SpeechVoiceEvents .l)
  put_EventInterests(SpeechVoiceEvents .l)
  put_Priority(SpeechVoicePriority.l)
  get_Priority(SpeechVoicePriority.l)
  put_AlertBoundary(SpeechVoiceEvents.l)
  get_AlertBoundary(SpeechVoiceEvents.l)
  put_SynchronousSpeakTimeout(long.l)
  SynchronousSpeakTimeout(long.l)
  Speak(*Text, SpeechVoiceSpeakFlags.l, long.l)
  SpeakStream(*ISpeechBaseStream, SpeechVoiceSpeakFlags.l, long.l)
  Pause()
  Resume()
  Skip(*Type, NumItems.l, long.l)
  GetVoices(*RequiredAttributes.l, *OptionalAttributes, *ISpeechObjectTokens.l)
  GetAudioOutputs(*RequiredAttributes, *OptionalAttributes, *ISpeechObjectTokens.l)
  WaitUntilDone(msTimeout.l, VARIANT_BOOL.l)
  SpeakCompleteEvent(long.l)
  IsUISupported(*TypeOfUI, *ExtraData.VARIANT, VARIANT_BOOL.l)
  DisplayUI(hWndParent.l, *Title, *TypeOfUI, *ExtraData.VARIANT)
EndInterface 


Procedure.b isSAPIInstalled()

; VERIFICATION DE L'INSTALLATION DE SAPI 4 OU 5.
  Define a.i
  Define bresult.b = #False

  CoInitialize_(0)
  If CoCreateInstance_(?CLSID_SpVoice, 0, #CLSCTX_ALL, ?IID_ISpVoice, @a) = 0
    bresult = #True
  Else
    If CoCreateInstance_(?CLSID_ITextToSpeech, 0, #CLSCTX_ALL, ?IID_ITextToSpeech, @a) = 0
      bresult = #True
    EndIf
  EndIf
  CoUninitialize_()
  ProcedureReturn bresult 
  
EndProcedure


Procedure SAPISpeechtext(stext.s, speed = 0)

  Define.i itemp, bstrtext
  Define text1.s
  Define *buffer1, *buffer2, *buffer3 
  Define clsid.CLSID, refiid.CLSID
  Define speechvoice.ISpeechVoice
    
  If isSAPIInstalled() = #True And stext <> #NULL$
    text1 = "SAPI.SpVoice"
    *buffer1 = AllocateMemory((Len(text1) + 1) * 2)
    PokeS(*buffer1, text1, -1, #PB_Unicode)
    text1 = "{269316D8-57BD-11D2-9EEE-00C04F797396}"
    *buffer2 = AllocateMemory((Len(text1) + 1) * 2)
    PokeS(*buffer2, text1, -1, #PB_Unicode)
    If CLSIDFromProgID_(*buffer1, @Clsid.clsid)    = #S_OK
      If CLSIDFromString_(*buffer2, @Refiid.clsid) = #S_OK
        CoInitialize_(0)
        If  CoCreateInstance_(clsid, #Null, #CLSCTX_INPROC_SERVER, refiid, @speechvoice) = #S_OK
          *buffer3 = AllocateMemory((Len(stext) + 1) * 2)
          PokeS(*buffer3, stext, -1, #PB_Unicode)
          itemp    = #SVSFDefault
          bstrtext = SysAllocString_(*buffer3)
          
                
          speechvoice\put_Rate(speed)
          speechvoice\put_Volume(100)
                            
          speechvoice\Speak(bstrtext, 0, @itemp)
          SysFreeString_(bstrtext)
          FreeMemory(*buffer3)
          speechvoice\Release()
        EndIf
        CoUninitialize_()
      EndIf
    EndIf
    FreeMemory(*buffer1)
    FreeMemory(*buffer2)
    
  EndIf


EndProcedure

  If ReadFile(#fichier,"textealire.txt")


    While Eof(#fichier) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
      Debug ReadString(#fichier)      ; Affiche ligne par ligne le contenu du fichier
    Wend
    CloseFile(#fichier)               ; Ferme le fichier précédemment ouvert
  Else
    MessageRequester("Information","Impossible d'ouvrir le fichier!")
  EndIf

SAPISpeechtext("textealire.txt", -5) ; -5 vitesse de lecture lente

End

DataSection
  CLSID_SpVoice:
    Data.l $96749377
    Data.w $3391,$11D2
    Data.b $9E,$E3,$00,$C0,$4F,$79,$73,$96
  IID_ISpVoice:
    Data.l $269316D8
    Data.w $57BD,$11D2
    Data.b $9E,$EE,$00,$C0,$4F,$79,$73,$96
  CLSID_ITextToSpeech:
    Data.l $EEE78591
    Data.w $FE22,$11D0
    Data.b $8B,$EF,$00,$60,$08,$18,$41,$DE
  IID_ITextToSpeech:
    Data.l $EEE78590
    Data.w $FE22,$11D0
    Data.b $8B,$EF,$00,$60,$08,$18,$41,$DE

EndDataSection


 
Bon,je crois que je vais arreté ce code, car beaucoup trop complexe pour moi, je vais me cantonné à des codes plus simples, c'est dommage, car c'est un programme tres sympa, ce n'est pas le mien je l'ai récupéré je ne sais ou, mais il devrait etre continué car il pourrait rendre des services a des mals voyants par exemple.
il faut s'avoir s'arreté a temps .

pour mémoire :

Ce code à été écrit par Sapero avec le language Aurora Compiler
Traduit en Purebasic par Nico et modifié par GallyHC et Ar-s.

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : dim. 14/déc./2014 9:43
par Marc56
Ne te décourage pas, tu a juste fais deux erreurs :|

1. Tu te contente d'afficher les caractères au lieu de les emmagasiner dans une variable (concaténation)
2. Tu lis le nom du fichier et non pas le nom de la variable.

Code : Tout sélectionner

Comme tu semble avoir abandonné, je te donne la solution
(tu n'étais pas loin)   :)  

Define TexteComplet$

  If ReadFile(#fichier,"textealire.txt")
    While Not Eof(#fichier)           
    	TexteComplet$ + ReadString(#fichier)	; Concaténer tous les caractères lus dans une variable
    Wend
    CloseFile(#fichier)            
  Else
  	MessageRequester("Information","Impossible d'ouvrir le fichier!")
  EndIf

SAPISpeechtext(TexteComplet$, -5)				; Lire le contenu de la variable  
Il faut bien sur que ton fichier texte se trouve à l'endroit où tu as sauvegardé ton programme, sinon, il faut donner le chemin complet.

:wink:

PS. Tu verras que le programme a du mal hélas à lire les accents ("je suis un lève tôt" il lit "je suis un l cinquième tt" :roll: )

Re: peut-on lire a haute voix un texte en Français d'un fich

Publié : dim. 14/déc./2014 9:48
par klystron
bon dimanche Marc56, merci pour ton aide.