|
Tutoriaux
- Microsoft Speech API - Synthèse de la parole |
Pour faire parler
l'ordinateur, on utilise la méthode "Speak" du composant
"TSpVoice" que vous trouverez dans l'onglet "ActiveX"
de la palette de composants de Delphi.
procedure
TForm1.Button1Click(Sender: TObject);
begin
SpVoice1.Speak('Bonjour',SVSFDefault); //L'ordinateur
dit "Bonjour"
end; |
|
Cette méthode
contient deux paramètres :
- Le premier paramètre permet de faire lire le texte "Bonjour"
par l'ordinateur.
- Le deuxième paramètre "SVSFDefault" permet
de lire le texte de manière synchrone.
Pour le deuxième paramètre, vous pouvez mettre la lecture
de façon asynchrone avec "SVSFlagAsync".
Par la suite, vous verrez les différence entres ces deux modes
(il existe aussi d'autres modes).
Faire lire
un texte par un ordinateur |
L'exemple d'utilisation
est un programme qui permet la lecture d'un texte par l'ordinateur.
Il permet également d'obtenir la phonétique de ce texte.
Ajouter trois composants
TGroupBox, deux TMemo, deux TTrackBar, quatre TLabel, un TButton et
un TSpVoice. Disposez ses composants comme l'image ci-dessus.
Pour commencer, on peut par exemple régler le volume sonore
(par défaut à 100) ansi que la vitesse de lecture (par
défaut à 0). Ensuite, on utilise la méthode "Speak"
du composant "TSpVoice" que l'on a évoqué
précédemment.
procedure
TForm1.Button1Click(Sender: TObject);
begin
SpVoice1.Volume:=TrackBar1.Position; //Volume
du son (de 0 à 100)
SpVoice1.Rate:=TrackBar2.Position;
//Vitesse de lecture (de -10 à 10)
SpVoice1.Speak(Memo1.Text,SVSFlagsAsync); //L'ordinateur
lit le texte contenu dans le memo
{"SVSFlagsAsync" permet
de travailler avec le composant de manière asynchrone.
Ceci permet d'afficher dans le Memo2, la phonétique
pendant la lecture non à la fin de la lecture}
Memo1.SetFocus; //Donne la focalisation
au contrôle (pour que l'on puiss sélectionné
le texte qui est en train d'être lu)
end; |
|
Lorsque l'ordinateur
va lire un mot du texte contenu dans "Memo1", on sélectionne
alors ce mot.
procedure
TForm1.SpVoice1Word(Sender: TObject; StreamNumber: Integer;
StreamPosition: OleVariant; CharacterPosition, Length:
Integer);
begin
//Sélectionne le mot qui
est en train d'être lu
Memo1.SelStart:=CharacterPosition; //Position
du premier caractère
Memo1.SelLength:=Length; //Position
du dernier caractère
end; |
|
Ensuite, on doit ajouter
l'unité "ActiveX" au programme car l'événement
"OnPhoneme" utilise "TOleEnum".
On récupère grâce au fichier d'aide CHM la phonétique
de la langue anglaise.
Puis, il suffit d'ajouter dans le "Memo2" la phonétique
qui est en tain d'être lu par l'ordinateur.
Uses
ActiveX;
procedure TForm1.SpVoice1Phoneme(Sender: TObject;
StreamNumber: Integer; StreamPosition: OleVariant; Duration:
Integer; NextPhoneId: Smallint; Feature: TOleEnum; CurrentPhoneId:
Smallint);
const Phonetic: array[1..49] of
String=(
'-','!','&',',','.','?','_','1','2','aa','ae','ah','ao','aw',
'ax','ay','b','ch','d','dh','eh','er','ey','f','g','h','ih','iy',
'jh','k','l','m','n','ng','ow','oy','p','r','s','sh','t','th',
'uh','uw','v','w','y','z','zh');
//Cela correspond à la phonétique
de la langue anglaise (voir l'aide de Microsoft Speech
API à "phoneme")
begin
if CurrentPhoneId<>7 then
//Si la phonétique n'est
pas un espace (le caractère "_" correspond
à un espace)
Memo2.Text:=Memo2.Text+Phonetic[CurrentPhoneId]+#32; //Ajoute
la phonétique (#32 correspond à un espace)
end; |
|
Comme vous pouvez
le remarquer, la voix de l'ordinateur a une voix avec un certain accent
anglais.
Synthèse de
la parole |
[ 11-09-2003 ] |
Faire
lire un texte par l'ordinateur.
Télécharger : [8
Ko] [
sapi.zip]
Auteur : Yoann
Site internet : http://delphipage.free.fr/
|
|
Faire lire
un texte par un ordinateur avec des balises XML |
Grâce à
des balises XML, on peut effectuer pendant la lecture quelques opérations
sur la tonalité de la voix comme par exemple le volume ou la
vitesse de lecture.
Ajoutez un composant TGroupBox,
TMemo, TButton et TSpVoice.
Disposez ses composants comme l'image ci-dessus.
Pour réaliser cela, il suffit juste de connaitre quelque balise
comme par exemple "<VOLUME>" ou "<RATE>"
et de les insérer dans le texte que l'on veut faire lire par
l'ordinateur.
procedure
TForm1.Button1Click(Sender: TObject);
begin
SpVoice1.Speak(Memo1.Text,SVSFIsXML); //Lit
le texte du memo
end; |
|
On peut remarquer
que le second paramètre de la méthode "Speak"
est cette fois-ci "SVSFIsXML". Cela signifie que le texte
contient des balises XML qu'il faut prendre en compte.
Synthèse
de la parole avec des balises XML |
[ 11-09-2003 ] |
Faire
lire un texte par l'ordinateur.
Télécharger : [5
Ko] [
sapixml.zip]
Auteur : Yoann
Site internet : http://delphipage.free.fr/
|
|
|