Edit: Now it's working, there is another strange but welcome factor - the speech is superior to the Microsoft default setting.
Library Speak_lib
-
IdeasVacuum
- Always Here

- Posts: 6426
- Joined: Fri Oct 23, 2009 2:33 am
- Location: Wales, UK
- Contact:
Re: Library Speak_lib
ah, no, it was in fact the Unicode thing - I always have Unicode as default 
Edit: Now it's working, there is another strange but welcome factor - the speech is superior to the Microsoft default setting.
Edit: Now it's working, there is another strange but welcome factor - the speech is superior to the Microsoft default setting.
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
If it sounds simple, you have not grasped the complexity.
Re: Library Speak_lib
? superior ??the speech is superior
-
IdeasVacuum
- Always Here

- Posts: 6426
- Joined: Fri Oct 23, 2009 2:33 am
- Location: Wales, UK
- Contact:
Re: Library Speak_lib
In clarity - I do not know why, must be the default MS settings.
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
If it sounds simple, you have not grasped the complexity.
Re: Library Speak_lib
this code of Flype , work in Unicode Mode 
an use the "Token" (base64 encode)( here in French )
an use the "Token" (base64 encode)( here in French )
Code: Select all
; Ce code à été écrit par Sapero avec le language Aurora Compiler
; Traduit en Purebasic By Nico
; exemple de Flype
#CLSCTX_INPROC_SERVER = 1
Enumeration 0 ; SpeechVoiceSpeakFlags
#SVSFDefault = 0
#SVSFlagsAsync = 1
#SVSFPurgeBeforeSpeak = 2
#SVSFIsFilename = 4
#SVSFIsXML = 8
#SVSFIsNotXML = 16
#SVSFPersistXML = 32
#SVSFNLPSpeakPunc = 64
#SVSFNLPMask = 64
#SVSFVoiceMask = 127
#SVSFUnusedFlags = -128
EndEnumeration
Import "ole32.lib"
CoInitialize(reserved.l = #Null)
CoUninitialize()
CLSIDFromProgID(ProgID.p-bstr, *clsid.CLSID)
CLSIDFromString(String.p-bstr, *clsid.CLSID)
EndImport
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.p-bstr, 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
Interface ISpeechObjectToken Extends IDispatch
get_Id(ObjectId)
get_DataKey(ISpeechDataKey.l)
get_Category(ISpeechObjectTokenCategory.l)
GetDescription(Locale.l, Description)
SetId(id, CategoryID, CreateIfNotExist)
GetAttribute(AttributeName.p-bstr, *AttributeValue)
CreateInstance(pUnkOuter, SpeechTokenContext, Object)
Remove(ObjectStorageCLSID)
GetStorageFileName(ObjectStorageCLSID, KeyName, FileName, SpeechTokenShellFolder, *FilePath)
RemoveStorageFileName(ObjectStorageCLSID, KeyName, DeleteFile)
IsUISupported(TypeOfUI, *ExtraData, *Object, *Supported)
DisplayUI(hwnd, Title, TypeOfUI, *ExtraData, *Object)
MatchesAttributes(Attributes, *Matches)
EndInterface
Interface ISpeechObjectTokens Extends IDispatch
get_Count(a.l)
Item(Index.l, Token.ISpeechObjectToken)
get__NewEnum(ppEnumVARIANT.IUnknown )
EndInterface
Procedure.l Speak2(*SpeechVoice.ISpeechVoice, *SpeechObjectTokens.ISpeechObjectTokens, Text.s, Rate.l = 0, Voice.l = 0)
Protected flag.l = #SVSFDefault, Token.ISpeechObjectToken
If *SpeechObjectTokens\Item(Voice, @Token) = #S_OK
*SpeechVoice\put_Voice(Token)
*SpeechVoice\put_Rate(Rate)
*SpeechVoice\Speak(Text, 0, @flag)
EndIf
EndProcedure
Procedure.l SpeakBase64(*SpeechVoice.ISpeechVoice, *SpeechObjectTokens.ISpeechObjectTokens, TextBase64.s, Rate.l = 0, Voice.l = 0)
Protected Text.s = Space(Len(TextBase64))
Speak2(*SpeechVoice, *SpeechObjectTokens, Left(Text, Base64Decoder(@TextBase64, Len(TextBase64), @Text, Len(Text))), Rate, Voice)
EndProcedure
If CLSIDFromProgID("SAPI.SpVoice", @clsid.CLSID) = #S_OK
If CLSIDFromString("{269316D8-57BD-11D2-9EEE-00C04F797396}", @Refiid.CLSID) = #S_OK
CoInitialize()
If CoCreateInstance_(clsid, #Null, #CLSCTX_INPROC_SERVER, Refiid, @SpeechVoice.ISpeechVoice) = #S_OK
; Listing des voix installés
; Voice[0] = Microsoft Sam, 409;9
; Voice[1] = LH Veronique, 40C
; Voice[2] = LH Pierre, 40C
SpeechVoice\GetVoices(0, 0, @SpeechObjectTokens.ISpeechObjectTokens)
SpeechObjectTokens\get_Count(@Count)
VoiceList.s = ""
For i = 0 To Count - 1
SpeechObjectTokens\Item(i, @Token.ISpeechObjectToken)
Token\GetDescription(0, @Description)
Token\GetAttribute("Language", @AttributeValue)
VoiceList + "Voice[" + Str(i) + "].Description = " + PeekS(Description, -1, #PB_Unicode) + #LF$
VoiceList + "Voice[" + Str(i) + "].Language = " + PeekS(AttributeValue, -1, #PB_Unicode) + #LF$
Token\Release()
Next
MessageRequester("Information", VoiceList)
; Joue quelques phrases
Speak2(SpeechVoice, SpeechObjectTokens, "Pardon pour ces quelques gros mots mais c'est trop rigolo !", 0, 0)
SpeakBase64(SpeechVoice, SpeechObjectTokens, "VmEgdGUgZmFpcmUgZm91dHJlIGNvbm5hcmQsIGVzcOhjZSBkJ2VuY3Vs6SwgZ3JvcyBtZXJkZXV4LCBwYXV2cmUgY29uLCBncm9zIGTpYmlsZSwgYWJydXRpLCBncm9zIGN1bCBwbGVpbiBkZSBtZXJkZSAh", 1, 0)
Speak2(SpeechVoice, SpeechObjectTokens, "Ah ah ah ah ha t'es trop con!", 1, 0)
; Libération des ressources
SpeechObjectTokens\Release()
SpeechVoice\Release()
EndIf
CoUninitialize()
EndIf
EndIf
;
; EPB
Re: Library Speak_lib
here Virginie an Reader of Clipboard
prg which implements the above book ...
you select a sentence (or a text) to read, and Control+C ->copy to clipboard
then you click on the button [Speak]
first, choose a voice
adjust the playback speed,
adjust the pitch

prg which implements the above book ...
you select a sentence (or a text) to read, and Control+C ->copy to clipboard
then you click on the button [Speak]
first, choose a voice
adjust the playback speed,
adjust the pitch
Code: Select all
; Virginie By Dobro
; an Reader of Clipboard
Declare MyStopEvent()
Declare MyStartEvent()
Declare MyPositionEvent(letter.l)
Enumeration
#Fenetre
#liste
#bouton_parle
#text
#text2
#text3
#text4
#Vitesse
#fichier
#volume
#pitch
EndEnumeration
global param$
global voix$=getvoix( )
global nombre = Val(StringField(voix$,1,","))+1
global Name$ ; the nameof voice
;voices.l = TTSEngCount() ; Get the highest voice index.
If nombre > -1 ; If there are any voice installed...
Debug "There are "+Str(nombre-1)+" voices installed in your system"
; ************ just for control ****************************
For i=2 To nombre
name$=StringField(voix$,i,",") ;TTSEngName(i) ; Retrieve each voice name.
Debug "Voice index = "+Str(i)+" , Voice name = "+name$
Next i
Else
MessageRequester("erreur","je ne trouve pas de voix"+Chr(10)+"installé sur le system",#PB_MessageRequester_Ok )
End
EndIf
; ******************************************************************
;{**********lit le reglage*****************
OpenPreferences (GetCurrentDirectory()+"init.prefs")
PreferenceGroup("Global")
param$=readPreferenceString("voix", "eSpeak-en")
vitesse$=readPreferenceString("Vitesse", "-50")
volume$=readPreferenceString("Volume", "100")
pitch$=readPreferenceString("pitch", "10")
ClosePreferences()
global voix=Val(param$)
global vitesse=Val(vitesse$)
global volume=Val(volume$)
global pitch=Val(pitch$)
;}***************************
;For i=0 To voix
name$=StringField(voix$,voix+1,",") ;TTSEngName(i) ; Retrieve each voice name.
Debug "Voice index = "+Str(i)+" , Voice name = "+name$
debug "*******************"
; Next i
;TTSSelect(voix) ; choisi la voix sauvé
;TTSSpeak("Bonjour") ; Speak!
Speak(name$,"Bonjour",volume,vitesse,pitch)
OpenWindow( #Fenetre, 374, 121, 200, 180,name$, #PB_Window_SystemMenu | #PB_Window_TitleBar )
SetWindowPos_(WindowID( #Fenetre), -1, 230, 230, 0, 0, #SWP_NOSIZE )
;{ ***** dessin de l'interface **********************
; bouton parle/stop
;CreateGadgetList(WindowID(#Fenetre))
ButtonGadget(#bouton_parle, 5, 25, 120, 40, "Parle")
Resultat = ComboBoxGadget(#liste, 5, 2, 150,20)
; liste des voix
For i=2 To nombre
name$=StringField(voix$,i,",") ;TTSEngName(i) ; Retrieve each voice name.
;Debug "Voice index = "+Str(i)+" , Voice name = "+name$
AddGadgetItem(#liste, -1,name$ ) ; ajoute dans la liste les noms trouvé+nationalité
Debug "Voice index = "+Str(i-1)+" , Voice name = "+name$
Next i
SetGadgetState(#liste, voix-1) ; active la voix lu par defaut dans la liste
name$=GetGadgetText(#liste)
SetWindowTitle(#fenetre, name$) ; change le titre de la fenetre
; tracbar horizontal (vitesse de la voix)
TextGadget(#text2 , 2,70, 50, 15, "Vitesse" )
Resultat = TrackBarGadget(#vitesse, 40, 65, 100, 50,0, 12,#PB_TrackBar_Ticks )
SetGadgetState(#vitesse, vitesse+6)
; tracbar horizontal (volume de la voix)
TextGadget(#text3 , 2,120, 50, 15, "Volume" )
Resultat = TrackBarGadget(#volume, 40, 110, 100, 50, 0,100 ,#PB_TrackBar_Ticks )
SetGadgetState(#volume, volume)
; tracbar vertical (pitch)
TextGadget(#text4 , 160,145, 50, 30, "pitch" )
Resultat = TrackBarGadget(#pitch, 160, 50, 50, 100, 0,20,#PB_TrackBar_Vertical )
SetGadgetState(#pitch, pitch)
TextGadget(#text , 2,155, 150, 15, "By Dobro" ,#PB_Gadget_FrontColor)
SetGadgetColor(#text , #PB_Gadget_FrontColor, RGB($42,$42,$FF))
;} ***************************************************
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case #bouton_parle ; apuis sur le bouton parle
text$ = GetClipboardText()
pitch= GetGadgetState(#pitch)
volume= GetGadgetState(#volume)
vitesse= GetGadgetState(#vitesse) -6
; virginie speak , remove the Smiley of Forum ...
text$ = RemoveString(text$, "Very Happy" ,1)
text$ = RemoveString(text$, "Crying or Very sad" ,1)
text$ = RemoveString(text$, "Smile" ,1)
text$ = RemoveString(text$, "Sad" ,1)
text$ = RemoveString(text$, "Surprised" ,1)
text$ = RemoveString(text$, "Shocked" ,1)
text$ = RemoveString(text$, "Confused" ,1)
text$ = RemoveString(text$, "Cool" ,1)
text$ = RemoveString(text$, "Laughing" ,1)
text$ = RemoveString(text$, "Mad" ,1)
text$ = RemoveString(text$, "#Mad" ,1)
text$ = RemoveString(text$, "Razz" ,1)
text$ = RemoveString(text$, "Embarassed" ,1)
text$ = RemoveString(text$, "#evil" ,1)
text$ = RemoveString(text$, "Twisted Evil" ,1)
text$ = RemoveString(text$, "Rolling Eyes" ,1)
text$ = RemoveString(text$, "Wink" ,1)
text$ = RemoveString(text$, "Exclamation" ,1)
text$ = RemoveString(text$, "Question" ,1)
text$ = RemoveString(text$, "Idea" ,1)
; TTSSpeak(text$) ; Speak!
speak(name$,text$,volume,vitesse,pitch)
Case #vitesse
Case #liste ; choix dans la liste combo
voix = GetGadgetState(#liste)
name$=GetGadgetText(#liste)
SetWindowTitle( #fenetre, name$)
fin:
EndSelect
EndSelect
Until EventID = #PB_Event_CloseWindow
;{**********Sauve le reglage*****************
CreatePreferences(GetCurrentDirectory()+"init.prefs")
PreferenceGroup("Global")
WritePreferenceString("voix", Str(voix+1))
WritePreferenceString("Vitesse", Str(vitesse))
WritePreferenceString("Volume", Str(volume))
WritePreferenceString("pitch", Str(pitch))
ClosePreferences()
;}***************************
speak(name$,"au revoir",volume,vitesse,pitch)
End
; EPB
Last edited by dobro on Fri Aug 24, 2012 4:52 pm, edited 1 time in total.
- VB6_to_PBx
- Enthusiast

- Posts: 627
- Joined: Mon May 09, 2011 9:36 am
Re: Library Speak_lib
these Voices are all working for me,
tested on WIN-7-32bit and WIN-7-64bit computers
tested on WIN-7-32bit and WIN-7-64bit computers
Code: Select all
; Speak(the name of the voice$,say the sentence$,Volume ,Speed Diction,Pitch)
; **********************************************************************************
Speak( "Crystal16" , "hello , i am Crystal , what can i speak for you ?" , 100, 1, 150)
Speak( "Mike16" , "hello , i am Mike , what can i speak for you ?" , 100, 1, 150)
Speak( "IVONA Brian" , "hello , i am IVONA Brian , what can i speak for you ?" , 100, 1, 150)
Speak( "IVONA 2 Amy" , "hello , i am IVONA Amy , what can i speak for you ?" , 100, 1, 150)
Speak( "LH Michael" , "hello , i am Michael , what can i speak for you ?" , 100, 1, 150)
Speak( "LH Michelle" , "hello , i am Michelle , what can i speak for you ?" , 100, 1, 150)
Speak( "Microsoft Anna" , "hello , i am Microsoft Anna , what can i speak for you ?" , 100, 1, 150)
PureBasic .... making tiny electrons do what you want !
"With every mistake we must surely be learning" - George Harrison
Re: Library Speak_lib
very interesting, hope a unicode version soon
thanks a lot
thanks a lot
PureBasic: Surprisingly simple, diabolically powerful
Re: Library Speak_lib
morosh wrote:very interesting, hope a unicode version soon
thanks a lot
This version operates in normal mode AND unicode
however, refuses to compile Tailbite ....
I do not understand why, since this library, work in the editor ..
you can always use standard procedures
Syntax :
voix$=getvoix( ) ; return : "returns the number of name_of_voices,name_of_voice1,name_of_voice2,name_of_voice3,....)
Speak2(name_of_voice$,sentence$,Volume (min 0//max 100),Speed_diction (min-6//max 6) ,Pitch (min -10//max 20) )
Code: Select all
global VoiceList.s
Import "ole32.lib"
CoInitialize(reserved.l = #Null)
CoUninitialize()
CLSIDFromProgID(ProgID.p-bstr, *clsid.CLSID)
CLSIDFromString(String.p-bstr, *clsid.CLSID)
EndImport
#CLSCTX_INPROC_SERVER = 1
Enumeration 0 ; SpeechVoiceSpeakFlags
#SVSFDefault = 0
#SVSFlagsAsync = 1
#SVSFPurgeBeforeSpeak = 2
#SVSFIsFilename = 4
#SVSFIsXML = 8
#SVSFIsNotXML = 16
#SVSFPersistXML = 32
#SVSFNLPSpeakPunc = 64
#SVSFNLPMask = 64
#SVSFVoiceMask = 127
#SVSFUnusedFlags = -128
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.p-bstr, 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
Interface ISpeechObjectToken Extends IDispatch
get_Id(ObjectId)
get_DataKey(ISpeechDataKey.l)
get_Category(ISpeechObjectTokenCategory.l)
GetDescription(Locale.l, Description)
SetId(id, CategoryID, CreateIfNotExist)
GetAttribute(AttributeName.p-bstr, *AttributeValue)
CreateInstance(pUnkOuter, SpeechTokenContext, Object)
Remove(ObjectStorageCLSID)
GetStorageFileName(ObjectStorageCLSID, KeyName, FileName, SpeechTokenShellFolder, *FilePath)
RemoveStorageFileName(ObjectStorageCLSID, KeyName, DeleteFile)
IsUISupported(TypeOfUI, *ExtraData, *Object, *Supported)
DisplayUI(hwnd, Title, TypeOfUI, *ExtraData, *Object)
MatchesAttributes(Attributes, *Matches)
EndInterface
Interface ISpeechObjectTokens Extends IDispatch
get_Count(a.l)
Item(Index.l, Token.ISpeechObjectToken)
get__NewEnum(ppEnumVARIANT.IUnknown )
EndInterface
Procedure.l Speak(*SpeechVoice.ISpeechVoice, *SpeechObjectTokens.ISpeechObjectTokens, Text.s, Rate.l = 0, Voice.l = 0,Volume=100)
Protected flag.l = #SVSFDefault, Token.ISpeechObjectToken
If *SpeechObjectTokens\Item(Voice, @Token) = #S_OK
*SpeechVoice\put_Volume(volume)
*SpeechVoice\put_Voice(Token)
*SpeechVoice\put_Rate(Rate)
*SpeechVoice\Speak(Text, 0, @flag)
EndIf
EndProcedure
ProcedureDLL Speak2(voix$,text$,volume=100,Vitesse=0,Pitch=0)
If voix$<>""
vox.s="<voice required="+Chr(34)+"Name="+ voix$+Chr(34)+"/>"+"<pitch absmiddle="+Chr(34)+Str(pitch)+Chr(34)+"/>"
Else
vox.s=""
EndIf
If CLSIDFromProgID("SAPI.SpVoice", @clsid.CLSID) = #S_OK
If CLSIDFromString("{269316D8-57BD-11D2-9EEE-00C04F797396}", @Refiid.CLSID) = #S_OK
CoInitialize()
If CoCreateInstance_(clsid, #Null, #CLSCTX_INPROC_SERVER, Refiid, @SpeechVoice.ISpeechVoice) = #S_OK
SpeechVoice\GetVoices(0, 0, @SpeechObjectTokens.ISpeechObjectTokens)
SpeechObjectTokens\get_Count(@Count)
Speak(SpeechVoice, SpeechObjectTokens, vox.s+text$, vitesse, 0,volume)
SpeechObjectTokens\Release()
SpeechVoice\Release()
EndIf
CoUninitialize()
EndIf
EndIf
EndProcedure
;
procedureDLL.s getvoix( )
If CLSIDFromProgID("SAPI.SpVoice", @clsid.CLSID) = #S_OK
If CLSIDFromString("{269316D8-57BD-11D2-9EEE-00C04F797396}", @Refiid.CLSID) = #S_OK
CoInitialize()
If CoCreateInstance_(clsid, #Null, #CLSCTX_INPROC_SERVER, Refiid, @SpeechVoice.ISpeechVoice) = #S_OK
SpeechVoice\GetVoices(0, 0, @SpeechObjectTokens.ISpeechObjectTokens)
SpeechObjectTokens\get_Count(@Count)
VoiceList.s = ""
VoiceList =str(count)+","
For i = 0 To Count - 1
SpeechObjectTokens\Item(i, @Token.ISpeechObjectToken)
Token\GetDescription(0, @Description)
Token\GetAttribute("Language", @AttributeValue)
VoiceList+ PeekS(Description, -1, #PB_Unicode) + ","
;;;;;;;VoiceList + "Voice[" + Str(i) + "].Language = " + PeekS(AttributeValue, -1, #PB_Unicode) + #LF$
Token\Release()
Next i
SpeechObjectTokens\Release()
SpeechVoice\Release()
EndIf
CoUninitialize()
EndIf
endif
ProcedureReturn VoiceList.s
EndProcedure
; ******************************************************************************************************************
; ******************************************************************************************************************
; ******************************** Example to use *********************************************************************
voix$=getvoix( ) ; on recupere le nombre et le nom des voix installé //////// Grab Voices on systeme
; getvoix() retourne une chaine "nbr_de_voix,voix1$,voix2$,voix3$........ etc "
nombre = Val(StringField(voix$,1,",")) ; recupere le nombre de voix installé (premier element de la chaine) ; //// number voices on system
voix$=Right(voix$,Len(voix$)-2) ; on retire le nombre de voix, et sa virgule de la liste des noms de voix
debug " List Of Voices "
For i=1 To nombre ;
Debug StringField(voix$,i,",") ; ressort tout les noms des voix installées ////////// print name of voices
Next i
;
Speak2("eSpeak-EN","hello my Friend",100,-2,150) ; if the voice Espeak installed ; it say "hello my Friend"
; ******************************************************************************************************************
; ******************************************************************************************************************
; EPB
Re: Library Speak_lib
Yes exactly, I noticed that.
the problem comes from TailBite
thanks
the problem comes from TailBite
thanks
PureBasic: Surprisingly simple, diabolically powerful
