Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-05-2004
seara2005 seara2005 is offline
Miembro
 
Registrado: ago 2003
Ubicación: Colombia
Posts: 63
Poder: 21
seara2005 Va por buen camino
Question ActiveX Microsoft Agent en Delphi

Quisiera saber como puedo utilizar los "ActiveX Microsoft Agent" en mis programas de delphi. yo utilizo la versión 5.
En la sección de columnas aparece un escrito al respecto, pero no he podido encontrar los archivos necesarios.

muchas gracias

seara2005
__________________
Saludos

Seara2005
Responder Con Cita
  #2  
Antiguo 02-08-2004
seara2005 seara2005 is offline
Miembro
 
Registrado: ago 2003
Ubicación: Colombia
Posts: 63
Poder: 21
seara2005 Va por buen camino
Unhappy ActiveX Microsoft

No he recibido ninguna respuesta, el enlace que aparece en el artículo está desactualizado y no sé cual fichero buscar en la página completa.

Si alguien lo ha logrado

Por favor que me ayude

Muchas gracias
__________________
Saludos

Seara2005
Responder Con Cita
  #3  
Antiguo 03-08-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
www.msagentring.org

En la seccion de descargas tienes que bajar todo lo que hay e instalarlo paso a paso, y por el orden que dice. (da mas de un dolor de cabeza si no se instala en ese orden).

Despues en Delphi, Importas el ActiveX Microsoft Agent 2.0 y listo.

la documentación sobre los bichitos esos es algo dura, por no decir que no hay nada jejeje, solo un par de ejemplos con código fuente.

Saludos
Responder Con Cita
  #4  
Antiguo 04-08-2004
seara2005 seara2005 is offline
Miembro
 
Registrado: ago 2003
Ubicación: Colombia
Posts: 63
Poder: 21
seara2005 Va por buen camino
Thumbs up Activex Microsoft


Muchas Gracias Lepe,
cuando lo pruebe daré mi opinión para
que le sirva a los demás que pudieran estar interesados,

gracias de nuevo
__________________
Saludos

Seara2005
Responder Con Cita
  #5  
Antiguo 11-09-2004
Avatar de German
German German is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 133
Poder: 22
German Va por buen camino
Lightbulb

Esperemos que seara2005 escriba pronto para decir como le fué...

En fín, en referencia a la columna publicada sobre Microsoft Agent, añadir que para hacer funcionar y hablar en español a cualquier personaje en una de nuestras aplicaciones, el usuario final de esa aplicación deberá tener una serie de librerias instaladas en Windows (todos los enlaces son del servidor de descargas de Microsoft):

- Microsoft Agent v2.0 (en XP no es necesario, pues viene incluido):
http://activex.microsoft.com/activex...t2/MSagent.exe

- Componentes para que Microsoft Agent use el idioma español :
http://activex.microsoft.com/activex...2/AgtX0C0A.exe

- Motor Text To Spech (Texto a voz) en español:
http://activex.microsoft.com/activex...2/lhttsspe.exe

- Controles de voz binarios SAPI 4.0a:
http://activex.microsoft.com/activex...pi/spchapi.exe

Y, evidentemente, deberá tener al menos un personaje instalado (XP incluye el "Mago").

- Galeria de personajes:
http://www.msagentring.org/chars.htm

- Página oficial de Ms.Agent:
http://www.microsoft.com/msagent/default.asp

Salu2.

Última edición por German fecha: 11-09-2004 a las 08:21:37.
Responder Con Cita
  #6  
Antiguo 14-09-2004
seara2005 seara2005 is offline
Miembro
 
Registrado: ago 2003
Ubicación: Colombia
Posts: 63
Poder: 21
seara2005 Va por buen camino
Cool

Perdonen a todos los interesados en este tema, es que me he tomado unas vacaciones en el mes de agosto y no he tocado mi PC por varios días.
A partir de hoy les prometo que retomaré el asunto y los mantengo al tanto.

