Faite parler votre ordinateur!

Partagez votre expérience de PureBasic avec les autres utilisateurs.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Faite parler votre ordinateur!

Message par nico »

Soyer patient en lançant le code, il y un petit temps d'attente.
Fonctionne pas mal pour la langue anglaise seulement!

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)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

nous avons a fait mieux et en français !!! :) :wink:

voir ici : http://www.purebasic.fr/french/viewtopi ... light=sapi
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Vous utilisez la lib PureTTS, il y a le code source avec, je ne connais pas.

Sinon pour la langue française j'ai trouvé aussi:
http://www.zebulon.fr/astuces/200-synth ... ncais.html
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Il a posté une partie du code source seulement, dommage!.

Pour la lange française il suffisait d'après le code source de faire:
Texte3.s="<voice required="+Chr(34)+"Name=LH Veronique"+Chr(34)+"/>"+"PureBasic! est vraiment super"
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

nico a écrit :Vous utilisez la lib PureTTS, il y a le code source avec, je ne connais pas.

Sinon pour la langue française j'ai trouvé aussi:
http://www.zebulon.fr/astuces/200-synth ... ncais.html
ha ! oui ! tu as parfaitement raison !! :?

et ont ne dispose pas du source !! :?

j'ai fait un appel sur le forum anglais, on sait jamais !! :D

finalement l'adaptation devrai etre possible d'apres ton code !! :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

C'est cool, espérons qu'il répond favorablement, cette librairie est vraiment géniale!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

nico a écrit :Il a posté une partie du code source seulement, dommage!.

Pour la lange française il suffisait d'après le code source de faire:
Texte3.s="<voice required="+Chr(34)+"Name=LH Veronique"+Chr(34)+"/>"+"PureBasic! est vraiment super"
non ! ça ne marche pas!!! :(
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

par contre ton code marche en français si apres avoir installé
une voix sapi5 ou 4 française , et qu'elle soit déclaré comme voix par defaut
dans XP !! :)
nico a écrit :C'est cool, espérons qu'il répond favorablement, cette librairie est vraiment géniale!
sur Pure Area , elle est a jour pour la V4.00 mais marche tres bien avec la v4.10 beta 2 !! (je viens de tester ! :D)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Dobro a écrit :
nico a écrit :Il a posté une partie du code source seulement, dommage!.

