peut-on lire a haute voix un texte en Français d'un fichier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message 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+
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message 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 .
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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")
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message 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

  
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message 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 )
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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).
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message par klystron »

oui , mais ça bloque avant d'arrivé a la lecture des lignes ?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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 ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message par klystron »

j'ai le message , m'indiquant Impossible d'ouvrir le fichier!

c'est le debug readstring (0) qui doit-etre pas bon
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message 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.
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

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

Message 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: )
Dernière modification par Marc56 le dim. 14/déc./2014 9:50, modifié 1 fois.
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

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

Message par klystron »

bon dimanche Marc56, merci pour ton aide.
Répondre