Se me hizo largo el texto porque trate de explicar algo que en realidad deberia haber hecho con graficos, con unas figuras ilustrando se entendia sin hablar tanto, pero bueno, demasiado trabajo hacer eso. Justo publique un video probando de nuevo la aventura conversacional con esta nueva version, esta aca: LINK
Hice un nuevo texto de prueba, reciclando varios textos de sintetizadores anteriores. En el video lo envio desde un programa terminal a 19200 bps, y se monitorea la salida de audio del PIC usando GoldWave. Me parece que aca si da una buena idea de la calidad del sintetizador.
Se supone que deberia estar completando las rutinas de buffer e interrupcion para poder usar los sintetizadores HR4 y HD1 desde el BASIC o desde juegos en asm para Commodore 64, pero se me ocurrio ponerme a probar el sintetizador HR4 despues de mucho tiempo, y la verdad no estaba muy conforme con la calidad del audio. Asi que se me ocurrio hacer lo que habia planteado una vez, hacer un sintetizador HR6 partiendo del HR4 pero con los nuevos sonidos y algoritmos del HD1, aunque en una calidad menor. La idea era conservar la misma placa y el PIC 16F648A, pero mejorar el sonido final, dentro de las mismas especificaciones, emitiendo el sonido a 8680 Hz. El resultado es que en un dia ya tuve andando el sintetizador HR6, y sorprendentemente suena muy parecido al HD1, suena mas bien como un HD1 con un parlante de mala calidad, pero las voces son similares, y se entiende mucho mas que el HR4. Lo primero que hice fue reemplazar las ondas de los nuevos fonemas del HD1, cosa que no ocupa memoria extra, pero para agregar las nuevas rutinas de voz solo quedaba 1 instruccion libre en la memoria de programa. Asi que buscando que optimizar, vi que habia una tabla de una onda triangular que usaban los HR4 y HR5 como envolvente, que ya no se usa en el HD1 pero que al estar disponible como instrumento musical no se podia eliminar. Entonces decidi implementarla por soft, como dos funciones lineales con valores calculados a partir del numero de muestra, y logre reducirla de 67 a 16 instrucciones, lo que dejo memoria suficiente para implementar los cambios y ademas reportar la version ALFA 1 (no habia memoria ni para los 7 caracteres necesarios para enviar eso). Lo que queda libre ahora es memoria para 9 instrucciones, pero falta hacer algunos ajustes de volumen a los fonemas, para que se parezca mas al HD1. Ya veremos que sale de esto, parece que el 16F648A todavia tiene mucho mas para dar.
Bueno, modificaciones terminadas, ya le hice otras mejoras importadas desde el sintetizador HD1, le cambie el algoritmo interno de volumen de los fonemas, dejando el viejo codigo de 3 bits de volumen logaritmico, por el de 4 bits de volumen lineal que usa el HD1. De esta manera se pudo ajustar el volumen de algunos fonemas de manera mas precisa. Tambien rehice dos de los instrumentos musicales, el bajo y la guitarra electrica, a partir de las nuevas versiones usadas en el HD1. Hubo un par de optimizaciones mas a registros y lineas de codigo que se podian eliminar, y ahora sobra memoria para 19 instrucciones, algo que siempre viene bien para corregir errores que vayan apareciendo. Hice un video probando un texto del HR4, que es el unico que prueba bien el generador de ruido y musica. Al final del video agregue una frase de la pelicula Juegos de guerra.
Como comparacion, este es el video de la primera prueba de ese texto, en el sintetizador HR4 controlado por una Spectrum 48K:
Este ultimo video tiene el audio capturado directamente desde la placa, mientras que el primero lo captura desde el ambiente con el microfono de la camara, la placa y el PIC son exactamente los mismos, solo cambia el firmware con el sintetizador HR6. Se puede notar que la voz mejoro mucho en claridad.