Voilà, je me bagarre avec la lecture d'un fichier *.Wav suivi de la lecture
d'un texte avec l'outil de voix(speechlib).
Tout ceci doit se faire durant l'éxécution du programme : Le mode asynchrone
est alors très utile
Pour la lecture du wav, j'utilise l'API sndPlaySound
Pour la lecture de la voix, j'utilise le librairie sapi.dll (Ms speech objet
library)
Public v As SpeechLib.SpVoice
Sub parle(ByVal Text As String)
On Error GoTo Speak_Error
v.Speak Text, SVSFlagsAsync
Exit Sub
Speak_Error:
End Sub
* Si je lance la lecture des éléments :
FichierSons$ = app.Path + "\son\annonce.wav"
res% = sndPlaySound(ByVal FichierSons$, SND_ASYNC Or SND_NODEFAULT)
parle "Attention le train rentre en gare"
Les sons se chevauchent mais le programme continu de tourner
* Si je change le mode de lecture du Wav (SND_SYNC ) cela se passe bien mais
le programme se fige durant la lecture du wav
Comment puis-je faire pour avoir la lecture du wav, puis du texte sans que
le programme se fige??
"Jacques93" a écrit dans le message de news: %23a7H$
Donc si je comprends, on lance la lecture du "vrai" son en ASYNC puis on fait un while avec le SND_NOSTOP juste dans le but d'attendre la fin du "vrai son" (je suppose que le .wav à utiliser dans la boucle while est juste la pour attendre la fin du "vrai", il doit être vide ?) Puis on lance le parle "blah blah ..."
C'est bien l'idée?
Oui, tout à fait. Le fichier utilisé dans la boucle n'a même pas besoin d'exister (à condition de mettre également SND_NODEFAULT, sinon il y a le son par défaut qui est joué, en l'occurrence le beep d'erreur). Si il est vraiment vide (cad 0 octet), le format de fichier est invalide, et on se retrouve dans le cas précédent : il faut mettre SND_NODEFAULT.
C'est bien ce que je pensais et merci pour les explications complémentaires.
Créer un fichier .wav silencieux étant ici superflu, autant qu'il n'existe pas, mais ce n'est que mon avis ;-)
C'est sur!
Le seul inconvénient que je vois, est la nécessité du sleep entre le début du "vrai" wav, et la boucle d'attente. Mais pas d'autre idée pour l'instant.
A mon sens, ça ne gêne pas, ce niveau de "bidouille" est très acceptable :-))
"Jacques93" <jacques@Nospam> a écrit dans le message de news:
%23a7H$FQIHHA.4068@TK2MSFTNGP03.phx.gbl...
Donc si je comprends, on lance la lecture du "vrai" son en ASYNC
puis on fait un while avec le SND_NOSTOP juste dans le but d'attendre
la fin du "vrai son" (je suppose que le .wav à utiliser dans la boucle
while est juste la pour attendre la fin du "vrai", il doit être vide ?)
Puis on lance le parle "blah blah ..."
C'est bien l'idée?
Oui, tout à fait. Le fichier utilisé dans la boucle n'a même pas besoin
d'exister (à condition de mettre également SND_NODEFAULT, sinon il y a
le son par défaut qui est joué, en l'occurrence le beep d'erreur). Si il
est vraiment vide (cad 0 octet), le format de fichier est invalide, et on
se retrouve dans le cas précédent : il faut mettre SND_NODEFAULT.
C'est bien ce que je pensais et merci pour les explications
complémentaires.
Créer un fichier .wav silencieux étant ici superflu, autant qu'il n'existe
pas, mais ce n'est que mon avis ;-)
C'est sur!
Le seul inconvénient que je vois, est la nécessité du sleep entre le début
du "vrai" wav, et la boucle d'attente. Mais pas d'autre idée
pour l'instant.
A mon sens, ça ne gêne pas, ce niveau de "bidouille" est très
acceptable :-))
"Jacques93" a écrit dans le message de news: %23a7H$
Donc si je comprends, on lance la lecture du "vrai" son en ASYNC puis on fait un while avec le SND_NOSTOP juste dans le but d'attendre la fin du "vrai son" (je suppose que le .wav à utiliser dans la boucle while est juste la pour attendre la fin du "vrai", il doit être vide ?) Puis on lance le parle "blah blah ..."
C'est bien l'idée?
Oui, tout à fait. Le fichier utilisé dans la boucle n'a même pas besoin d'exister (à condition de mettre également SND_NODEFAULT, sinon il y a le son par défaut qui est joué, en l'occurrence le beep d'erreur). Si il est vraiment vide (cad 0 octet), le format de fichier est invalide, et on se retrouve dans le cas précédent : il faut mettre SND_NODEFAULT.
C'est bien ce que je pensais et merci pour les explications complémentaires.
Créer un fichier .wav silencieux étant ici superflu, autant qu'il n'existe pas, mais ce n'est que mon avis ;-)
C'est sur!
Le seul inconvénient que je vois, est la nécessité du sleep entre le début du "vrai" wav, et la boucle d'attente. Mais pas d'autre idée pour l'instant.
A mon sens, ça ne gêne pas, ce niveau de "bidouille" est très acceptable :-))
J'ai essayé toutes vos solutions et j'ai employé différents composants pour arriver au résultat. C'est un mix de timer, calcul de durée et d'une collection...
Bonne continuation
-- Guy
Bonjour
J'ai essayé toutes vos solutions et j'ai employé différents composants pour
arriver au résultat. C'est un mix de timer, calcul de durée et d'une
collection...
J'ai essayé toutes vos solutions et j'ai employé différents composants pour arriver au résultat. C'est un mix de timer, calcul de durée et d'une collection...