Installation
On a déjà parlé a plusieurs reprises d'Acapela dans nos colonnes, à savoir par exemple que c'est le moteur d'Acapela qui est utilisé par le lapin Nabaztag. Imaginons maintenant que vous ayez besoin de faire parler votre application avec une voix de haute qualité avec Acapela? Est-ce compliqué?
Pour la sortie d'Acapela Multimedia 6.0, nous avons décidé de tenter le coup pour vous, et de faire une mini application de démonstration en Delphi.
Après installation des librairies Acapela, de la documentation et des exemples, il faut demander une licence de 30 jours pour la machine en lançant LicMan.exe et en cliquant sur "30 days free trial". Nous voici donc prêt pour la programmation!
On lance Delphi!
Première étape, on va importer la librairie Acapela pour pouvoir utiliser le contrôle ActiveX dans Delphi. Plus besoin de s'amuser à lire des headers en C et de tenter des les convertir, les interfaces simplifient grandement le travail.
Après avoir cliqué sur "Import ActiveX Control", il faut ensuite locliser la librairie d'Acapela dans la liste, à savoir ASASpeechCtl. Une fois cela fait, on clique ensuite sur "Create Unit" pour générer le code du composant permettant d'utiliser la librairie.
Comme pour ton nouveau composant Delphi, il faut maintenant l'installer dans un package et ensuite compiler et installer le package pour avoir accès au nouveau composant.
Et si on codait?
On est donc parti! On va donc commencer par créer le composant dans le FormCreate.
Le ConnectEngine est obligatoire pour pouvoir commencer à utiliser Acapela. Les 3 paramètres sont obligatoires et ne peuvent être que ces valeurs, pas trop de problème donc pour le moment.
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- FSpeech := TAASpeechCtrl.Create(self);
- if FSpeech.ConnectEngine(1, 0, '') <> 0 then
- raise Exception.Create('Unable to connect to the API');
- FSpeechVoice := -1;
- end;
Après création du contrôle, on peut maintenant faire la liste des voix disponibles. Pour la démonstration, seules les voix francophones ont été installées, mais il existe des dizaines de voix dans toutes les langues les plus courantes.
- procedure TForm1.Button1Click(Sender: TObject);
- var
- i: Integer;
- begin
- case FSpeech.Enumerate of
- EAS_NOT_CONNECTED:
- raise Exception.Create('API Not connected');
- EAS_NOT_ENOUGH_MEMORY:
- raise Exception.Create('Not enough memory');
- EAS_SRV_NOTRUNNING:
- raise Exception.Create('SRV Not Running');
- end;
- for i:=0 to FSpeech.VoiceCount-1 do
- ListBox1.Items.Add(FSpeech.Voice[ i ].Speaker);
- end;
Si tout s'est bien déroulé jusqu'ici, il ne reste maintenant plus qu'à faire parler notre application... Et rien de plus simple à vrai dire.
On sélectionne tout d'abord la voix dans la listbox et on utilise le .cmd au lieu du .speaker. Une fois la voix chargée, il suffit d'utiliser la fonction speak avec le texte à annoncer.
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- if ListBox1.ItemIndex = -1 then
- raise Exception.Create('Please select a voice first');
- if FSpeechVoice <> ListBox1.ItemIndex then
- begin
- if FSpeechVoice <> -1 then
- FSpeech.Unload;
- FSpeechVoice := ListBox1.ItemIndex;
- FSpeechVoiceID := FSpeech.Load(FSpeech.Voice[FSpeechVoice].Cmd);
- end;
- FSpeech.Speak(Memo1.Text, FSpeechVoiceID);
- end;
Pour être un tant soit peu soigneux, il ne faudrait pas non plus oublier d'unloader de moteur TTS (Text To Speech), d'appeler la méthode de fermeture du moteur et de le libérer.
- procedure TForm1.FormDestroy(Sender: TObject);
- begin
- FSpeech.Unload;
- FSpeech.DisconnectEngine;
- FreeAndNil(FSpeech);
- end;
C'était un bref aperçu, on peut utiliser ce code pour commencer à faire parler son application Delphi, mais il est encore possible de paramétrer pleins de choses comme la vitesse, le pitch, le volume et de réagir à toute une série d'événement pour savoir quand le TTS a terminé de parler, etc, etc...
Tout cela est parfaitement documenté dans le fichier AcaMul-ActiveX-6.pdf d'Acapela.
Et ça donne?
Pas de magnifique interface, c'est à vous de jouer. Le premier bouton à gauche rempli la ListBox des voix disponibles. Le deuxièle à droite envoie le texte au moteur Acapela en ayant chargé la voix sélectionnée dans la ListBox.
Il va de soit que l'exemple ici est un peu précaire, il n'y a que peu de protections et il n'est pas très fonctionnel, il est donc conseillé de faire un peu plus attention à ce qui pourrait mal se passer à chaque étape.
Les sources du programme
Bruno HQ
Caroline HD
Claire HQ
Pierre HD
Alors, conquis?