Nota: Les aconsejo que no esperen mucho de mí, ya que soy un aprediz del delphi y de este asunto en particular ni hablar.

chao
__________________
Saludos

Seara2005
Responder Con Cita
  #7  
Antiguo 14-09-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Hecho todo lo anterior, solo queda saber como cargar el personaje, ponerlo en pantalla y hacerlo hablar.
Código Delphi [-]

uses  contnrs,  OleCtrls; // creo que estos 2 son los más raritos.

  public
    { Public declarations }
    Merlin:IAgentCtlCharacter;
    Ole:OleVariant; // se usa para las respuestas que te de el merlin.
    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
// buscamos todos los personajes que tenga instalados y los ponemos en un
// combobox 
// las rutinas de las NKLibs distribuidas en las RXLibs ayudan un poco 
      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]);
  // solo cogemos el nombre, no la ruta completa.

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
// muestra las opciones del personajes para que el usuario las modifique.
   agent1.ShowDefaultCharacterProperties;

end;

// cargar en memoria
procedure TForm1.cargarClick(Sender: TObject);
begin
//  Personaje es un string y tiene el nombre del personaje, en este caso 'Merlin'
  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.

Última edición por Lepe fecha: 14-09-2004 a las 17:42:13.
Responder Con Cita
  #8  
Antiguo 22-09-2004
seara2005 seara2005 is offline
Miembro
 
Registrado: ago 2003
Ubicación: Colombia
Posts: 63
Poder: 21
seara2005 Va por buen camino
Thumbs up

Muchas Gracias a todos los que me han ayudado, especialmente a LEPE y a GERMAN.

He confeccionado un programita sencillo y me ha funcionado correctamente.
El ayudante aparece, desaparece, habla, etc. esto me sirve como base para utilizarlo en cosas mas complejas.

A continuación les describo:
- Realicé las Instalaciones en el orden que Germán explica, busqué los archivos necesarios utilizándo sus enlaces.
- Despues en Delphi, Importé el ActiveX Microsoft Agent 2.0 mediante el menú component\Import Active X Control...\y lo seleccioné de la lista y click en install.
- El la Paleta de componentes en la pestaña de Active X del delphi aparece un Componente llamado Agent.
- Confeccioné el programa guiándome por el que aparece elaborado por Lepe anteriormente y algunas cosas tomadas del artículo de la sección de columnas de este club delphi elaborado por Jorge.

A continuación les describo el Programa:

En el Formulario Inserté un agent y 5 botones (ShowMessage/Opciones/Mostrar/Hablar/Ocultar/Cerrar)
A continuación el código completo:

-------------------------------------------------------
unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, OleCtrls, AgentObjects_TLB, uAgentMessage, StdCtrls,
contnrs;

type
TfrmMain = class(TForm)
btnShowMessage: TSpeedButton;
Agent: TAgent;
ButtonOpciones: TButton;
ButtonMostrar: TButton;
ButtonHablar: TButton;
ButtonOcultar: TButton;
ButtonCerrar: TButton;
procedure FormShow(Sender: TObject);
procedure btnShowMessageClick(Sender: TObject);
procedure ButtonOpcionesClick(Sender: TObject);
procedure ButtonMostrarClick(Sender: TObject);
procedure ButtonHablarClick(Sender: TObject);
procedure ButtonOcultarClick(Sender: TObject);
procedure ButtonCerrarClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }

end;

var
frmMain: TfrmMain;
Agente:String;

implementation

{$R *.DFM}

procedure TfrmMain.FormShow(Sender: TObject);
begin
Agente:='Genie';
Agent.Characters.Load(Agente, Agente+'.acs');
end;

procedure TfrmMain.btnShowMessageClick(Sender: TObject);
begin
ShowAgentMessage(Agent, 'Hola, Esta es una prueba del Microsoft Office Agent, en Delphi', btnShowMessage, True);
end;

