Autor Tema: Sintetizador de voz en español por RS232  (Leído 36021 veces)

pastbytes

  • PIC12F
  • **
  • Mensajes: 170
Re: Sintetizador de voz en español por RS232
« Respuesta #150 en: Septiembre 16, 2016, 01:12:08 am »
No hay problema, cuando me digas te lo envio, acabo de ver que los mensajes privados no permiten adjuntar asi que va a tener que ser por email, o lo voy a tener que poner temporalmente en algun lado.
Por lo de repetirnos en los comentarios, el tema se hizo largo asi que no es raro que digamos varias veces lo mismo, pasa el tiempo y ya no sabemos que se dijo. Yo por ejemplo pense que habia puesto el link con el manual pero parece que no, no me puse a mirar todo el hilo pero en una busqueda no me salio nada.
Lo del "hasta la vista, baby" debe haber sido bastante viejo, me parece que era del sintetizador HR2, que no tenia ajuste para cambiar el tono de la voz. Resulta que como se entendia mas con voz mas grave, la voz que le quedo me recordaba a terminator, por eso le hice decir esa frase.
Por curiosidad, con que lo vas a controlar?

HJ

  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5703
Re: Sintetizador de voz en español por RS232
« Respuesta #151 en: Septiembre 16, 2016, 01:21:50 am »
Llegado el momento te paso mi mail por privado.
O te lo paso ahora y listo.

La frase esa me la pasó en mp3 Ariel hace varios años, solo me dijo que lo hacías con un PIC de los chicos. Un 628 si mal no recuerdo.... Mucho antes de que lo publicaras acá.  

Inicialmente voy a probarlo con la Pc y después con algún micro....
« Última modificación: Septiembre 16, 2016, 01:23:58 am por HJ »
"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]

pastbytes

  • PIC12F
  • **
  • Mensajes: 170
Re: Sintetizador de voz en español por RS232
« Respuesta #152 en: Septiembre 24, 2016, 03:32:40 am »
Pocos dias y muchos avances, estuve haciendo unas pruebas controlando los sintetizadores desde una Commodore 64, no tiene mucho que ver con los PICs pero sirven para dar una idea del uso del sintetizador, es decir de como se podria usar en una aplicacion real y que tan poco tiempo consume.
Hice dos pruebas, en las PC se pueden probar cosas pero ultimamente me encuentro con que muchas cosas a bajo nivel se prueban mas facilmente en una computadora de 8 bits como la Commodore 64, por lo que despues de probar enviando y recibiendo numeros en la PC, quise verlo andando en el mundo real.
La primera prueba tiene que ver con que cantidad de texto se necesita para controlar el chip, antes solia pensar que como no se necesita mucho texto por segundo para controlar al sintetizador, porque no se habla tan rapido normalmente, entonces bastaba con usar velocidades bajas, como 1200 bps, que permite enviar 120 caracteres por segundo. Pero al ir probando mas cosas en maquinas de 8 bits me di cuenta de que conviene tener mayor velocidad, lo cual en principio parecia innecesario ya que por ejemplo como no necesito enviar tantos caracteres por segundo, no tenia sentido algo como 57600 bps. Sin embargo, en una Commodore se podria tener una rutina como tarea de fondo, con interrupciones, por ejemplo una interrupcion por cada cuadro de imagen, y en cada una enviar un caracter desde un buffer en memoria, pero a la maxima velocidad posible, para minimizar el tiempo empleado. Asi que decidi probar esto con las rutinas que escribi en asm de 6502 para enviar y recibir bytes a 57600 bps por el puerto del usuario (que es un puerto paralelo).
La primera prueba fue exitosa, le cargue un texto a un buffer de 256 caracteres e hice que la rutina enviara un caracter por cuadro (60 por segundo porque es una maquina NTSC), a 57600 bps cada byte enviado toma un poco mas de 170 microsegundos, pero es algo que se hace cada 16,6 milisegundos asi que en comparacion es muy poco.
Aca se ve un video de la prueba, se repite el texto continuamente, y como funciona como tarea de fondo, me deja el BASIC libre y puedo hasta leer el directorio del disco.


