• Estuve haciendo pruebas y habia todavia algunos errores por corregir, tambien empece a acomodar un poco el programa para tener espacio para las modificaciones.
    Los PICs de la serie 16, que son los que estoy programando en este proyecto, tienen la memoria paginada, no se puede saltar libremente entre paginas sin ajustar algunos bits, ya que solo direcciona 2K a la vez (el PIC que usaba en la HR4 tiene 4K, el de la HR5 tiene 8K), y por una cuestion de optimizacion de la poca memoria que tenia, y de reducir el tiempo de ejecucion, hago un uso se podria decir excesivo de tablas de saltos. Estas tablas serian algo asi como los GOTO calculados de algunos BASIC, como el de Sinclair, que permite hacer por ejemplo GOTO A*100, que ahorra tiempo porque se carga en la variable A el numero de opcion y segun eso se salta a las lineas 100, 200, 300, etc., ahorrandose muchas comparaciones.
    Estas tablas tienen la desventaja de que tienen que quedar en lugares exactos de la memoria, haciendo dificil agregar instrucciones al programa porque al insertar mas codigo las tablas que le siguen pueden terminar en otra direccion de memoria y dejar de funcionar. Para no complicar tanto la explicacion, el programa anterior era un caos, con rutinas partidas y desparramadas por la memoria, y mezcladas en la memoria con tablas de saltos para tratar de aprovechar al maximo el espacio.
    En esta version, antes de empezar a agregar nuevas funciones, estoy volviendo a acomodar todo de forma mas clara, aprovechando que hay mucha memoria libre. Como tenia las paginas 2 y 3 sin usar, decidi hacer una modificacion temporal, mover todas las tablas de saltos una nueva pagina de 2K no usada, liberando la pagina 1 de eso para que solo queden rutinas normales, que no importa donde se ubiquen. Con esta modificacion libere memoria para hacer modificaciones, y conserve la funcionalidad que ya tenia. La idea es ir reemplazando las tablas de ondas por nuevas que no usen tablas de saltos, y que ademas tengan casi el doble de muestras, es decir que durante la transicion voy a tener tanto el audio en version 8KHz como en version 15KHz, hasta que tenga completo todo el sonido en 15KHz y pueda borrar las antiguas tablas.
    Ahora voy a ir renderizando todos los sonidos en 15KHz para ir activandolos de a poco, despues de todo eso deberia tener el mismo sintetizador, sin funciones nuevas, pero con mejor calidad.
     

  • Bueno, ya casi esta todo el sintetizador con sonido nativo de 15KHz, todavia quedan los fonemas P, R y T en 8KHz, ya estan convertidos los instrumentos musicales y el resto de los fonemas con mas muestras, tambien ahora el sonido sale por los dos canales, aunque por ahora es el mismo sonido en ambos. A medida que fui convirtiendo las ondas a 15KHz fui eliminando las de 8KHz, pero en un momento no cabia todo a la vez. La verdad que suena mucho mejor, se le va la distorsion que tenia el sonido, cuando tenga todos los sonidos convertidos sera cuestion de hacer ajustes para darles el volumen adecuado a cada uno. Los sonidos estan renderizados desde sus versiones de 44KHz, no desde las ondas antiguas de 8KHz.
    La voz robotica en particular suena bastante mejor, todo lo que es agudo se nota mas porque ya no necesita perder tantas muestras para alcanzar frecuencias mas altas, tambien los instrumentos musicales mejoraron bastante.
    Ya habra mas novedades, ahora tengo que volver al trabajo que sino se atrasa todo, pero al menos avance bastante en esto.
     

  • A ver cuando haces un video tongue
     

  • *** Sintetizador HR5 completamente funcional ***

    Hoy pude terminar la adaptacion de la HR4 a la nueva version HR5, habia algunos problemas con las envolventes de los instrumentos, y faltaba adaptar el comando para cargar la definicion de un instrumento del usuario, todas estas cosas tenian que modificarse porque antes se usaban 66 muestras para los instrumentos y envolventes, y ahora se usan 119. Esta version es totalmente compatible con la anterior, se pueden usar los mismos comandos y parametros, es totalmente transparente pero suena con mejor calidad, la unica incompatibilidad es la carga del instrumento del usuario que ahora requiere enviar mas bytes que antes.
    Ademas de entenderse mejor la voz, se puede implementar voz femenina, que requiere una octava mas, y tambien pude hacer que el sintetizador cante el himno nacional en la octava que corresponde, que tambien es una mas que la octava nativa del programa, que esta calculado para la nota C3. Al cantar en una octava mas se pierde calidad de sonido, pero como tenemos casi el doble de muestras, en definitiva puede sonar con la misma calidad que la version anterior pero en una octava extra. Igual sigue estando al limite para esas cosas, pero tiene mas margen para hacerlas que la version HR4.
    Ahora lo que voy a agregar son mejoras menores, lo mas obvio es permitir seleccionar una octava mas, pero tambien quiero mejorar un poco la voz, que antes no podia por las limitaciones de memoria.  Despues de eso van a venir modificaciones mas drasticas, para la cantidad de funciones que ya tiene el programa, la forma en que esta hecho no es la mejor, y cuando agregue uno o dos canales extra de sonido voy a necesitar optimizar los tiempos de ejecucion al maximo.
     

  • Bueniiiisimo!, quiero escuchar el himno cantado por una robota!
     

  • Groso! , va quedando muy bueno , a la espera de escuchar alguna prueba con la version nueva
     

  • Lo curioso es que se me ocurrio averiguar cuanto cuesta este nuevo PIC, que tiene 28 pines contra 18 del otro, el doble de memoria de programa, 8K contra 4K, y dos salidas de sonido, y resulta que vale 1 dolar menos que el otro. Al final no se si no conviene discontinuar la otra version y hacer una con el 16F886.
     

  • Decidi congelar esta version como esta, porque creo que voy a hacer dos programas distintos a partir del actual, uno va a adaptarse a un PIC18 y probablemente esta version la amplie un poco mas con el mismo PIC. Pero antes de dejarla quise agregarle una octava mas, y me encontre con que solo pude agregarle 11 notas, no pude agregar la nota C7 porque ahi excede el rango del algoritmo de escalado de frecuencias. Se puede hacer un parche para compensar esto, pero dado que esto de emitir audio a 15KHz es solo el principio, porque van a seguir versiones con mas calidad, me parece que es mejor ampliar el rango de frecuencias agregando 4 bits extra (ahora se define una frecuencia con un numero de 16 bits), como para que ya use el mismo algoritmo en futuras versiones.
    Con el tema de las pruebas, esta complicado porque aca no se puede adjuntar archivos de mas de 512K, con la version anterior ya tenia que generar mp3s de menos de 128Kbps para que entraran, con esta version el minimo es 128Kbps para que no pierda calidad, y terminan ocupando 1 o 2MB. No quiero subir un mp3 a otro sitio porque despues se va a borrar y va a quedar en link muerto en el mensaje. Tampoco tengo ya placa para C64 porque envie para España la que tenia, me tengo que armar una con la nueva version, solo tengo la placa RS232 pero para mostrar una prueba deberia hacer un video y armar un texto. No tengo mucho tiempo ultimamente asi que habra que esperar a que se alineen los planetas y pueda probar algo y capturarlo.
     

  • Estuve haciendo pruebas con la voz, planeando nuevos comandos y funciones para agregar, y mientras tanto probando que todo estuviera bien, pero me encontre con que las envolventes del sintetizador musical no funcionan del todo bien, por alguna razon alteran ligeramente la nota del instrumento que este sonando, haciendo que desafine un poco. Le di vueltas al programa y no le encontre todavia la falla, pero es de esperarse, ya que esas rutinas son bastante complejas y el codigo no es muy limpio, seguramente sufrieron al cambiar de frecuencia de muestreo. De todas maneras en la version HR4 se reutiliza mucho codigo de la parte de voz para el sintetizador musical, porque fue necesario en su momento para ahorrar memoria, pero por este ahorro tiene limitaciones en la precision de la duracion de las envolventes en el rango de larga duracion. Lo ideal seria agregar un prescaler de 8 bits especificamente para aumentar el rango de duracion, cosa que antes no podia hacer, y voy a hacer en esta version, por lo que tal vez ni vale la pena corregir el error actual, ya que debe reimplementarse con codigo separado y hecho como corresponde.
    Por este error, que afecta solo en la parte musica y solo con envolventes de larga duracion, es que no puedo probar la demo musical que hice para la version anterior, pero la voz anda muy bien, y tambien la musica y ruido sin envolventes.
    Dejo una prueba que hice, que ademas tiene mas enfasis puesto en los acentos, eso es un comando que estoy agregando, que permite configurar que tanto cambia el tono con los acentos, si se pone 0, la voz saldria robotica aunque el texto que le enviemos tenga acentos, y cuanto mayor sea el numero mas diferencia de tono hay en la acentuacion. El valor que usa la version HR4 es 3 (suma o resta 3 semitonos a la nota de la voz, segun el acento), el valor usado para la prueba es 6, que hace que la voz sea un poco mas expresiva, aunque un poco exagerada.
    El audio es corto, pero para no exceder el tamaño de los adjuntos lo dividi en dos partes.

    ]pruebahr5_2014-11-15_1.zip[/file]
    ]pruebahr5_2014-11-15_1a.zip[/file]
     

  • El texto completo enviado es este:

    (Z28N1BC06VF)
    E+STA ES UNA DEMOST'RASIO+N DEL SINTETISADO+R DE BO+S I SONI+DO, A+CHE E+RE SI+NKO-.
    A DIFER2E+NSIA DE LA BERSIO+N A+CHE E+RE KUA+'T'RO,KE EMITI+A EL SONI+DO KON UNA FREKUE+NSIA DE MUEST'RE+O FI+JA DE OCHOMI+L SEIS'SIE+NTOS OCHE+NTA MUE+ST'RAS
    POR SEGU+NDO,E+STA BERSIO+N AUME+NTA LA KALIDA+D A KINSEMI+L SEIS'SIE+NTOS BEINTISI+NKO MUE+ST'RAS POR SEGU+NDO-, AUMENTA+NDO TAMBIE+N LA KALIDA+D DE LOS
    SONI+DOS DE SESENTAISE+IS A SIENTODIESINUE+BE MUE+ST'RA-S.TAMBIE+N SE AUMENTO+ EL RA+NGO DE LAS NO+TAS EN UNA OKTA+BA-,SHEGA+NDO AO+R2A ASTA LA NO+TA DO+,
    DE LA OKTA+BA SIE+TE-.
    SE AG'REGO+ UN NUE+BO KOMA+NDO PAR2A KONFIGUR2A+R LA EKSPRESIBIDA+D DE LA BO+S,KE SI+RBE PAR2A BAR2IA+R LA FUE+RSA DE LOS ASE+NTO-S.
     

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