procedure TfrmMain.ButtonOpcionesClick(Sender: TObject);
begin
Agent.ShowDefaultCharacterProperties(10,10);
end;

procedure TfrmMain.ButtonMostrarClick(Sender: TObject);
begin
with agent do If not visible then Characters.Item[Agente].Show(0);
end;

procedure TfrmMain.ButtonHablarClick(Sender: TObject);
begin
Agent.Characters.ITem[Agente].Speak ('Hola','');
end;

procedure TfrmMain.ButtonOcultarClick(Sender: TObject);
begin
with agent do if not visible then Characters.Item[Agente].Hide(0);
end;

procedure TfrmMain.ButtonCerrarClick(Sender: TObject);
begin
Close;
end;

end.
-----------------------------------------------------------

He estado probándo algunas cosas, pero como dice Lepe, la documentación sobre esto es escasa, por ejemplo sería interesante darle vida y mostrar las distintas secuencias de animaciones, pero ni modo no he podido. solo mostrarlo, moverlo, ocultarlo, hablar, en fin cosas básicas.
Estoy seguro que algo aparecerá mas adelante.


Gracias de nuevo, especialmente a Lepe y a Germán
__________________
Saludos

Seara2005
Responder Con Cita
  #9  
Antiguo 22-09-2004
Avatar de German
German German is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 133
Poder: 22
German Va por buen camino
Lightbulb

Para saber las animaciones, fíjate que en la página que te puse para descargar personajes (http://www.msagentring.org/chars.htm), que hay un enlace "Character Details..." que muestra todas las posibles de cada personaje.

También he encontrado este código para obtener la lista de animaciones de un caracter, aunque no lo he probado:

Código:
procedure tForm1.GetAnimationList(IAChar:IAgentCtlCharacterEx;Ts:TStrings);
{ IAChar : the character like  Agent.Characters.Character('Genie')
  Ts : the TStrings to be filled with the list of his available animations}
const
  IID_IEnumVariant: TGUID = (D1:$00020404;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46));
var
  pEnum:IEnumVARIANT ;
  vAnimName:VARIANT ;
  dwRetrieved:DWORD ;
  hRes: HResult;
begin
  hRes:=IAChar.AnimationNames.enum.QueryInterface(IID_IEnumVARIANT, pEnum);
    while (TRUE) do begin
      hRes:=pEnum.Next(1, vAnimName, @dwRetrieved);
      if S_OK<>hRes then break;
      // vAnimName is the animation Name
      ts.add(vAnimName);
      //VariantClear(&vAnimName);
    end;
    //pEnum.free();
  end;
end;
Salu2.
Responder Con Cita
  #10  
Antiguo 25-09-2004
seara2005 seara2005 is offline
Miembro
 
Registrado: ago 2003
Ubicación: Colombia
Posts: 63
Poder: 21
seara2005 Va por buen camino
Gracias de Nuevo a Germán

Ya he buscado las animaciones de los personajes en "Character Details..." y está todo muy claro, por ejemplo para (Genie) están:

Acknowledge
Alert
Announce
Blink
Confused
Congratulate
Congratulate_2
Decline
DoMagic1
DoMagic2
DontRecognize
Explain
GestureDown
GestureLeft
GestureRight
GestureUp
GetAttention
GetAttentionContinued
GetAttentionReturn
Greet
Hide
Idle1_1
Idle1_2
Idle1_3
Idle1_4
Idle1_5
Idle1_6
Idle2_1
Idle2_2
Idle2_3
Idle3_1
LookDown
LookDownBlink
LookDownReturn
LookLeft
LookLeftBlink
LookLeftReturn
LookRight
LookRightBlink
LookRightReturn
LookUp
LookUpBlink
LookUpReturn
MoveDown
MoveLeft
MoveRight
MoveUp
Pleased
Process
Read
ReadContinued
ReadReturn
RestPose
Sad
Search
Show
StartListening
StopListening
Suggest
Surprised
Think
Uncertain
Wave
Write
WriteContinued
WriteReturn
--------------------------------------
Hearing_1
Hearing_2
Hearing_3
Hearing_4
Idle3_2
Processing
Reading
Searching
Thinking


