1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OleCtrls, AgentObjects_TLB, StdCtrls,ShellAPI;
type
TForm1 = class(TForm)
Agent1: TAgent;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
procedure FormShow(Sender: TObject);
procedure Agent1Command(Sender: TObject; const UserInput: IDispatch);
procedure Agent1RequestComplete(Sender: TObject;
const Request: IDispatch);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
Peedy:IAgentCtlCharacterEx;
Requete2, RequeteCalcul:IAgentCtlRequest;
implementation
{$R *.DFM}
procedure TForm1.FormShow(Sender: TObject);
begin
Agent1.Connected:=True;
Agent1.Characters.Load('Peedy', 'Peedy.acs');// chargement du personnage Peedy
// (Characters en anglais veut dire Personnages)
Peedy:=Agent1.Characters.Character('Peedy'); // Ainsi Peedy représentera, parmi tous les personnages que contient Agent1
// le personnage Peedy chargé précédemment
//Peedy.Show(False); // Pour le faire apparaître.
//Peedy.LanguageID:=$409; // Choix du langage
// attention, à ce jour, il n'y a pas de Speech recognition engines disponible
// gratuitement sur le site de Microsoft d'ou le 409 (anglais US) et non 40C (Français)
//Peedy.Commands.Add('calcul','&lancer la calculatrice','(calculatrice)',True,True);
// la commande est ainsi repérée par son nom 'calcul'(attention au majuscule),
// si vous cliquez avec le bouton droit sur le personnage
// vous voyez apparaître 'Lancer la calculatrice' dans le menu
// si vous prononcez 'calculatrice', cela déclenche la commande
//Peedy.Commands.Add('Bonjour','&Bonjour','(Hello | Bonsoir)',True,True);
// cette commande sera déclenchée pour le mot 'Hello' ou pour le mot 'bonsoir'
//Peedy.Listen(true);
end;
procedure TForm1.Agent1Command(Sender: TObject;
const UserInput: IDispatch);
var CommandeVocale:String;
begin
Peedy.Listen(false);// pour l'obliger à ne pas déclencher une autre commande trop tot
CommandeVocale:=IAgentCtlUserInput(UserInput).Name;// contient la commande qu'il a interprétée
if CommandeVocale='Bonjour' then // si cette commande correspond à bonjour alors...
begin
Peedy.Play('Wave');// play permet de déclencher une animation de mon personnage
Peedy.Speak('Hello','');
Requete2:=Peedy.speak('Bonjour','')
end
else
if CommandeVocale='calcul' then // si cette commande correspond à calcul alors...
begin
Peedy.Play('Wave'); // Wave est une animation qui le fait dire bonjour avec la main
RequeteCalcul:=Peedy.speak('je vais lancer le programme calc.exe','');
//admirez l'accent de Peedy !
end
else Peedy.Listen(true);// pour le remettre en position écoute
end;
procedure TForm1.Agent1RequestComplete(Sender: TObject;
const Request: IDispatch);
begin
if Request=Requete2 then Peedy.Listen(true);
if Request=RequeteCalcul then ShellExecute(handle,'open','calc.exe','','',0);
// lancement du programme calculatrice de Windows
// vérifiez sa présence sur votre poste
// ou remplacez calc.ese par le chemin + nom d'un autre exécutable
end;
procedure TForm1.Button2Click(Sender: TObject);
{ Les personnages arrètent automatiquement d'être en écoute 10 secondes }
{ après le dernier Listen(true) }
{ J'ai donc rajouté un bouton pour pouvoir le remettre en position écoute }
{ pour se remettre en mode écoute, vous pouvez également appuyer sur la }
begin
Agent1.Characters.Character('Peedy').Listen(true);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Agent1.PropertySheet.Visible:=true;
end;
end. |
Partager