• Me puse a ver un poco acerca de pwm y encontre este SITIO que tiene bastante info acerca del tema. Esta bueno porque el que escribe los articulos se tomo el trabajo de hacer bastante analisis del la cosa y ademas tiene una larga experiencia.
    Desarrollo un aplicativo para pasar a 1 bit el audio con varios algoritmos a usar, una vista de comparacion de  las formas de onda y un preview de audio para oir los resultados.
    Lo que vi es que tiene un par de algoritmos para aplicar a los PIC ya que puede usar 2 lineas en vez de una para generar el sonido.

    No se muy bien como codificaste los fonemas, pero por ahi es para tenerlo en cuenta.

    Saludos.
     

  • Creo que habia visto esa web hace un tiempo y la deje para verla despues con tiempo, pero ese dia nunca llego. Yo convierto un valor de 4 bits a PWM en tiempo real, ese otro programa parece que codifica todo de antemano para que despues sea cuestion simplemente de leer una sucesion de unos y ceros y mandarlos a la salida. Yo en vez de leer unos y ceros leo nibbles y segun el valor salto a la rutina correspondiente que hace la sucesion correspondiente de unos y ceros. En mi caso son solo 4 bits y por lo tanto 16 rutinas distintas, pero si se quieren emitir mas bits ya se volveria impractico hacer 32, 64, 128, 256 rutinas... Lo que esta bueno es que se estudio bastante el filtro RC de salida, mire la pagina por encima pero debe estar interesante.
    En la Spectrum mire el circuito y vi que habia componentes como para hacer de filtro RC, que harian que la emision PWM funcionara con un minimo de ruido. En la ZX81 no mire el circuito, pero al ir al TV debe actuar el circuito del TV para filtrar el ruido.
    Hace un rato pude determinar que en la version MSX del programa las interrupciones quedaban habilitadas, algo que todavia no se por que ocurre, ya que las deshabilito. Esto me hizo pensar que tal vez en algun momento reciente haya aparecido este problema en el codigo, que en la parte del sintetizador es comun a todas las versiones, y que eso cause los cuelgues en la ZX81, ya que el problema parece ser que al terminar la ejecucion del codigo maquina se retorna a cualquier parte. Esto es coherente con que haya interrupciones habilitadas y de alguna manera se pierda la direccion de retorno de la pila. Voy a tener que analizar bien el codigo, en alguna parte debe haber algun salto involuntario fuera del programa, que termina en la habilitacion de las interrupciones. Como voy a depurar esto no se, porque no se puede seguir un programa asi paso a paso, son miles de instrucciones ejecutadas para reproducir un fonema, espero que mi experiencia en problemas similares que arregle en el PIC sirva de algo, pero si se resuelve de suerte, tampoco me voy a quejar. biglaugh.png
     

  • Bueno, hoy parece que ando con suerte, salio andando el sintetizador TAV81. Hice varias cosas asi que vaya uno a saber cual de todas es la causa de que ahora funcione. El error parece tener que ver con interrupciones, pero todavia no me hice tiempo de investigar como funciona bien el video. Ya que la maquina depende de las interrupciones, supuse que las activa a cada rato, por lo cual salgo del programa sin habilitarlas, tambien salgo sin habilitar la NMI, y detengo el barrido horizontal antes de salir, porque lo estaba dejando activado. Mi suposicion era que al activar todo eso antes de salir, quedaba alguna interrupcion pendiente y saltaba a cualquier parte, lo que requeriria una secuencia ordenada para procesarla, por eso decidi dejarle ese trabajo al sistema que seguramente debe saber bien que hacer.
    No se si la NMI tiene que quedar desactivada, parece que queda en ese estado luego de salir del programa, pero como sea funciona. No tengo expansion ni maquina compatible con mas de 2K, asi que filme la ejecucion del programa en el EightyOne, voy a ver si en algun momento la subo.
    Por ahora, aca esta la beta 5 en tzx.


    ]tav81_beta5.zip[/file]
     

  • Aca se ve el programa corriendo, no se si las trabadas que se pega tienen que ver con el emulador o sera asi en la maquina real.
    El ruido de la generacion de video es bastante molesto, asi que vayan regulando el volumen al ver el video.

     

  • Aunque esto con seguridad es inutil publicarlo aca, va una version para ZX81 de 16K con expansion Zon X, la cual contiene un chip AY-3-8912. Dudo mucho que alguien que lea esto tenga una, pero investigando sobre ZX81 y sintesis de voz, vi que se hablaba en sitios ingleses sobre esa expansion, asi que decidi hacer otra mezcla de versiones y agregarle sonido PSG al sintetizador TAV81. Lo publico aca simplemente para que sea el primer sitio donde aparezca, pero dudo que tenga mucha utilidad ya que los que tienen esa interfaz casi con seguridad hablan cualquier idioma menos castellano.


    ]tav81_zonx.zip[/file]
     

  • Empece a pasar algo de informacion a una seccion de mi sitio pastbytes.com para tener todas las versiones del programa en un solo lugar junto con los manuales. Tambien si no me aburro antes iba a explicar un poco del desarrollo del proyecto. Por ahora al menos ya la seccion de descargas esta al dia.
    La informacion esta en:

    http://www.pastbytes.com/apps/tav

    Tambien se puede entrar desde cualquier parte del sitio con el icono Aplicaciones, y luego TAV.
     

  • Los ultimos dias anduve planificando futuros proyectos, estos son los momentos donde se pasa en limpio todo lo aprendido. El sintetizador con PIC del que partio todo no estaba completo, faltaban muy pocos sonidos para terminarlo, en medio del desarrollo interplataforma pude resolver lo que faltaba, pero todavia tengo que volver al programa original para completarlo.
    Ironicamente, las ultimas reformas que le hice al proyecto con PIC antes de emprender el camino de la version por software, fueron para poder utilizarlo como sintetizador y placa de sonido basica para la ZX81, y al final termine haciendo un programa que lo reemplaza. Sin embargo, la calidad no es la misma, y el PIC permite seguir trabajando en SLOW porque admite que se le envie una frase entera lo mas rapido posible y continua trabajando por su cuenta. Falta realizar el escalado de ondas, que tengo hecho en teoria y empece a codificar en una version experimental para C64 hace unos dias, pero la deje en pausa porque tengo demasiadas cosas en mente para realizar.
    Como habia hecho la version para el modulo Zon X, que agrega un AY-3-8912 a la ZX81, mande un email al webmaster de zx81.de, donde hablan de hacer sintesis de voz con la expansion que trae el PSG, pero no me respondio, asi que me registre en el foro. Resulto que habia bastante interes en programas de voz y sonido en general que usaran el PSG, hay unos cuantos que tienen expansiones varias compatibles con Zon X. Por supuesto que el sintetizador en castellano no les sirve de mucho, asi que investigue un poco sobre sintetizadores en ingles y el chip SP0256-AL2 resuelve bastante bien el problema. Este chip creo que no se fabrica mas hace bastante, pero sigue siendo muy buscado para proyectos electronicos, habia visto hace un tiempo que alguien hizo una simulacion con un PIC y memorias EPROM, si mal no recuerdo usaba una bestialidad de memoria, como 64K o algo por el estilo. Tambien vi ahora que usan mucho las capturas de ese chip para hacer musica electronica con sonido retro.
    Como ya tenia la hoja de datos del chip me puse a revisarlo y vi factible modificar el sintetizador para generar los 59 alofonos de los que dispone. Pude reducir unos cuantos a cerca de 42 bytes de tablas de ondas, otros triplican esto, otros se generan con ruido (por programa), pero me quedan un monton para analizar. Tomando que me ocupen un promedio de 100 bytes cada sonido, tendriamos 5900 bytes solo para eso, y faltaria el codigo del analizador de comandos, que ahora tendria que usar comandos de 3 o 4 letras para conservar los nombres de la hoja de datos, algo que el chip no tenia porque usaba un numero para cada alofono. El procesador de comandos debe ocupar entre 2 y 3K, lo que dejaria el programa ocupando cerca de 9K, si no surge alguna complicacion extra que haga que algun sonido ocupe mas de lo planeado. Este tamaño me parece excesivo ya que limita bastante la memoria para BASIC, pero dudo mucho que se pueda reducir a menos de 7K, aunque va a requerir algun tipo de milagro informatico.
    Estoy haciendo todo a 9500Hz y 4 bits para que cuando este terminado tenga por arte de magia las versiones Spectrum 48K, Spectrum 128K, ZX81, ZX81+PSG, TS2068 y MSX1. Lo que es la portabilidad del soft. biglaugh.png
    Para la version C64 voy a tener que renderizar todo de nuevo a 7812.5Hz, asi que esta version va a ser mucho mas compacta, hay que tener en cuenta que ahora el programa TAV64 ocupa menos de 4K e incluye la impresion en tiempo real del texto procesado y la interfaz del usuario, mientras que las versiones Z80 ocupan un minimo de 5000 bytes y no incluyen interfaz ni imprimen el texto, aunque emiten sonido en una frecuencia de muestreo mayor. Puede que la version C64 termine en alrededor de 6K, pero por ahora es todo especulacion.
    La desventaja de esta version en ingles es que mi conocimiento de la pronunciacion es muy basico, por lo que no puedo hacer magia reemplazando un sonido con otro completamente distinto (en forma de onda) pero que suena igual al oido, lo que limita mi capacidad de compresion ya que me obliga a mantener el sonido lo mas parecido posible al original.
    Ademas de este tema, tengo renderizadas las ondas para un sintetizador de sonido natural, que esta hecho para C64 pero es solo para desarrollo (es decir que no lo voy a publicar) que va a terminar implementado en un PIC18, tambien me queda terminar el sintetizador original con PIC16, y empezar una nueva version, copia casi directa de estas versiones para computadoras, que correria en un PIC16F683 de 8 pines, sin siquiera cristal, llevaria solamente una resistencia y un capacitor para la salida de audio, y soportaria RS232 como el otro. Quedaria agregar un chip adaptador como el MAX232 si se quiere conectar a un RS232 real, o un chip que adapte a USB (de los que agregan un puerto serie a la PC por usb).
    Asi que voy a ir haciendo las cosas de a poco, mientras tanto, seria bueno si alguien esta registrado en sitios de habla castellana, que publiquen la web ahora que esta todo en un solo sitio (www.pastbytes.com/apps/tav) para que haya pruebas, criticas y sugerencias de la mayor cantidad posible de gente antes de sacar las versiones 1.0 de todos los programas. Prefiero que se pruebe lo mas posible antes de sacar formalmente la primera version, y no tengo ganas de andar registrandome en mas sitios, me parece que si un dia me golpeo la cabeza con algo voy a perder el acceso a unos cuantos sitios de tantas claves que tengo que recordar. biglaugh.png
     

  • Me olvidaba, hice una simulacion de como saldria el sonido en ingles con los alofonos que ya reduje, usando una palabra de ejemplo, en este caso HELLO, que usa los alofonos HH1 EH LL AX OW del SP0256-AL2. Todos esos alofonos menos el HH1 usan una tabla de ondas de 176 bytes en total, HH1 esta basado en ruido por lo que como sonido digitalizado ocuparia 1.27K, pero es un ruido modulado muy similar a la J nuestra. Por lo que pude determinar a ojo son 3 etapas y dos usan el mismo sonido con diferente volumen, similar a la S, y la tercera parte uno similar a la F, asi que con reutilizacion del codigo que ya tengo se hace, mas algun que otro ajuste.
    Si bien el alofono HH1 en el mp3 que adjunto esta directamente pegado y todavia no lo sintetice, todo el mp3 esta hecho con sonido de 4 bits y 9500Hz, aunque reducido a 8KHz para usar una frecuencia de muestreo estandar.


    ]test_hello.zip[/file]
     

  • un poco tarde pero hoy chusmeando en la PP que esta en internet en el n4 pag. 16 y 17 encontre un programita que simula un organo para esas maquinas. ( no es lo mismo que lo tuyo pero el resultado es conseguir que la maquina tenga sonidos o voz ) espero que te sea util
    LINK
    LINK
     

  • Nunca habia visto ese programa, hay un monton que simulan un organo pero son muy simples, yo parti de esa idea para adaptar el programa desde Spectrum a ZX81. Ese parece que es bastante mas elaborado que los que andan dando vueltas en otras revistas y libros de la epoca.
     

Moderador (s): homecomputer, Selandari, pastbytes, Palamar, phd, Durandal