Le he agregado a mi programa otro botón con el siguente código asociado:

procedure TfrmMain.ButtonAnimacionClick(Sender: TObject);
begin
Agent.Characters.ITem[Agente].Play('Read');
end;

Y ha funcionado estupendamente.

Solo me queda probar si cuando se distribuye el instalador, el ayudante se agrega en el ejecutable.
__________________
Saludos

Seara2005
Responder Con Cita
  #11  
Antiguo 25-09-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Al final vamos a hacer que baile y todo

He encontrado alguna cosita más sobre el bichito, así, que aquí estoy de nuevo .
Merlin, debe estar declarado como IAgentCtlCharacter o tambien usa la opción
de Buscar y Reemplazar de Delphi:

Busca: Merlin
Sustituye por : Agent1.Characters['Merlin']

Se trata de usar "etiquetas" dentro del texto que ha de hablar.
No modifica la configuración predefinida, sólo el texto que se esté enviando
en el comando Speak.

Con estas etiquetas puedes:
- Modificar el volumen con el que habla.
- Cambiar la forma de hablar: entre susurro, modo normal y monótono.
- Cambiar el número de palabras por minuto que ha de hablar.
- Mostrar y Ocultar el personaje sin animación.
- Poder realizar un Diccionario personalizado, así cuando le envies
el texto "Mb" pronuncie "Megabait"
- Realizar una Pausa mientras está hablando.


Pega este codigo dentro de un botón y verás el resultado.
Lo he puesto en varias líneas, para que puedas ejecutarlas independientemente.

(He cortado las lineas de texto porque son muy grandes)
Código Delphi [-]
    Merlin.Show(false); // Mostrar CON animacion
    Merlin.Speak('quillo, mira, soy el hombre invisible','');
    Sleep(3500);
    Merlin.Hide(true);
    Sleep(600);
    Merlin.Show(true); // Mostrar sin animacion
    Sleep(600);
    Merlin.Hide(true);
    Sleep(600);
    Merlin.Show(true); // Mostrar sin animacion
    Sleep(600);

 Merlin.Speak('\Chr="Whisper"\ no le cuentes a nadie esto','');
 // susurro
 Merlin.Speak('\Rst\ \Chr="Normal"\ juas, que creías?'+
 'que te iba a contar algo?',''); 
// hablar normal

 Merlin.Speak('Mira lo que me han enseñado','');
 Merlin.Speak('\Chr="Whisper"\ahora sé susurrar'+
'  \Chr="Normal"\ tambien hablo como debe ser.\Chr="Monotone"\ '+
' Y por supuesto hablar de forma monótona para agobiar '+
' al mas pintado',''); 

// Mezclando las 3 formas de hablar que existe.


 Merlin.Speak('Ahora sé pronunciar algunas cositas, pero muestro otro texto'+
 'en el globo. ¿que tal un \Map="uisky J B"="JB"\ ahora?',''); 
// ballon debe estar activado
// Diccionario personalizado \Map=" lo_que_ha_de_pronunciar"=" 
// lo_que_ha_de_poner_en_el_globo"\ 


 Merlin.Speak('\Chr="Monotone"\ no sé pero esto no va bien, algo me pasa','');
 // hablar de forma monotona
 Merlin.Speak('algunas veces, no sé por qué, pero me quedo groki, mira mi '+
' cara\Pau=2500\ ¿será porque fumo eucalipto?',''); 
// pausa 2500 milisegundos

 Merlin.Speak('\Rst\ \vol=45000\También he estado con Carlos Sainz un '+ 
' tiempecito de copiloto.\Pau=350\ \spd=200\Curva derecha en 3 a foondo,'+ 
' freena 2, curva izquierda rasaante, \Vol=65535\ cuidado aaagua\Rst\ '+
' \spd=100\ quillo carlos, que extressss',''); 
// cambiar la velocidad del habla \spd=nº de palabras por minuto\
// cambiar el volumen  \Vol=nº\   el número puede ir de 0 a 65.536
// \Rst\  resetea los tag anteriores que haya.

 Merlin.Hide(False);

