Recherche
1 connecté

  Actuellement : 2 commentaires Spécial Delphi - Michel

Microsoft Speech API

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
Dernière mise à jour : le 19 octobre 2003


Présentation 


Microsoft Speech API (également appelé SAPI) est basée sur l'Alphabet Phonetique International (API, en anglais IPA, International Phonetic Alphabet).
Microsoft a développé cette technologie pour la reconnaissance vocale et la synthèse de la parole.
L'avantage de SAPI est sa compatibilité avec toutes les cartes son fonctionnant sous Windows.
SAPI permet à partir de Delphi, de créer un programme utilisant la parole. Vous pourrez par exemple faire parler l'ordinateur ou lancer une application lorsque vous dites un certain mot grâce à un microphone.


Installation


Pour installer Microsoft Speech API version 5.0 (il existe une version 5.1), voici la marche à suivre.
Selon, les systèmes d'exploitation Windows, vous devez télécharger
Microsoft Speech API (version 5.1, 68 Mo). Pour Windows XP, Microsoft Speech API version 5.0 est déja installé (vous pouvez mettre à jour en installant la version 5.1).
Allez dans le menu "Projet" de Delphi puis sur "Importer une bibliothèque de types...".



Choisissez dans la liste "Microsoft Speech Object Library (Version 5.0)". Puis, vérifier que la case "Générer le Wrapper de composant" est coché pour que. Ensuite, cliquez sur le bouton "Installer...". Par défaut, les composants seront dans l'onglet "ActiveX" de la palette de composants de Delphi.
L'unité qui sera crée s'appellera "SpeechLib_TLB.pas".
La fenêtre "Installation" apparait alors. Cliquez sur le bouton "OK" pour installer Microsoft Speech API dans le paquet. Ensuite, une fenêtre vous informe que le paquet va être construit puis compilé. Cliquez sur "Oui". Une fenêtre apparait vous indiquant les composants qui ont été installé.
Pour terminer, enregistrez les modifications du paquet (lorsque vous cliquez sur petite la croix de la fenêtre "Paquet", on vous demande si vous voulez enregistrer les modifications, cliquez sur "Oui").
Microsoft Speech API est maintenant installé. Pour le vérifier, allez dans la palette de composants de Delphi sur l'onglet "ActiveX". Vous pouvez remarquer qu'il y a 19 composants en plus dont le composant "TSpVoice".

A noté également, qu'il est possible d'utiliser Microsoft Speech API sans l'installer dans Delphi grâce à l'OLE (Object Linking & Embedding).

Uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var voix: variant;
begin
voix:=CreateOLEObject('SAPI.SpVoice');
//Crée un objet unique non initialisé de la classe spécifiée par le paramètre 'SAPI.SpVoice'
voix.Speak('Bonjour');
//L'ordinateur dit "Bonjour"
voix:=UnAssigned;
//Assigne une valeur vierge à la variable de type variant
end;



Obtenir de l'aide sur Microsoft Speech API


Pour obtenir de l'aide sur Microsoft Speech API, vous pouvez vous rendre sur le site de Microsoft pour télécharger le fichier d'aide au format CHM.


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]



Faire lire un texte par un ordinateur avec des balises XML


En réalité, les balises XML permettront pendant la lecture d'effectuer 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 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]