Pour la lange française il suffisait d'après le code source de faire:
Texte3.s="<voice required="+Chr(34)+"Name=LH Veronique"+Chr(34)+"/>"+"PureBasic! est vraiment super"
non ! ça ne marche pas!!! :(

Moi ça marche bien sûr il faut que le voix existe, je met par défaut la voix de microsoft, et en mettant devant le texte à prononcer ce texte:"<voice required="+Chr(34)+"Name=LH Veronique"+Chr(34)+"/>"; cela a pour effet de spécifier la voix même si ce n'est pas celle sélectionnée par défaut.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

nico a écrit :
Dobro a écrit :
nico a écrit :Il a posté une partie du code source seulement, dommage!.

Pour la lange française il suffisait d'après le code source de faire:
Texte3.s="<voice required="+Chr(34)+"Name=LH Veronique"+Chr(34)+"/>"+"PureBasic! est vraiment super"
non ! ça ne marche pas!!! :(

Moi ça marche bien sûr il faut que le voix existe, je met par défaut la voix de microsoft, et en mettant devant le texte à prononcer ce texte:"<voice required="+Chr(34)+"Name=LH Veronique"+Chr(34)+"/>"; cela a pour effet de spécifier la voix même si ce n'est pas celle sélectionnée par défaut.
j'ai 32 voix d'installer sur mon system !!
dont les françaises suivantes :

Sapi5 --> "Virginie"
et les sapi4 suivantes

"Pierre"
"Véronique"
et ça marche pas chez moi !!

:?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

....................
Dernière modification par Backup le sam. 19/mars/2011 18:26, modifié 1 fois.
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

J'avais fait une demande a l'auteur de PureTTS au sujet du code source, demande qui a ete passé sous silence, il est clair qu'il ne souhaite pas fournir le code, j'ai donc arrete l'utilisation de la lib, c'est dommage car je la trouvais tres puissante, mais vu que purebasic evolue tres vite, utilisé une lib fermé dans un programme pour se retrouver un jour le bec dans l'eau, tres peu pour moi. de toute facon, il y'a toujours des alternatives sans contraintes comme PureDishelper...

@nico, merci du code (tres instructif), balaise d'avoir traduit ca a partir du code d'aurora (nouveau compilateur genre C de l'auteur du defunt ibasic, aurora semble en concurrence avec ebasic du meme auteur ou comment se tirer soi meme une balle dans le pied, cela dit je dois avouer que les languages sont tres attractifs question prix, reste que l'auteur me semble un peu trop dispersé et instable, mais bon c'est un autre debat...)

8)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Dobro a écrit :voici ce que me repond Esteban1:
Bien, il y a long temps puisque j'ai rendu PureTTS userlibrary. Je pense que vous pouvez effectuer bien mieux un travail employant juste le nouveau PureDispHelper userlibrary et les COM de SAPI. Jetez un coup d'oeil à http://www.purebasic.fr/english/viewtopic.php?t=26744
bref, il ne veux pas donner ses sources apparemment, puisqu'il m'envoie utiliser PureDispHelper la lib qui gere les COM, (c'est vrais que l'on gère aussi la synthèse vocale avec :) )

mais la complexité de cette lib m'a un peux rebuter, d'autant que l'on ne dispose pas des sources !!

j'ai de plus en plus de mal a comprendre, pourquoi les sources ne sont pas dispo, surtout pour des lib, qui ne sont pas vendues !
et qui risque de se perdre a chaque changement de Version de PureBasic !! :?

a ce titre , heureusement que je disposait des sources de "syntax hightlighing" , sinon , j'aurai ete bien embeté avec mon PureGolo !! :?

c'est vrai qu'avec PureDispHelper

c'est plus court pour le faire parler !! :lol:


; by ts-soft

EnableExplicit
dhToggleExceptions( #True )
Define.l obj = dhCreateObject( "SAPI.SpVoice" )
If obj
dhCallMethod(obj, "Speak (%T,%i)" , @ "PureBasic, parle bien" , 0)
dhReleaseObject(obj) : obj = 0

EndIf



mais pour choisir les voix ?
ou la vitesse de diction,
ou le pitch ?? 8O
ca marche pour moi a condition d'avoir les voix de vero et pierre installees, cela di si on peut choisir la voix dans la chaine, il doit etre possible d'utiliser d'autres parametres, faudrait voir la doc de microsoft a ce sujet :wink:

Code : Tout sélectionner

; by ts-soft

;EnableExplicit
dhToggleExceptions( #True )
Define.l obj = dhCreateObject( "SAPI.SpVoice" )
Parle$="<voice required="+Chr(34)+"Name=LH Veronique"+Chr(34)+"/>"+"PureBasic est vraiment super"
Parle$="<voice required="+Chr(34)+"Name=LH Pierre"+Chr(34)+"/>"+"PureBasic est vraiment super"
If obj
    dhCallMethod(obj, "Speak (%T,%i)" , @ Parle$ , 0)
    dhReleaseObject(obj) : obj = 0    
EndIf 
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

@Coolman,

J'ai profité d'une promotion pour acheté Ebasic et Aurora Compiler, ce dernier est vraiment intéressant et déjà pas mal abouti, mais Paul l'auteur est contesté comme tu le dis, il y a un fil du forum anglais ou un ancien dévellopeur en parle: http://www.purebasic.fr/english/viewtop ... ght=aurora

Le Forum de Paul ne bouge pas beaucoup, je crains de na pas être le bienvenue pour tous, sur leur Forum je ne cache pas venir de Purebasic.

Il ne save pas tous qu'à l'origine j'ai commencé à programmer avec Ibasic et Ibasic pro dont j'ai perdu les licences mais de toute façon je ne programmais plus avec.

Paul semble toujours avoir des problèmes d'argent, c'était déjà le cas au temps d'Ibasic, ce qui laisse des doutes quand au dévelloppement du compilateur.

Aurora est une bonne alternative pour qui veut s'initier au c++, je pense.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ici la doc micromoux !! de SaPI

http://www.microsoft.com/downloads/deta ... n#filelist

voila comment on choisi ne voix, mais j'y comprend rien :lol:
ISpVoice::SetVoice
ISpVoice::SetVoice sets the identity of the voice used for text synthesis. ISpVoice normally uses the default voice, which is set through Speech properties in Control Panel.



HRESULT SetVoice(
ISpObjectToken *pToken
);

Parameters
pToken
[in] Pointer to token that describes the requested voice. If pToken is NULL, the system default voice is used.
Return values
Value Description
S_OK Function completed successfully.
E_INVALIDARG One or more parameters are invalid.

Remarks
Changing the voice selection will preserve the same volume and rate levels for an ISpVoice object.

Example

The following is an example to enumerate all the available voices registered under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices.

HRESULT hr = S_OK;
CComPtr<ISpObjectToken> cpVoiceToken;
CComPtr<IEnumSpObjectTokens> cpEnum;
CComPtr<ISpVoice> cpVoice;
ULONG ulCount = 0;

// Create the SAPI voice
if(SUCCEEDED(hr))
hr = cpVoice.CoCreateInstance( CLSID_SpVoice );


//Enumerate the available voices
if(SUCCEEDED(hr))
hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum);

//Get the number of voices
if(SUCCEEDED(hr))
hr = cpEnum->GetCount(&ulCount);

// Obtain a list of available voice tokens, set the voice to the token, and call Speak
while (SUCCEEDED(hr) && ulCount -- )
{
cpVoiceToken.Release();
if(SUCCEEDED(hr))
hr = cpEnum->Next( 1, &cpVoiceToken, NULL );

if(SUCCEEDED(hr))
hr = cpVoice->SetVoice(cpVoiceToken);

if(SUCCEEDED(hr))
hr = cpVoice->Speak( L"How are you?", SPF_DEFAULT, NULL);
}
Répondre