Page 1 sur 6

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

Publié : ven. 12/déc./2014 13:57
par klystron
Bonjour à tous,
Peut-on lire à haute voix un texte en Français dans un fichier extérieur ( point TXT) ?
avec purebasic ?
je crois avoir vu un code, je ne sais ou ... (avec la possibilité de faire varier la vitesse.)
cela serait très intéressant .
bonne apres-midi.
A+

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

Publié : ven. 12/déc./2014 15:19
par klystron
J'ai retrouvé une partie du code, mais comment faire pour appeler le site de la voix virginie Française ? et de lire un fichier extérieur du type texte ?.
" http://www.pbfrance.com/upload/sapi_frenchvirginie.exe"
je pense qu'il faut télécharger ce lien et l'installer sur son ordinateur ?.

voici le code :

Code : Tout sélectionner

  ; ****************************************************************************
; * By PBFrance : http://www.pbfrance.com/?url=source&cmd=viewer&val=46
; ****************************************************************************

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

; ****************************************************************************
; ****************************************************************************

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)
          ;
          ; EXEMPLE DE QUELQUES PARAMATRES.
          ;
          speechvoice\put_Rate(speed)
          speechvoice\put_Volume(100)
          ;
          ; EXEMPLE DE QUELQUES PARAMATRES.
          ;
          speechvoice\Speak(bstrtext, 0, @itemp)
          SysFreeString_(bstrtext)
          FreeMemory(*buffer3)
          speechvoice\Release()
        EndIf
        CoUninitialize_()
      EndIf
    EndIf
    FreeMemory(*buffer1)
    FreeMemory(*buffer2)
    
  EndIf
  
EndProcedure
;
; METTRE LE TEXTE A DIRE.
;
SAPISpeechtext("Ceci est un test normal ")
SAPISpeechtext("Ceci est un test rapide", 5)
SAPISpeechtext("Ceci est un test lent", -5)
;
; METTRE LE TEXTE A DIRE.
;
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
; IDE Options = PureBasic 5.31 (Windows - x64)
; CursorPosition = 147
; FirstLine = 122
; Folding = -
; EnableUnicode
; EnableXP  


*************************************************************************
j'ai une erreur a la ligne 115 si je refais une lecture , peut-être au niveau du buffer ?
si non ca fonctionne ,avec les trois petites phrases du code,en anglais .
Comment modifié ce code ,pour pouvoir aller chercher un fichier texte, et le lire automatiquement ?.
merci de me répondre.
A+

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

Publié : sam. 13/déc./2014 8:37
par Micoute
Bonjour klystron, il fonctionne très bien ce code, je viens de l'essayer et il fait exactement ce qu'il dit !

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

Publié : sam. 13/déc./2014 9:32
par Ar-S
Pour Windows lance
en x86 (32bits) > "C:\Windows\System32\Speech\SpeechUX\sapi.cpl"
OU
en x64 (64bits) > "C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl"
et à "sélection de la voix" sélectionner "ScanSoft Virgine_Dri40_16kHz" .

Pour Lire un fichier texte je te laisser regarder la commande ReadFile() dans la doc de purebasic.

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

Publié : sam. 13/déc./2014 10:46
par klystron
Bonjour Ar-S,
je viens de regarder la documentation purebasic concernant le mot clé Readfile() , mais j'aurais aimé avoir un exemple de code avec ce type de mot, car il faut aussi fermer après lecture je pense ?.
et savoir ou le placer dans le code.
si tu as un exemple type ?
merci .
A+

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

Publié : sam. 13/déc./2014 11:26
par falsam
klystron a écrit :je viens de regarder la documentation purebasic concernant le mot clé Readfile()
Tu as un exemple commenté avec la fonction ReadFile()
:arrow: http://www.purebasic.com/french/documen ... dfile.html

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

Publié : sam. 13/déc./2014 11:37
par klystron
Bonjour Falsam,
oui avec ta documentation, c'est plus clair .

If ReadFile(0, "Texte.txt") ; Si le fichier peut être lu , on continue...
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

