Bonjour,
J'avais réalisé des jeux en VBA en utilisant le narrateur (sous VBA Excel). J'utilisais le code que j'ai copié ci-dessous.
Question : comment utiliser cela en Purebasic V5.72, si c'est possible ?
Merci à vous
code VBA Excel
'----- Ouverture du narrateur
Set Osound = CreateObject("sapi.SPVoice")
'----- Mise en français de la voix du narrateur après téléchargement de RSSolo4FrenchVirginie.exe (seulement en 32 bits)
Osound.Voice.Category.Default = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\ScanSoftVirginie_Dri40_16kHz"
'----- Volume : maximum = 100
Osound.Volume = 100
'----- Vitesse
Osound.Rate = -1
'----- lecture par le narrateur
Osound.Speak "Bonjour, comment allez-vous ?"
Comment utiliser le narrateur Windows ?
Re: Comment utiliser le narrateur Windows ?
bjr
Pour commencer, il te faut utiliser ce module pour une utilisation
de la commande activeScript "CreateObject()"
Cordialement
https://www.purebasic.fr/english/viewto ... 12&t=71399
Pour commencer, il te faut utiliser ce module pour une utilisation
de la commande activeScript "CreateObject()"
Cordialement
https://www.purebasic.fr/english/viewto ... 12&t=71399
Re: Comment utiliser le narrateur Windows ?
Un autre moyen de faire parler Windows
Vieux code qui doit être sur le forum (pas de moi donc ne me demande pas d'explications
(Peut lire un fichier ou des chaines de caractères, je m'en sert pour l'horloge parlante)(Testé Windows 10 PB 5.72 LTS x64)
Vieux code qui doit être sur le forum (pas de moi donc ne me demande pas d'explications
(Peut lire un fichier ou des chaines de caractères, je m'en sert pour l'horloge parlante)
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
Define TexteComplet$ = "Bonjour, il est 15 heures"
; 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$, 0) ; (-5) Lire le contenu de la variable
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: Comment utiliser le narrateur Windows ?
Super, ça fonctionne...
Merci beaucoup.
Je programme depuis plus de 40 ans (j'étais informaticien pour une banque, retraité depuis 5 ans), j'ai utilisé plein de langages, mais je trouve PureBasic vraiment très bien et complet
Merci beaucoup.
Je programme depuis plus de 40 ans (j'étais informaticien pour une banque, retraité depuis 5 ans), j'ai utilisé plein de langages, mais je trouve PureBasic vraiment très bien et complet