peut-on lire a haute voix un texte en Français d'un fichier
Re: peut-on lire a haute voix un texte en Français d'un fich
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+
a plus tard.
A+
Re: peut-on lire a haute voix un texte en Français d'un fich
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é:
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 .
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 .
- 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
Une erreur inattention de ma part dans une de mes réponses précédentes.
Remplacepar
Remplace
Code : Tout sélectionner
ReadFile(0, "C:MonDossier/MonFichier.txt")
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: peut-on lire a haute voix un texte en Français d'un fich
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
)
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é)

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

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é)

Re: peut-on lire a haute voix un texte en Français d'un fich
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à
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à

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
- 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
Dans ton code il y a ces quelques lignesklystron a écrit :et pour lire ligne par ligne le texte, j'en suis pas encore là
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
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: peut-on lire a haute voix un texte en Français d'un fich
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 )
Debug ReadString(0) il faut lui indiqué les lignes ?
debug readstring ( #monfichier.txt )
- 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
Pour chaque ligne oui (Avec la touche entrée bien sur).klystron a écrit :Oui, ligne par ligne , il faut mettre une fin de ligne au texte ?
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: peut-on lire a haute voix un texte en Français d'un fich
oui , mais ça bloque avant d'arrivé a la lecture des lignes ?
- 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
Et voila je suis perdu. Qu'est ce qui bloque ?klystron a écrit :oui , mais ça bloque avant d'arrivé a la lecture des lignes ?
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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: peut-on lire a haute voix un texte en Français d'un fich
j'ai le message , m'indiquant Impossible d'ouvrir le fichier!
c'est le debug readstring (0) qui doit-etre pas bon
c'est le debug readstring (0) qui doit-etre pas bon
- 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
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.
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
Si ça ne fonctionne pas : PLAN B
Télécharge et décompresse ce fichier dans lequel tu retrouveras ce que je viens de dire et fait un test.
http://s242132022.onlinehome.fr/downloa ... 0ligne.zip
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
Tu inséreras ces quelques lignes
3 - Exécutes ton code1er ligne
2eme ligne
3eme ligne

Si ça ne fonctionne pas : PLAN B


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%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: peut-on lire a haute voix un texte en Français d'un fich
le dernier code :
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.
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
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
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.
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.

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"
)

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

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"

Dernière modification par Marc56 le dim. 14/déc./2014 9:50, modifié 1 fois.
Re: peut-on lire a haute voix un texte en Français d'un fich
bon dimanche Marc56, merci pour ton aide.