je vais essayé de ne pas me trompé .
a plus tard.

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

Publié : sam. 13/déc./2014 11:47
par klystron
j'ai modifié le code ,en ajoutant les quelques lignes de ton exemple, mais j'ai une fenetre qui s'affiche me disant : impossible d'ouvrir le fichier .
faut-il mettre le fichier sur le meme répertoire ?.

le code modifé :

Code : Tout sélectionner

    ; ****************************************************************************
; * By PBFrance : http://www.pbfrance.com/?url=source&cmd=viewer&val=46
; ****************************************************************************

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

; ****************************************************************************
; ****************************************************************************

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)
          ;
          ; EXEMPLE DE QUELQUES PARAMATRES.
          ;
          speechvoice\put_Rate(speed)
          speechvoice\put_Volume(100)
          ;
          ; EXEMPLE DE QUELQUES PARAMATRES.
          ;
          speechvoice\Speak(bstrtext, 0, @itemp)
          SysFreeString_(bstrtext)
          FreeMemory(*buffer3)
          speechvoice\Release()
        EndIf
        CoUninitialize_()
      EndIf
    EndIf
    FreeMemory(*buffer1)
    FreeMemory(*buffer2)
    
  EndIf


EndProcedure
;*********essai de fichier exterieur ************

  If ReadFile(0, "Texte.txt")  ; Si le fichier peut être lu , on continue...
    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
;*****************************************fin modif **************
;
; METTRE LE TEXTE A DIRE.
;
SAPISpeechtext("Ceci est un test normal ")
SAPISpeechtext("Ceci est un test rapide", 5)
SAPISpeechtext("Ceci est un test lent", -5)
;
; METTRE LE TEXTE A DIRE.
;
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
; IDE Options = PureBasic 5.31 (Windows - x64)
; CursorPosition = 147
; FirstLine = 122
; Folding = -
; EnableUnicode
; EnableXP     

il faudrait peut-être rechercher ou se trouve le fichier texte , dans un répertoire ?.

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

Publié : sam. 13/déc./2014 11:54
par falsam
klystron a écrit :faut-il mettre le fichier sur le meme répertoire ?.
Oui
If ReadFile(0, "Texte.txt")
ReadFile va ouvrir ton fichier "texte.txt" mais comme tu ne spécifies pas dans quel dossier il se situe, le fichier doit se trouver dans ce cas dans le même dossier que le code.

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

Publié : sam. 13/déc./2014 11:59
par klystron
ok , et il faut qu'il se nomme texte.txt si non cela ne marchera pas ...
si non, peut-on lui demandé de chercher un fichier texte dans un répertoire autre et de nom différent ? ça doit compliqué bien les choses ...

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

Publié : sam. 13/déc./2014 12:05
par falsam
Le fichier texte tu le nommes comme tu veux et tu spécifies le dossier que tu veux. Rien de compliquer à ça.

Exemple :
ReadFile(0, "MonDossier/MonFichier.txt") Le fichier MonFichier.txt se trouve dans le dossier MonDossier qui se trouve lui même dans le même dossier que le code.

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

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

Publié : sam. 13/déc./2014 12:09
par klystron
Oui bon, là je ne vois pas trop ...
je vais réfléchir a tout ce que tu m'as dis .
je te remercie pour tes infos.


pour la lecture , il faut faire comment pour lire a une vitesse demandée ?:

SAPISpeechtext("Ceci est un test lent", -5)


A+

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

Publié : sam. 13/déc./2014 12:15
par falsam
klystron a écrit :Oui bon, là je ne vois pas trop ...
Aie !!!

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

Publié : sam. 13/déc./2014 12:17
par klystron
non, je vais trouvé, il me faut un peu de temps ...

pour la suite , c'est a dire la lecture :

SAPISpeechtext("Ceci est un test lent", -5)

que faut-il modifier ?

car le texte sera sur un fichier ...

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

Publié : sam. 13/déc./2014 12:19
par falsam
Le texte que tu veux lui faire dire par exemple :)