A disfrutar con el agonía este jejejejeje.

Saludos
Responder Con Cita
  #12  
Antiguo 27-09-2004
Avatar de German
German German is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 133
Poder: 22
German Va por buen camino
Talking

Bailar... no se... pero hacerle cantar "cumpleaños feliz" ¡¡¡seguro!!!:

Merlin.Speak('\chr="monotone"\\spd=130\\pit=65\Cuuum\pit=65\plee\pit=83\aaaaaaa\pit=65\ñoooos...\spd =55\\pit=87\feeeee\pit=82\liiiiiiz.')



Salu2.
__________________
Tengo las manos llenas de dedos... Tengo los dedos llenos de teclas...
Tengo las teclas desordenadas... Tengo el desorden muy controlado...
Tengo el control en mis manos.
Responder Con Cita
  #13  
Antiguo 10-10-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Por petición de un compañero del foro, he creado un proyecto al completo donde reuno todo lo hablado hasta ahora (excepto las animaciones)

Lo único imprescindible, es tener el control ActiveX disponible en la paleta de delphi.

Saludos

Última edición por Lepe fecha: 10-10-2007 a las 20:58:14.
Responder Con Cita
  #14  
Antiguo 10-10-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Muchísimas gracias, Lepe, yo estaba muy interesado en el proyecto. Cuando necesites algo, ya sabes, aquí estoy.
__________________
:)
Responder Con Cita
  #15  
Antiguo 14-10-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Nuevas noticias
http://www.delphiforfun.org/Programs/TextToSpeech.htm

No perdais de vista esta web con fuentes en delphi para poder elegir el tipo de voz e idioma de nuestros Personajes, permite adulto espanol masculino y femenino y muchos otros en ingles.

Gracias a Neftali por dar este Link. En realidad lo dio para un hilo donde se hablaba de algoritmos de cortes (carpinteria). Pero ha sido muy grato encontrar tambien este tema.

Saludos de nuevo.
Responder Con Cita
  #16  
Antiguo 14-02-2009
comodoro comodoro is offline
Registrado
 
Registrado: feb 2009
Posts: 3
Poder: 0
comodoro Va por buen camino
Que el Agente hable en español y no con acento Ingles

saludos compñeros;

Soy nuevo en el foro, pero viejo programando en Delphi. recien he estado trabajando sobre este Tema de MSAgent para usarlo en nuestras aplicaciones. En fin busque y busque, y las busquedas resultaban infructuosas hasta que llegue a la documentación de Microsoft sobre MSAgent y alli encontre como, bueno tuve que leer y traducir y probar, hacer que nuestros personajes hablen en español y no con acento ingles.

Aqui les dejo el codigo, yo lo coloque en el FormCreate, deseo que les sirva de provecho como fue para mi.

Se parte del supuesto que tienen instalado todo lo necesario para trabajar con MSAgent
...
Agent1.Connected := True;
Agent1.Characters.Load('Lorito', 'Peedy.acs');

//ESTO COLOCA EL IDIOMA EN ESPAÑOL

//Para establecer el Idioma;
Agent1.Characters.Character('Lorito').Set_LanguageID($0C0A);

//Para establecer el ID del TTS en español, es la Voz de Julio
Agent1.Characters.Character('Lorito').TTSModeID := '{2CE326E1-A935-11d1-B17B-0020AFED142E}';
// Associar o agente à variável Agente
Agente := Agent1.Characters['Lorito'];
....


"El Hombre Inteligente no es aquel que lo sabe todo sino aquel que sabe aplicar lo poco que sabe"
Silver Stone

Última edición por comodoro fecha: 14-02-2009 a las 06:27:57.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:50:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi