• Solo una palabra para esto:


    Eduard Anatolyevich Khil not dead! (si, falleció... pero vive en todos nuestros corazones.)
     

  • Hace tiempo que queria armar el circuito en una placa mas reducida, para no andar usando esa placa grande que tiene varios experimentos juntos, se me ocurrio que podia caber en una placa experimental de las mas chicas que consigo aca, y efectivamente entro todo bien.
    Le saque un par de fotos comparada con la version para C64, que no se puede superar en reduccion de espacio, excepto que se use un PIC SMD, pero no tiene mucho sentido.

    1342615487 75 FT59536 Epsn3331s

    1342615487 75 FT59536 Epsn3332s

    La placa contiene todo lo necesario para usar el sintetizador con 9 o 12V, ya que tiene un regulador de 5V, ademas de eso esta el PIC, el conversor de voltajes para RS232 (MAX232), el conector DB9 para el puerto serie, el conector para miniplug estereo (los dos canales estan unidos), y un preset que agregue ultimamente tambien a la placa grande, porque el PIC emite sonido de 5V y salia saturado entrando a la placa de sonido de la PC.
    En cuanto al programa falta mejorar el escalado de frecuencias, y ya resolvi teoricamente como especificar los tiempos musicales y donde empieza cada silaba, por lo cual ahora el chip va a calcular automaticamente los tiempos segun el tipo de nota (blanca, negra, corchea, etc.), y con eso estamos mas cerca de convertir una partitura casi directamente.
     
  •  

  • Lastima que estas tan lejos, sino te mandaba un chip para que experimentes.
    Todavia le falta mucho a esto para que lo considere terminado, ya que la idea era que sirviera tambien como chip de sonido basico, y del mundo de los sintetizadores musicales tengo bastante para aprender.
    De todas maneras, si alguien quiere probar el chip podemos arreglar para que le mande uno grabado, en el estado en que este el programa en ese momento. No puedo garantizar que no cambien los comandos porque todo esta sujeto a definiciones todavia, y tampoco tengo tiempo para ponerme a armar placas. Esta placa que arme me llevo unas cuantas horas porque hay que soldar unos cuantos cables y asegurarse que todo este bien conectado, pero no es complicada de armar, hay que tener un poco de paciencia si se usa una de esas placas, porque para los conectores hay que agrandar algunos agujeros y torcer unos cuantos pines, como en el caso del DB9.
     
  •  

  • Lastima que estas tan lejos, sino te mandaba un chip para que experimentes. Todavia le falta mucho a esto para que lo considere terminado, ya que la idea era que sirviera tambien como chip de sonido basico, y del mundo de los sintetizadores musicales tengo bastante para aprender. De todas maneras, si alguien quiere probar el chip podemos arreglar para que le mande uno grabado, en el estado en que este el programa en ese momento. No puedo garantizar que no cambien los comandos porque todo esta sujeto a definiciones todavia, y tampoco tengo tiempo para ponerme a armar placas. Esta placa que arme me llevo unas cuantas horas porque hay que soldar unos cuantos cables y asegurarse que todo este bien conectado, pero no es complicada de armar, hay que tener un poco de paciencia si se usa una de esas placas, porque para los conectores hay que agrandar algunos agujeros y torcer unos cuantos pines, como en el caso del DB9.

    pastbytes

    Si, latimas, de todas maneras gracias por considerarme para probar y experimentar!.  Es un gran proyecto, y va teniendo avances interesantísimos!. 

     

  • *** Primeras pruebas de sintetizador musical: Trololo remix *** biglaugh.pngbiglaugh.png

    Estuve la ultima semana mejorando el escalado de ondas a frecuencias arbitrarias, o mas bien implementando el escalado, ya que antes simplemente se completaba el ciclo con silencio para bajar a la frecuencia deseada, lo que provocaba que la voz pierda fuerza cuanto mas baja fuera la frecuencia, y que no se pudiera escalar hacia arriba.
    Ahora se hace un escalado desde ondas base de poco mas de 60 muestras, y el algoritmo es generico, con una precision de cerca de 0,5 Hz, que permite el escalado para arriba y para abajo, por lo cual ahora la voz incorpora una octava extra y llega hasta la nota C4. La frecuencia se especifica con un numero de 16 bits, que por ahora no tiene un comando asignado en el parser, porque uso tablas precalculadas para 37 semitonos que van de C1 a C4. Cuando le agregue la parte de sintetizador musical, el programa va a permitir especificar una frecuencia arbitraria, pero como nada de eso esta implementado, se me ocurrio probar la musica incorporando dos instrumentos como si fueran fonemas, y usarlos de la misma manera que el canto.
    Los instrumentos que agregue son bajo y organo, aunque sin ADSR el bajo suena muy electronico.
    Ya que el programa no admitia las letras V, W, X, Y y Z, agregue la V para el bajo y la W para el organo, asi que temporalmente cuando quiero usar esos instrumentos uso V y W.
    Como queria probar algun tema y no tenia ganas de pasar tiempo haciendo calculos y mirando notas en un secuenciador, modifique el tema "trololo" que habia hecho antes, y lo ajuste para bajo, luego para organo, y luego lo mismo pero con una octava mas alta. El resultado me parecio lo suficientemente bueno, asi que mezcle partes de cada uno para hacer el "trololo remix", parte cantado y parte instrumental.
    Tuve que aplicarle un filtro de 8KHz al audio capturado, ya que al convertir a mp3 el wav el programa de audio se confunde con los armonicos del audio y hace un eco bastante extraño, lo que empeora bastante al tratar de hacer caber el mp3 en menos de 512K que es lo que se puede adjuntar aca. El mp3 es de 48Kbps, con el filtro de 8KHz aplicado se convirtio bastante bien, y aunque pierde calidad, es bastante aceptable para que tengan una idea de como suena.

    Edit: Me olvide de aclarar, cuando digo que mezcle partes de varias composiciones, no me referia a que el audio esta editado, lo que hice fue pegar los comandos de cada parte y hacer una secuencia de texto que junta todo. El audio capturado lo reproduce el PIC en vivo de acuerdo a un unico texto, que no adjunto aca porque igual parece chino basico y no aclararia nada. biglaugh.png
    Por ahora el PIC es monofonico, cuando agregue formalmente la parte del sintetizador musical, la idea es que sea polifonico, o "bifonico", que la voz y el canal musical funcionen simultaneamente.


    ]trololo_remix.zip[/file]
     

  • *** Breve actualizacion, prueba preliminar de nuevo algoritmo de voz ***

    Antes de que se hiciera la reunion de hace unos dias, habia encontrado una manera de hacer la voz un poco mas entendible, no era una modificacion complicada para un unico tono de voz, pero se complicaba un poco implementarla para que se llevara bien con el algoritmo de escalado de notas existente. La idea era poder terminarlo antes de la reunion pero no hice a tiempo, y quedo todo abandonado hasta ahora, el fin de semana le mejore la onda de bajo para el sintetizador musical, y ahora le hice un parche al programa para poder probar la mejora de la voz de forma limitada. La limitacion no tiene que ver con que suene mal, sino con que no queda bien para cantar porque aun tiene el escalado que cambia el tono de voz con cada nota, algo que no ocurre con la voz real, pero es un problema del canto nada mas.
    Capture una prueba con el texto de Star Trek, con el algoritmo de voz mejorado, y despues sigue una breve prueba del sintetizador musical (bajo, guitarra electrica y organo).
    La voz suena mas robotica, pero creo que se entiende un poco mas.

    ]pruebahr3_2012-09-10.zip[/file]
     

  • Se oye mas pulido - limpio los sonidos!. Muy bien!
     

  • *** Nueva version 4 del sintetizador ***

     Ultimamente no tuve mucho tiempo para dedicarle a este proyecto, por un lado por falta de tiempo y por otro por problemas tecnicos que tenia que solucionar. El problema mas importante que tenia era que ya no habia memoria en el PIC de 4K para seguir agregando cosas, y como hay una gran cantidad de tablas de saltos en el programa, que requieren ser ubicadas en paginas de 256 palabras (no son bytes porque la memoria de programa del PIC tiene un ancho de 14 bits), el problema no era solo de falta de memoria sino que ademas la memoria libre tenia que ser contigua. Las tablas de saltos no pueden quedar entre dos paginas, por lo que liberar un poco de memoria requiere ir acomodando rutinas y tablas por toda la memoria para rellenar lo mejor posible cada pagina y dejar la mayor cantidad de espacio libre contiguo. Para complicar las cosas, si muevo algo de lugar y no cabe, el programa no compila y no puedo ver donde cae cada rutina en memoria, por lo que todo el reacomodamiento tiene que hacerse anotando cuanto ocupa cada rutina y planificando de antemano antes de modificar el programa. Ese es el precio a pagar por insistir en usar un PIC16 en lugar de un PIC18 para esta aplicacion, pero creo que valio la pena.
    En enero empece a planificar el nuevo algoritmo de escalado de voz, pero por el problema de la falta de memoria y porque todavia no se me ocurria como implementar las modificaciones en el programa existente, las cosas fueron avanzando muy lentamente, hasta la semana pasada. Despues de unos dias de trabajo pude terminar la parte principal del nuevo algoritmo, que en principio funcionaba peor que el anterior hasta que corregi algunos errores y termino andando mejor de lo esperado.
    Esta nueva version seguramente va a ser la mas avanzada en PIC16, probablemente haya versiones para otros PIC de esa familia pero las diferencias van a ser en calidad de sonido (menor o igual) y tipo de conexion (por RS232, directo a un Z80 o 6502, etc.). Tuve que desistir de incorporarle funciones de sintetizador musical por falta de espacio, eso quedara para versiones reducidas y para el proximo proyecto de sintetizador de voz y musica en PIC18.

    Todavia falta corregir y agregar algunas pocas cosas, pero basicamente las caracteristicas de esta version son:

    - Programa diseñado para correr en un PIC16F648A a 20MHz, con 4K de memoria.
    - Conexion por RS232 a 1200bps, usando RX, TX y CTS.
    - Se puede cambiar la velocidad y el tono de la voz.
    - El tono se puede cambiar tanto para las formantes como para la envolvente.
    - El tono de voz puede variar en un rango de 3 octavas y un semitono, de C1 a C4.
    - El programa esta pensado para recepcion continua de datos, habla apenas recibe.
    - Se implementan dos comandos de acentuacion y 3 de sonidos extra.
    - La calidad del sonido es de 8 bits a 8680 Hz de muestreo.
    - Permite el uso directamente desde un programa emulador de terminal.
    - Toda la comunicacion se hace en ASCII con caracteres imprimibles.
     
    Las versiones anteriores almacenaban las vocales en su forma final, la version 2 agregaba silencio a cada ciclo de las ondas para lograr emitir una nota mas baja sin alterar el tono base de la voz, es decir las frecuencias formantes. Esto tenia el problema de que al bajar una octava, la mitad del ciclo fuera silencio, lo que reducia mucho la utilidad y lo limitaba a una octava mas o menos usable. La version 3 tambien almacenaba las ondas pero hacia un escalado de frecuencia, lo cual lograba siempre buen volumen y notas correctas, pero alteraba las formantes, dando la sensacion de que al avanzar mas de una octava estuviera hablando una voz diferente.
    Mientras la version 2 alteraba la nota conservando la voz base, y la version 3 alteraba ambas cosas simultaneamente, la version 4 logra los resultados de la version 2, con la calidad de la version 3. Para lograr esto, se tuvo que reconstruir las ondas eliminando la nota musical que las afecta, para que pudieran emitirse a un volumen constante y fueran independientes. Estas ondas base son las que definen el tono de la voz, y pueden escalarse en frecuencia en un rango de 3 octavas. A su vez cada una de esas 37 voces posibles pueden ajustarse para emitir otras 3 octavas (37 semitonos), modulando las ondas base con una onda envolvente predefinida escalable en frecuencia. Con esto se puede cantar en 3 octavas conservando la misma voz, y se puede disponer de 37 voces diferentes, seria posible por ejemplo tener varios chips con voces distintas cantando exactamente las mismas notas. Pero aparte del tema musical, una gran ventaja de estos parametros es que permiten darle mas expresion a la voz, aunque no se pretenda hacer cantar al chip.
    El escalado de las ondas base esta implementado, pero no asi el comando en el parser, por lo cual por el momento solo se puede cambiar por programa, estando por defecto en la nota C3. La nota en cambio si tiene el comando implementado, y es lo que se utiliza en la siguiente demostracion. Tengo que hacer un video donde se pueda ver mejor la prueba, pero por ahora va un mp3 con un texto de prueba.

    El texto de prueba es:

    "Saludos, comunidad de retrocomputacion. Estan escuchando la version 4 del sintetizador de voz con PIC16.
    Esta version implementa un nuevo algoritmo, que genera la voz emitiendo una onda base, la cual es modulada en amplitud por una onda envolvente de frecuencia escalable.
    La frecuencia de la envolvente puede ajustarse para corresponder a cualquier semitono entre la nota do de la octava 1, hasta la nota do de la octava 4.
    Podemos probar con las notas musicales?

    do re mi fa sol la si [octava 1]
    do re mi fa sol la si [octava 2]
    do re mi fa sol la si [octava 3]
    do [octava 4]

    Este programa esta implementado usando un PIC16F648A, y recibe los comandos a 1200 bits por segundo, por medio de una conexion serie.
    El sonido emitido es digital, con una calidad de 8 bits de resolucion, a una frecuencia de muestreo de 8,6 KHz.
    A continuacion, este sintetizador entonara las estrofas del himno nacional argentino:

    Oid mortales, el grito sagrado: ¡Libertad! ¡Libertad! ¡Libertad!
    ¡Oid el ruido de rotas cadenas: ved en trono a la noble Igualdad!
    Ya su trono dignísimo abrieron las Provincias Unidas del Sud,
    Y los libres del mundo responden ¡Al gran Pueblo Argentino salud!
    ¡Al gran Pueblo Argentino salud!
    Y los libres del mundo responden ¡Al gran Pueblo Argentino salud!
    Y los libres del mundo responden ¡Al gran Pueblo Argentino salud!

    Sean eternos los laureles que supimos conseguir:
    que supimos conseguir:
    coronados de gloria vivamos o juremos con gloria morir.
    o juremos con gloria morir.
    o juremos con gloria morir.

    Para mas informacion, ingresen al sitio del proyecto, en www . pastbytes . com
    o al foro de proyectos en retrocomputacion.com [beep]"


    El mp3 va a ser temporal hasta que haga un video, por ahora se puede descargar de LINK

     

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