Hecho todo lo anterior, solo queda saber como cargar el personaje, ponerlo en pantalla y hacerlo hablar.
Código Delphi
[-]
uses contnrs, OleCtrls;
public
Merlin:IAgentCtlCharacter;
Ole:OleVariant; Personaje:string;
procedure MostrarAgente;
procedure HablarTexto(const str: string);
procedure OcultarAgente;
procedure Callar;
procedure TForm1.FormShow(Sender: TObject);
var i:integer;
begin
if directoryExists(getwindir +'\msagent\') then
if directoryexists(getwindir+'\msagent\chars') then
begin
findfilesindirS(getwindir+'\msagent\chars','*.acs',
faanyfile,false,TstringList(cbopersonaje.items));
end;
for i:=0 to cbopersonaje.Items.Count-1 do
cbopersonaje.items[i] := getbarefilename(cbopersonaje.items[i]);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
agent1.ShowDefaultCharacterProperties;
end;
procedure TForm1.cargarClick(Sender: TObject);
begin
agent1.Characters.Load(Personaje,Personaje+'.acs');
Merlin :=agent1.Characters[Personaje];
if Merlin.Height<> TrackBar1.Position then
begin
RelacionAspecto := merlin.Height div merlin.Width;
Merlin.Height:= TrackBar1.Position;
Merlin.Width:= Integer(TrackBar1.Position *RelacionAspecto)
end;
end;
procedure TForm1.MostrarAgente;
begin
with Merlin do
begin
if not visible then
Show(Ole);
end;
end;
procedure TForm1.Callar;
begin
Merlin.Stop(Ole);
end;
procedure TForm1.HablarTexto(const str:string);
begin
MostrarAgente;
Merlin.Speak(str,'');
end;
Y ya solo queda hacer con él lo que nos apetezca.
El tema de averiguar los motores de voz que puede usar y el tipo de voz es algo más complejo.
Para un proyecto basico, sobra con esto. Si tienes alguna duda, pinchame un poco
Se me olvidaba, hay otras formas de hacerlo hablar, sin usar un objeto "Merlin:IAgentCtlCharacter" pero he observado que despues no lo puedes hacer callar (te da un error en ejecución), por eso trabajo con el objeto IAgetCtlCharacterSuMadreTambien
Saludos.