Por otro lado, cuando termine el sintetizador HR4, me quedo afuera por falta de memoria de programa algo que queria agregar, la lectura de dos potenciometros, Esto inicialmente lo habia pensado para que en el futuro se pudieran controlar parametros del sintetizador de forma directa, se me ocurrio cuando hice un programa de piano para tocar en vivo con el chip controlado desde una computadora de 8 bits. Ya que en el futuro iba a agregar mas funciones al sintetizador musical, tener un par de controles para ir modificando por ejemplo el nivel de un efecto o afectar la nota de la voz o la musica podria ser util. Pero para que estas entradas tuvieran mas utilidad, se me ocurrio darle compatibilidad con un joystick analogico de PC, de manera que se puedan conectar potenciometros o usar la entrada como puerto de joystick, aprovechando que hay muchos en existencia.
Ya que tenia conversores A/D en el sintetizador HD1, y memoria de programa libre, decidi probar ahi lo que no pude agregar en el HR4. Despues de pelear un poco por errores causados por la poca velocidad de captura de los conversores A/D, o mas bien por el retardo que exige el cambiar de una entrada a otra, pude hacerlo andar, y como la gracia de esto es que sea usable, decidi tambien integrarlo a la prueba anterior para probarlo en condiciones extremas.
En este video se ve esta segunda prueba, aca se envia un texto distinto pero en las mismas condiciones que la anterior, es un texto que se envia continuamente a 57600 bps, pero ademas de enviar ese byte en cada cuadro, tambien se envia el comando para consultar el joystick, e inmediatamente se recibe otro byte como respuesta. Para minimizar el trafico, la captura del conversor A/D se reduce a 7 bits, y se envia un byte conteniendo eso y 1 bit con el valor del boton del joystick. Ya que tenemos dos ejes y dos botones, se requieren dos comandos y dos respuestas para saber el estado completo del joystick.
En esta prueba, por cada cuadro se envia el texto de la voz, y se consulta uno de los ejes, en el cuadro siguiente se consulta el otro eje, y asi se repite el ciclo. Esto nos da un refresco de coordenadas del joystick de 30 veces por segundo.


Como se puede ver, tambien deja libre tiempo para el BASIC, aunque consume mas proceso que la otra rutina, 2 o 3 veces mas, segun si el buffer del PIC esta lleno, ya que el texto de la voz consulta la linea CTS para saber si puede o no enviar un caracter al sintetizador. Las rutinas cambian el color del borde cuando se ejecutan, mirando la parte amarilla del borde se puede tener una idea de cuanto consume de proceso cada una, la primera prueba consume un poco menos de 3 lineas de video. En la segunda prueba se reciben las coordenadas y se colocan directamente en las coordenadas del sprite (el cuadrado que se ve a la izquierda).

En la version 1.1 del sintetizador HR4 habia dejado reservadas las entradas AN0 y AN1 para en el futuro agregar la conexion de joystick, pero no habia tenido en cuenta que no tengo conversor A/D ahi, por lo que estuve viendo como hacer lo mismo con comparadores, y en teoria se podria hacer variando la tension de referencia. Se tendria una resolucion de solo 4 bits, pero deberia servir para la mayoria de las aplicaciones, y el comando seria compatible con el del HD1, simplemente tendria pasos mas grandes. Ya que no habia contado con que tenia que reservar dos pines para los botones, decidi hacer un cambio drastico a la asignacion de pines, por lo que cancele la version 1.1 temporalmente y estoy en la 1.2, que implementa la lectura de joystick. De milagro logre obtener espacio para 45 instrucciones, pero despues de implementar todo me encontre con que todavia falta memoria para 23 instrucciones. Voy a ver como lo puedo resolver, y despues decido si sale una v1.1 con la nueva disposicion de pines y sin lectura de joystick, o si sale directamente la 1.2 con esa funcion. Si sale la 1.1, igual ya tendra el nuevo esquema y despues solo habria que actualizar el firmware para soportar el joystick.