Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problema con el TTextToSpeech
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problema con el TTextToSpeech Responder citando

Hola, tanto tiempo!! (Hacía mucho que no andaba por aquí)
Vengo con una intriga que tengo sobre este ActiveX de Microsoft: los acentos.

En la prueba del panel de control, este engine puede reproducir acentos sin ningún problema. Pero en mi programa en Builder 5, no!
Estuve analizando, y el motor del speech se cuelga con los acentos. Sólo puedo ponerle un acento al final del texto. Pero si agrego tan solo una letra después del acento, el proceso "vcmd.exe" se cuelga con el 99% de uso del CPU. Sad
A alguien le sucedió?
El código puede ser tan simple como esto:

Código:

   WideString Pepe = "Prueba";
   TTS->Speak(Pepe);


El secreto creo que viene por el lado del wchar_t * que requiere el método Speak.
"Debugeando" este código podemos ver algo:

Código:

   WideString Pepe = "Prueba";
   wchar_t *text = Pepe;
   TTS->Speak(text);


Pongo un breakpoint en el Speak, hago ctrl-click en "text", y veo lo siguiente:

'P' 80 (0x0050)
'r' 114 (0x0072)
'u' 117 (0x0075)
'e' 101 (0x0065)
'b' 98 (0x0062)
'a' 97 (0x0061)
'\0' 0 (0x0000)

Aquí todo bien. Ahora, si en vez de "Prueba" pongo "Está", vemos lo siguiente:

'E' 69 (0x0045)
's' 115 (0x0073)
't' 116 (0x0074)
L'á' 225 (0x00E1)
'\0' 0 (0x0000)

Vemos que la 'á' no vale 160, sino 225! Estimo que esto es por ser usar widechar en vez de char común. Y además, tiene la L adelante (de Long, no?).
En este caso, el speech lo pronuncia bien (con acento), pero si en vez de "Está" pongo "Estás", ahí ya sucede lo explicado más arriba. Los caracteres posteriores al acento aparecen bien al debugear el contenido del wchar_t, no tienen nada raro. Y todos ocupan 2 bytes (usando el sizeof).
Todo esto aplica no sólo a acentos, sino a cualquier caracter que supere el valor de 127, como 'ñ', '¿' o '¡'.
Algo le pasa al speech tras pasar por un caracter de este tipo. Se ve que siendo al final del texto no molesta, pero sí lo afecta al intentar seguir leyendo el resto.
Reitero que en el panel de control puede leer con toda la cantidad de acentos que sea, sin ningún problema.

Probé con todo tipo de asignaciones y conversiones, usando c_bstr(), , pero nada... siempre el mismo resultado. Incluso con el código puesto en este tópico me sucede lo mismo.

Código:
  int LengthString = Memo1->Text.Length()+1;
  wchar_t* Mywchar_t = new wchar_t[LengthString];
  StringToWideChar(Memo1->Text,Mywchar_t,LengthString);
  DirectSS1->Speak(Mywchar_t);


Cualquier ayuda, será bienvenida!!!!
(Y perdonen si fui demasiado extenso para explicar mi problema...)

Andrés
_________________
"Todo es posible si Ud. no sabe de qué está hablando"
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Saludos....

Yo estoy utilizando el mismo ActiveX para un proyecto que tengo y me ha funcoinado perfectamente... ultimamente me ha dado unos errores pero es porque quiero hacer un componente que herede de este.... y es en lo que estoy trabajando.... pero el componente original no me ha dado problemas.... auynque la conversion de AnsiString a WideChar la estoy haciendo de distinta forma... noi se si sea por eso... te pongo aqui como lo estoy haciendo yo... espero te sirva de algo:
Código:

AnsiString strMensaje = "hola";
wchar_t mensaje[400];

strMensaje.WideChar(mensaje,strMensaje.WideCharBufSize());
DirectSS1->Speak(mensaje);


como te daras cuenta, uso un vector estatico de wchar_t en vez de crearlo dinamicamente, al principio quise hacerlo asi tambien, pero me daba cuenta de que al terminar de hablar, me generaba una excepcion, ya qu eobviamente tenia que destruir la memoria reservada para la variable...

Espero te haya servido de algo.... y ahora explico mi problema....

hice un componente que descienda de este.... y habla bien... pero cuando la palabra sobre pasa por ahi de los 10 caracteres, me marca un exception.... cosa que le componente original no hace..... si alguien me puede echar la mano, se los agradezco...
_________________
Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Gracias! Pero es igual... Sad
A ti te funciona con acentos, como expliqué yo?

Como dije antes, hice muchos intentos con tipos, algunos similares al tuyo, como el siguiente:

Código:

   AnsiString Cadena = Edit1->Text;
   wchar_t *text;
   int longitud = Cadena.Length() + 1;
   if (longitud == 1)
      return;
   text = new wchar_t[longitud];
   cadena.WideChar(text, longitud);
   TTS->Speak(text);


Pero da siempre el mismo resultado.

No te conviene usar un WideString, y así ahorrarte la conversión? (como en mi primer código)
También, si quieres poner un texto fijo, puedes hacer así de simple:

Código:

   TTS->Speak(L"Hola");


Smile Wink
_________________
"Todo es posible si Ud. no sabe de qué está hablando"
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Estaría por demás agradecido si alguién pudiera indicarme de que WebSite descargar dicho ActiveX, "free" claro está.
Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Creo que viene con Windows. Si no, lo bajas de aquí:
http://www.microsoft.com/msagent/downloads/user.asp

