• Excelente Jorge!...Todo esto que vas comentando creo complementa muy bien la documentación. 

    Una pregunta: tenás escrito algún instructivo sobre el sintetizador de voz para el caso de que alguien lo pueda armar siguendo estos pasos?. Un estilo: hagalo ud mismo?.

    Gracias y es muy interesante tu proyecto. En mi caso veo las pruebas y errores que vas haciendo/encontrando y con estas cosas siemore se aprende algo nuevo.

    Saludos
     

  • Excelente Jorge!...Todo esto que vas comentando creo complementa muy bien la documentación. 

    Una pregunta: tenás escrito algún instructivo sobre el sintetizador de voz para el caso de que alguien lo pueda armar siguendo estos pasos?. Un estilo: hagalo ud mismo?.

    Gracias y es muy interesante tu proyecto. En mi caso veo las pruebas y errores que vas haciendo/encontrando y con estas cosas siemore se aprende algo nuevo.

    Saludos

    dragonmarce

    Tenes el manual aca:  LINK
    Al final sale como se conecta.
    El que quiera armar uno va a necesitar que le envie un PIC grabado con el programa. Vos programas en alguna maquina, en BASIC o asm?

     

  • Ya termine el comando para regular el nivel de los acentos, va adjunta una prueba.
    Este es el texto enviado:

    SE PUE+DE AJUSTA+R LOS ASE+NTOS EN DIESISE+IS NIBE+LE-S,
    (X0)NIBE+L SE+R2O-,
    (X1)NIBE+L U+NO-,
    (X2)NIBE+L DO+S,
    (X3)NIBE+L T'RE+S,
    (X4)NIBE+L KUA+'T'RO-,
    (X5)NIBE+L SI+NKO-,
    (X6)NIBE+L SE+I-S,
    (X7)NIBE+L SIE+TE-,
    (X8)NIBE+L O+CHO-,
    (X9)NIBE+L NUE+BE-,
    (XA)NIBE+L DIE+S,
    (XB)NIBE+L O+NSE-,
    (XC)NIBE+L DO+SE-,
    (XD)NIBE+L T'RE+SE-,
    (XE)NIBE+L KATO+RSE-,
    (XF)NIBE+L KI+NSE-.
    (X0)EL NIBE+L SE+R2O SE PUE+DE USA+R PAR2A ASE+R BOS ROBO+TIKA-,
    (Z30N20C06)BOS ROBO+TIKA-,
    (Z36N20C06)BOS ROBO+TIKA-,
    (Z36N26C09)BOS ROBO+TIKA-,
    (Z28N1BC06VFX4)



    ]pruebahr5_2014-11-15_2a.zip[/file]
     

  • Excelente Jorge!...Todo esto que vas comentando creo complementa muy bien la documentación. 

    Una pregunta: tenás escrito algún instructivo sobre el sintetizador de voz para el caso de que alguien lo pueda armar siguendo estos pasos?. Un estilo: hagalo ud mismo?.

    Gracias y es muy interesante tu proyecto. En mi caso veo las pruebas y errores que vas haciendo/encontrando y con estas cosas siemore se aprende algo nuevo.

    Saludos

    dragonmarce

    Tenes el manual aca:  LINK
    Al final sale como se conecta.
    El que quiera armar uno va a necesitar que le envie un PIC grabado con el programa. Vos programas en alguna maquina, en BASIC o asm?

    pastbytes


    Hola Jorge. Tengo algún conocimiento de ambos. No obstante como no tengo nada de tiempo y hace varios años estoy luchando para terminar la bendita facultad (si todo va bien este debe ser el año) hace mucho pero mucho que no programa nada.
    Mas que nada la pregunta igualmente era por si a alguno le picaba querer hacerlo .


    Como siempre gracias por el detalle!
    Abz
     

  • *** Sintetizador HR4 V1.0 ***

    Varias novedades, resumiendolo para el que no quiera leer todo, hice las primeras modificaciones desde junio al sintetizador HR4, y ahora esta en la version 1.0, lo que cambio es que se corrigieron unos errores en el calculo de la frecuencia de las notas, se mejoro el sonido de los fonemas D y T, y se agrego un nuevo comando X a esa version, todo esto originado en mejoras que se hicieron al sintetizador HR5.
    La historia completa es un poco mas complicada, todo parte de un error en las envolventes de los instrumentos en el sintetizador HR5, que todavia no pude encontrar, pero esto me llevo a revisar exhaustivamente todo el manejo de frecuencias, los instrumentos y las envolventes. Revise las diferencias entre varias versiones que fui dejando en el camino, y encontre que el error se introdujo al pasar de sonidos de 8,6KHz a sonidos de 15,6KHz, lo cual no me dice mucho porque es un cambio drastico en el programa, y no hay manera de probar una version intermedia. Pero lo interesante fue que descubri varios errores que estaban desde hacia mucho tiempo, seguramente al menos desde las primeras versiones de la HR3, pero al ser tan sutiles pasaron desapercibidos.
    El primer error estaba en el escalado de ondas, tanto en la voz como en los instrumentos, para adaptar una onda a distintas frecuencias lo que se usa es un acumulador de fase, que es un registro, variable o como se lo quiera ver, donde uno va sumando un determinado valor en cada muestra emitida, cuando el acumulador se llena, se avanza una muestra, De esta manera lo que se logra es reproducir una onda mas lento de lo que deberia salir, si el valor que se suma al acumulador no hace que se rebalse, no se avanza una muestra de la onda, y por lo tanto se repite la misma muestra que la ultima vez. Se podria ver esto como si fuera un contador de fracciones de muestra, si uno quiere reproducir la onda a la mitad de frecuencia, habria que emitir cada muestra de la onda 2 veces, para esto sumariamos al acumulador la mitad del valor posible, como para que por cada 2 muestras se avance 1. Pero esto solo sirve para hacer mas lenta una onda, si se quiere elevar la frecuencia, lo que hay que hacer es saltearse muestras, para esto el acumulador debe tener dos partes, una para fracciones de muestra y otra para muestras enteras. En la practica es un mismo acumulador, pero cierta parte se considera como muestras enteras que es lo que se suma al indice que indica en que muestra estamos.
    El tema da para hablar bastante, pero con eso se tiene una idea de como funciona, el SID por ejemplo utiliza ese metodo. El sintetizador HR4 usaba 16 bits para determinar la frecuencia de las ondas, con esto se podia alcanzar todo el rango de las octavas que se usan musicalmente, y con una precision de frecuencia bastante buena. El sintetizador HR5 utilizaba tambien 16 bits, pero al emitir el sonido a una frecuencia mas alta, esos 16 bits reducian el rango de frecuencias posibles, cuando intente agregar una octava extra, justo la ultima nota excedio el rango, y entonces expandi el acumulador a 20 bits.
    En cada muestra emitida, cuando se suma el valor al acumulador, puede ser que haya que avanzar una cantidad de muestras en la onda (en HR5 se usan ondas de 119 muestras) que excedan el final de la onda, por ejemplo si estamos en la muestra 117 (la ultima es la 118) y en lugar de avanzar 1 muestra tenemos que avanzar 2, deberiamos terminar en la muestra 119, que no existe por ir de 0 a 118. por lo que pasariamos a la muestra 0. La rutina que hacia este calculo del excedente tenia un error que hacia que pasara a la muestra 1 como minimo, por lo que en la practica todos los sonidos se emitian con la primera muestra solo en el primer ciclo, despues siempre se evitaba, lo que hacia que sonaran con una frecuencia mas alta, aunque no era un error perceptible.
    El segundo error tenia que ver con los fonemas, hay fonemas a los que se le puede configurar la nota, como las vocales, o el caso de los instrumentos, esos no eran problema en el nuevo programa, porque aunque se emitiera sonido a 15KHz, aun se podian usar las viejas ondas a 8,6KHz, que de hecho es lo que empece haciendo, ya que bastaba con recalcular los valores para cargar en el acumulador en cada nota, para ondas de 66 muestras (8,6KHz) y sonido de 15KHz. Pero habia fonemas que no eran repetitivos, y al pasar a 15KHz se reproducian casi al doble de velocidad, estos requerian volver a renderizarse para 15KHz, y en algunos casos adaptar los algoritmos que los generan. Este era el caso de los fonemas R y T, que estaban generados combinando partes de ondas existentes para ahorrar memoria, y al tener que emitir ahora mas muestras que antes, requeria cambiar ademas de las ondas, los numeros de muestras en las rutinas. El asunto es que rehaciendo esos dos fonemas me encuentro con que la T funcionaba mal, despues de un largo algoritmo usado para combinar 4 ondas con ruido para imitar una T, resulta que la mezcla se hacia mal, y como consecuencia de eso lo unico que salia era el sonido del fonema S, que era el "ruido" usado en la mezcla. Ya que igual sonaba como T, se podria haber eliminado todo el algoritmo y ahorrar memoria, pero decidi arreglarlo. Asi es que busque en el archivo de ondas la T original, es decir el fonema T digitalizado que uso como referencia para sintetizarlo, renderice la onda a 15KHz para resintetizarla modificando el algoritmo, y me encontre con que la onda no era tan grande como para almacenarla entera en el programa, y que de hecho ocupaba mas o menos lo mismo que la rutina para sintetizarla, mas una onda especial que usa ese algoritmo. En resumen, era un algoritmo tan antiguo que de tantas modificaciones ya no servia, porque arreglado y todo era un mal sustituto para la onda original, y ocupaba demasiado, por lo que opte por eliminarlo completamente y almacenar la onda completa, lo que ademas de ahorrar memoria, ahorra proceso y aumenta la calidad del sonido.
    En cuanto al sintetizador HR4, viendo que la onda T ocupaba menos que su algoritmo, decidi probar las modificaciones tambien ahi, y resulto que mejoro en igual forma, ahorrando proceso y memoria. Tambien corregi los errores de calculo de frecuencia, que con todo lo complejo que suenan, se reducia a eliminar 2 instrucciones, es decir que ademas ahorran memoria. Con estas correcciones el HR4 quedo con memoria libre para 32 instrucciones.
    Ayer se me ocurrio probar si podia incluir el nuevo comando X para configurar la expresividad de la voz, es decir que tan acentuados son los acentos, dudaba de si eso podria entrar, porque gran parte del codigo se lo lleva agregar el comando al parser. El programa ya venia preparado para esa funcion, pero justamente no habia memoria en su momento para agregar el comando para darle un valor. Lo que hice fue hacer una copia del programa, que ya era beta 14 por las correcciones de frecuencia y sonidos D y T, abri el programa de la HR5 para saber los cambios exactos que tenia que hacer, y a medida que agregaba cosas llevaba una cuenta de instrucciones extra, para saber si llegaba a las 32 libres que tenia.
    Resulto que entre las lineas para definir las propiedades del fonema (porque para el programa todo son fonemas), los agregados al parser para aceptar los comandos X y x, el chequeo y conversion del parametro, y la implementacion, que no es mas que copiar el parametro a un registro, se necesitaban 42 instrucciones, 10 menos de las disponibles.
    Entonces recorde que el mensaje de arranque por RS232 envia un texto que en la version declara VERSION 1.0 BETA 14, y que si avanzo a la version 1.0 final podria ahorrar 8 instrucciones (" BETA 14"), lo que volvia posible llegar a ahorrar lo necesario. Despues de reacomodar algunas rutinas en distintas paginas, y de usar 2 instrucciones libres entre las posiciones 0x000 y 0x004, donde la 0x000 solo estaba ocupada por un goto start, y en 0x004 estaba la rutina de interrupcion, pude llegar a ahorrar lo suficiente para que las modificaciones entraran. Y no solo entraron, sino que quedo lugar para 2 instrucciones, una en 7FE y otra en 003, aunque dudo que eso se pueda aprovechar para algo. biglaugh.png
    Incluso me pude dar el lujo de reservar con un NOP una instruccion para un digito extra en caso de que en el futuro necesite pasar de la version 1.9.
    En definitiva, el sintetizador HR4 tiene ahora las mismas capacidades que el HR5, solo se diferencian en la calidad de sonido.
    Y volviendo al HR5, logre sintetizar un elemento de bateria, usando ondas existentes, por lo que se podria implementar perfectamente en el HR4, pero obviamente no va a ser posible agregar el comando para ejecutar el instrumento, al menos por ahora. En el HR5 lo voy a agregar cuando termine de darle forma, mi idea es tener dos elementos basicos de bateria, el primero es incluso ajustable a una nota. El segundo va a requerir mas trabajo, cuando salga ese voy a agregar los dos.

     

  • Jo... pedazo de comenteario biglaugh
     

  • Ya que envie la placa HR4 para Commodore que usaba para pruebas, me arme una nueva de reemplazo pero esta vez tambien con soporte para la version HR5. Puse todos los componentes comunes en una placa principal, y los PICs y el filtro de audio en placas separadas, conectables a la placa principal.
    Aca se ve la placa principal con la placa HR5 conectada y la HR4 suelta en el medio:

    1420194499 75 FT59536 101 0381s


    Vista de la placa principal, que contiene la salida de audio estereo, los 3 leds, el cristal, los jumpers de configuracion y el 7404 para invertir la señal CTS:

    1420194569 75 FT59536 101 0384s


    Placa HR4:

    1420194904 75 FT59536 101 0385s


    Lado de componentes, con el PIC16F648A colocado:

    1420195072 75 FT59536 101 0387s


    Placas HR5 (16F886) y HR4 (16F648A) :

    1420195219 75 FT59536 101 0388s


    Placa principal sin modulo conectado:

    1420195431 75 FT59536 101 0389s


    Lado de soldaduras de la placa principal, y en el fondo las placas HR4 y HR5:

    1420195622 75 FT59536 101 0393s


    Ahora ya puedo probar soft con las dos versiones actuales, y una futura tercera version con un PIC18 a 40MHz.
     

  • Que arte con el soldador!
     

  • Hice un video de prueba de la placa, se puede ver aca: LINK
     

  • Esto se podria llamar pila de sintetizadores:

    1420325188 75 FT59536 101 0394s


    Junte de nuevo todas las placas de sintetizador de voz que tengo armadas, hay un par que ya no tengo mas y otras que se agregaron:

    1420325295 75 FT59536 101 0396s


    Aca se ve el detalle de cada una:

    1420325363 75 FT59536 Picsynth Versiones2


     

Moderador (s): homecomputer, Selandari, ArielP, pastbytes, Durandal