Yo,
J'aimerais des explications/informations sur ca en général car je ne comprends rien avec tous les topics éparpillés un peu partout, les liens morts, etc..
[RESOLU] Speak()
[RESOLU] Speak()
Dernière modification par Anonyme 2 le jeu. 01/sept./2011 20:45, modifié 1 fois.
Re: Speak()
Pour résumer c'est une lib de Dobro utilisant les systèmes de voix de synthèse SAPI.
Donc soit tu télécharges la lib de Dobro, soit tu essayes de faire ta propre routine.
Pour tester tu peux essayer ce code de Nico (ne nécessite pas de lib)
Donc soit tu télécharges la lib de Dobro, soit tu essayes de faire ta propre routine.
Pour tester tu peux essayer ce code de Nico (ne nécessite pas de lib)
Code : Tout sélectionner
; Ce code à été écrit par Sapero avec le language Aurora Compiler
; Traduit en Purebasic By Nico
#CLSCTX_INPROC_SERVER=1
;/Valeur pour SpeechVoiceSpeakFlags
#SVSFDefault = 0
#SVSFlagsAsync = 1
#SVSFPurgeBeforeSpeak = 2
#SVSFIsFilename = 4
#SVSFIsXML = 8
#SVSFIsNotXML = 16
#SVSFPersistXML = 32
#SVSFNLPSpeakPunc = 64
#SVSFNLPMask = 64
#SVSFVoiceMask = 127
#SVSFUnusedFlags = -128
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
Texte1.s="SAPI.SpVoice"
*Tampon1=AllocateMemory((Len(Texte1)+1)*2)
PokeS(*Tampon1,Texte1,-1,#PB_Unicode)
Texte2.s="{269316D8-57BD-11D2-9EEE-00C04F797396}"
*Tampon2=AllocateMemory((Len(Texte2)+1)*2)
PokeS(*Tampon2,Texte2,-1,#PB_Unicode)
If CLSIDFromProgID_(*Tampon1, @Clsid.CLSID)=#S_OK
If CLSIDFromString_(*Tampon2, @Refiid.CLSID)=#S_OK
CoInitialize_(0)
If CoCreateInstance_(Clsid, #Null, #CLSCTX_INPROC_SERVER, Refiid, @SpeechVoice.ISpeechVoice)=#S_OK
Texte3.s="PureBasic! is very nice"
*Tampon3=AllocateMemory((Len(Texte3)+1)*2)
PokeS(*Tampon3,Texte3,-1,#PB_Unicode)
temp=#SVSFDefault
bstrText = SysAllocString_(*Tampon3)
SpeechVoice\Speak(bstrText, 0, @temp)
SysFreeString_(bstrText)
FreeMemory(*Tampon3)
SpeechVoice\Release()
EndIf
CoUninitialize_()
EndIf
EndIf
FreeMemory(*Tampon1)
FreeMemory(*Tampon2)
~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
Re: Speak()
Ok merci pour les infos
Re: [RESOLU] Speak()
Bonjour,
je suis tombé par hasard sur ce topic que je trouve gigantissime
je félicite par la présente les auteur... et rend grâce à pureBasic qui permet de gérer tant de choses
par contre je n'arrive pas à le faire parler en français
j'utilise : PureBasic 5.22 LTS (Windows - x86) // windows 7 professionnel (sans droits admin)
j'ai vu dans le forum un lien pour enregistrer d'autres voix... qui ne sont peut-etre pas dans windows par défaut
n'ayant aucun droit admin, existe-t-il la possibilité de modifier le code pour pouvoir parler en francais, ou suis-je condamné à lui donner une chaine de carractere phonétique pour faire de l'a peu pres??
merci pour vos lumières
david t
je suis tombé par hasard sur ce topic que je trouve gigantissime
je félicite par la présente les auteur... et rend grâce à pureBasic qui permet de gérer tant de choses
par contre je n'arrive pas à le faire parler en français
j'utilise : PureBasic 5.22 LTS (Windows - x86) // windows 7 professionnel (sans droits admin)
j'ai vu dans le forum un lien pour enregistrer d'autres voix... qui ne sont peut-etre pas dans windows par défaut
n'ayant aucun droit admin, existe-t-il la possibilité de modifier le code pour pouvoir parler en francais, ou suis-je condamné à lui donner une chaine de carractere phonétique pour faire de l'a peu pres??
merci pour vos lumières
david t
Re: [RESOLU] Speak()
Bonjour,
J'ai fait quelque recherche sur le sujet, déjà il te faudra des droits sur l'ordi que tu utilises car il faut installer la voix française (je l'ai mise ici > http://www.pbfrance.com/upload/sapi_frenchvirginie.exe).
Apres il faut executer "C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl" et à "sélection de la voix" sélectionner "ScanSoft Virgine_Dri40_16kHz".
Enfin faire mumuse avec le code-source modifier que voici :
Bonne amusement maintenant ^^
Cordialement,
GallyHC
PS: code complet + info a l'adresse "http://www.pbfrance.com/?url=source&cmd=viewer&val=46"
J'ai fait quelque recherche sur le sujet, déjà il te faudra des droits sur l'ordi que tu utilises car il faut installer la voix française (je l'ai mise ici > http://www.pbfrance.com/upload/sapi_frenchvirginie.exe).
Apres il faut executer "C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl" et à "sélection de la voix" sélectionner "ScanSoft Virgine_Dri40_16kHz".
Enfin faire mumuse avec le code-source modifier que voici :
Code : Tout sélectionner
; Ce code à été écrit par Sapero avec le language Aurora Compiler
; Traduit en Purebasic By Nico
; ****************************************************************************
; ****************************************************************************
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
EndIf
If CoCreateInstance_(?CLSID_ITextToSpeech, 0,#CLSCTX_ALL, ?IID_ITextToSpeech, @a) = 0
bresult = #True
EndIf
CoUninitialize_()
ProcedureReturn bresult
EndProcedure
; ****************************************************************************
; ****************************************************************************
Procedure SAPISpeechtext(stext.s)
;
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(-5)
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
SAPISpeechtext("Voila cela doit être en français")
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
Cordialement,
GallyHC
PS: code complet + info a l'adresse "http://www.pbfrance.com/?url=source&cmd=viewer&val=46"
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: [RESOLU] Speak()
je vais toujours l'essayer à la maison parce que je trouve ça super
c'est vraiment con qu'il faut avoir un code administrateur quand même, je voulais faire des blagues à mes collègues de boulot
et après comme on a accès a un disque dur réseau je voulais l'utiliser pour qu'on puisse faire comme un msn mais qui parle (genre le programme va voir toutes les 5 secondes s'il y a un fichier texte et le lis puis l'efface)
mais bon je sais qu'on ne me donnera pas de code admin donc je vais devoir laisser tomber
merci pour tout
c'est vraiment con qu'il faut avoir un code administrateur quand même, je voulais faire des blagues à mes collègues de boulot
et après comme on a accès a un disque dur réseau je voulais l'utiliser pour qu'on puisse faire comme un msn mais qui parle (genre le programme va voir toutes les 5 secondes s'il y a un fichier texte et le lis puis l'efface)
mais bon je sais qu'on ne me donnera pas de code admin donc je vais devoir laisser tomber
merci pour tout
Re: [RESOLU] Speak()
Je l'ai mis sur PBfrance aussi.
Modif de la routine SAPISpeechtext() pour gérer la vitesse d'élocution de la voix.
Modif de la routine SAPISpeechtext() pour gérer la vitesse d'élocution de la voix.
Code : Tout sélectionner
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
; Pour tester
SAPISpeechtext("Je parle normalement.")
SAPISpeechtext("Je parle vite.",5)
SAPISpeechtext("Je parle lentement.",-5)
~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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