Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Microsoft Speech API - Synthèse de la parole

La méthode Speak

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] [Télécharger 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] [Télécharger sapixml.zip]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 

Tous droits réservés - Contacts
Haut de la page