Estuve un par de dias peleando contra el SID, y medio que terminamos empatados, pude lograr algunos fonemas del sintetizador de voz con PIC en el SID, aunque no sin antes encontrarme con un monton de inconvenientes. El tema del ADSR es lo que mas me complico la vida, porque los sonidos estan ajustados a un ciclo de aproximadamente 9 milisegundos, lo cual para el ADSR del SID es un tiempo muy justo. El tiempo minimo de ataque son 2 ms, luego sigue el decaimiento que tiene minimo 6 ms, esos tiempos no los podemos achicar, lo intente, pero al disparar el ciclo de relajacion antes de esos 8ms minimos, el resultado es impredecible. A veces funciona, y otras se anula el ADSR por un tiempo y afecta a los sonidos posteriores, que se reproducen a bajo volumen o con volumen fijo.
En resumen, hay que usar el ADSR como viene, sin demasiadas vueltas, por lo general use 2ms de ataque, 6ms de decaimiento, con sostenimiento 0, es decir que queda anulado practicamente y el decaimiento cae directamente a 0, siendo el disparo del ciclo de relajacion un tramite para quedar preparado para el proximo sonido. Esta limitacion me obligo a prescindir del ADSR para crear ondas complejas, o de regular el volumen del canal sin tocar el volumen general interrumpiendo los ciclos antes. Solo en el caso de sonidos largos como la S o la K se pudo hacer uso del ADSR para modelar las ondas.
Otro tema importante es que entendi la diferencia entre el 6581 y el 8580, ya que la tuve que sufrir, el 6581 tiene un problema con las componentes de continua de las ondas, que afecta en particular cuando se cambia de volumen. Ya que tenia sonidos que estaban compuestos de diferentes ondas en secuencia a distinto volumen, el 6581 hacia un click entre cada parte, cada vez que se ajustaba el volumen, mientras que el 8580 no lo hacia. Mirando bien las ondas me di cuenta que el error es igual al que tuve en mi primer sintetizador con PIC, que al reducir el volumen no compensaba el offset y por lo tanto las ondas quedaban mas cercanas a 0, es decir no quedaban centradas a mitad de tension. Esto hacia que al bajar de volumen se generara un flanco descendente abrupto que era audible, y lo mismo pasaba cuando se subia el volumen, pero con un flanco ascendente. En el 8580 las ondas aparecen perfectamente centradas a media tension. La solucion fue aplicar un filtro pasa altos en el SID a todos los canales, de forma que deje pasar todo por encima de 100Hz, con lo cual el sonido del 6581 quedo casi identico al del 8580, pero igualmente el 8580 tiene el sonido mas limpio.
No hice todos los sonidos porque solo queria hacer una frase de prueba, mas adelante por ahi termine los que faltan, pero ya bastante peleado fue lograr este resultado. Queria hacer el codigo simple, facil de modificar y sin muchos requerimientos de proceso, de forma que el SID haga la mayoria del trabajo, tengo una rutina que temporiza unidades de 500us, aunque en la practica nunca uso menos de 1ms, y no deberia ser complicado adaptar las rutinas a un programa con interrupciones.
Creo que se podria lograr un mejor sonido, pero es una base desde donde partir, esta hecho pensando en utilizar la menor cantidad de recursos, las ondas son muy cercanas a las del sintetizador con PIC, pero les falta detalle y por lo tanto no son tan entendibles.
Dejo el .prg para que lo prueben, si lo cargan en un emulador pueden escuchar la diferencia entre el 6581 y el 8580, que gracias al filtro es muy poca pero existe.
Tal como sugiere el nombre del archivo, hay que cargarlo con ,8,1 y ejecutarlo con SYS 49152.
]synth64_49152.prg[/file]