Microsoft Speech API en Delphi

Cet article a pour but de montrer l'utilisation de Microsoft Speech API en Delphi

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

1. 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.

2. 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...".

Image non disponible

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).

 
Sélectionnez

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

3. 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.

4. 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.

 
Sélectionnez

procedure TForm1.Button1Click(Sender: TObject);
begin
  //L'ordinateur dit "Bonjour"
  SpVoice1.Speak('Bonjour',SVSFDefault);
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).

5. 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.

Image non disponible

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.

 
Sélectionnez

procedure TForm1.Button1Click(Sender: TObject);
begin
  //Volume du son (de 0 à 100)
  SpVoice1.Volume:=TrackBar1.Position;
  //Vitesse de lecture (de -10 à 10)
  SpVoice1.Rate:=TrackBar2.Position;
  //L'ordinateur lit le texte contenu dans le memo
  SpVoice1.Speak(Memo1.Text,SVSFlagsAsync);
  // "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
  //Donne la focalisation au contrôle (pour que l'on puiss sélectionné le texte
  // qui est en train d'être lu)
  Memo1.SetFocus;
end;

Lorsque l'ordinateur va lire un mot du texte contenu dans "Memo1", on sélectionne alors ce mot.

 
Sélectionnez

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.

 
Sélectionnez

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
  //Si la phonétique n'est pas un espace (le caractère "_" correspond à un espace)
  if CurrentPhoneId<>7 then
    //Ajoute la phonétique (#32 correspond à un espace)
    Memo2.Text:=Memo2.Text+Phonetic[CurrentPhoneId]+#32;
end;

Comme vous pouvez le remarquer, la voix de l'ordinateur a une voix avec un certain accent anglais.

Télécharger le programme [8 Ko]

6. 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.

Image non disponible

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.

 
Sélectionnez

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.

Télécharger le programme [5 Ko]

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.