Para agregarlo, vas al menú Component / Import ActiveX Control, y ahí eliges "Microsoft Voice Text" (abajo verás en Class names que dice TTextToSpeech). Luego simplemente deberás crear una unidad en donde lo agrega, y finalmente en los componentes, en la solapa ActiveX, verás la boca del TTS. Smile
_________________
"Todo es posible si Ud. no sabe de qué está hablando"
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

he estado haciendo pruebas y ami tb se me cuelga con los acentos tanto que he tenido que reiniciar, es mas e instalado tambien creo que se llama en Tdict o algo asi que es para dictarle y al ponerle en el form el bcb consume tanto que hay que cerrarlo
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Yo logré no tener que reiniciarlo. La primera vez, con mucho esfuerzo, pude abrir el administrador de tareas (task manager) y finalizar el vcmd.exe. Luego, lo que hacía era tenerlo ejecutado antes de compilar el proyecto, y así podía finalizar el proceso fácilmente. Smile

Dónde estás, Leo? Te necesito! Embarassed Qué puede estar molestando al speech?
_________________
"Todo es posible si Ud. no sabe de qué está hablando"
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

xDD iziste lo mismo que yo , pero yo ni teniendolo abierto .... me subia la memoria del bcb.exe pero no habia ningun otro y au cerranco el bcb segida petadisimo
_________________
Los problemas mas dificiles tienen las soluciones mas sencillas
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Saludos a todos....

He estado leyebdo los mensajes, y se me hace muy extraño la cantidad de problemas que dicen que estan teniendo, ya que yo estoy trabajando en estos momentos con ese componente y nop he tenido problemas como el que uds mencionan.... solo uno de hecho, pero era muy diferente y lo habia publicado en otro post....

Lo que si me fije es que cuando queria instalar el ActiveX... habian dos componentes TextToSpeech... uno que llevaba por nombre de clase TTextoToSpeech y otro TDirectSS... no se cal esten usando uds. pero yo uso el TDirectSS y creanme que no me ha dado nada de problemas en ese sentido...

Ese componente lo baje de la siguiente liga
http://paquete-ms-text-to-speech.uptodown.com/

tal vez por ahi este el problema.... espero les ayude... hasta pronto....
_________________
Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Ojalá que sirva!!! Muchísimas gracias! Smile Te mantendré informado...

Por cierto, en el panel de control de SAPI4 (está en Panel de Control / Voz o Speech), qué motor (engine) tienes y/o usas?
_________________
"Todo es posible si Ud. no sabe de qué está hablando"
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

L&H TTS3000
- Spanish (Traditional Sort)
_________________
Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Lo logré!!!!!!!! Gracias por vuestra ayuda, especialmente a LordNemesis. Smile

Me bajé esos archivos, pero son los mismos que me bajé yo, los que están en el link de Microsoft que puse más arriba (salvo el Agent y el Genie, que no los instalé). Lo que sí busqué es el otro ActiveX, y con éste anda bien! La verdad no comprendo por qué están ambos o cuál es la diferencia, pero éste funciona 10 puntos con acentos y eñes.
La única diferencia en el proyecto, para que ande, fue al importar el ActiveX, elegir "Microsoft Direct Text-to-Speech" (con el componente TDirectSS) en lugar de "Microsoft Voice Text" (componente TTextToSpeech).

Gracias nuevamente, y espero le sirva a otro con el mismo inconveniente! Smile


Ah! Ya que estamos... Cómo le cambio la voz a la masculina? No pude hacer que me funcione la función Gender. Sad
_________________
"Todo es posible si Ud. no sabe de qué está hablando"
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

DE nada, es un placer....

Fijate que yo tambien me he preguntado como podria cambiar el genero... pero la verdad es que no me he preocupado mucho por eso, ya que el femenino es el que necesito... pero igual si investigo, luego te paso el dato, si tu investigas antes. ahi nos avisas... saludos...
_________________
Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Vuelvo a molestar con este tema!

Les consulto... Les ha funcionado bien el TTS de Microsoft en Windows 2000?? Porque a mí no! Más allá del Builder, tras simplemente instalarlo, en el control panel del speech, pongo cualquier texto, y no lo dice! Y ha pasado en varias computadoras con Windows 2000!
En la que uso en el trabajo, con Windows XP, funciona sin problemas, como así también en una PC vieja con Windows 98 en mi casa. ¿A qué se puede deber? Sólo en una PC hasta ahora, con Windows 2000, me sucedió que en el panel de control no anduvo pero sí anduvo mi aplicación en Builder. Surprised

Otra cuestión: Ahora que me pasé a DirectSS por los acentos, descubrí que no me funciona la aplicación en Windows 98! Y sí funcionaba sin problemas al usar el TTextToSpeech...

¿Alguien tiene alguna pista para ayudarme con mis problemillas? Gracias de antemano!! Smile
_________________
"Todo es posible si Ud. no sabe de qué está hablando"
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

LordNemesis
Cita:
AnsiString strMensaje = "hola";
wchar_t mensaje[400];

strMensaje.WideChar(mensaje,strMensaje.WideCharBufSize());
DirectSS1->Speak(mensaje);

¿Por qué el número 400?
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.