I. Présentation▲
Microsoft Speech API (également appelé SAPI) est basée sur l'Alphabet Phonétique 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.
II. 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éjà 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érifiez que la case « Générer le Wrapper de composant » est cochée. 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és.
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 ».
À noter é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
//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
;
III. 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.
IV. 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
//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érences entre ces deux modes (il existe aussi d'autres modes).
V. 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.
Ajoutez 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) ainsi 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
//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 puisse sélectionner 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.
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 lue 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
//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]
VI. 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 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 de connaitre quelques balises 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.
Télécharger le programme [5 Ko]