• Le hice una correccion al manual, en el circuito que aparece al final la señal _RESET del PIC estaba conectada a masa a traves de una resistencia, cuando debia estar conectada a los 5V, no se iba a quemar nada, pero el sintetizador no iba a arrancar nunca por estar siempre reseteado.
    Se descarga del mismo lugar, sobreescribi el archivo en mi sitio: LINK
     

  • Para los que ya tienen el sintetizador, dejo 3 textos de prueba que use para distintos videos, incluyendo el ultimo que probe en Spectrum. Los pueden copiar y pegar en un programa emulador de terminal.


    ]textos1.zip[/file]
     

  • Un par de pruebas con textos de Star Trek, probando con variaciones de volumen, velocidad y entonacion para lograr un poco mas de naturalidad en la voz. Van dos mp3s en el zip. No encontre casi nada en español latinoamericano como para comparar la entonacion de las frases, asi que me base en audios en ingles de Nimoy, improvisando un poco porque la entonacion iria en distintas partes en ingles y en español, asi que son versiones muy particulares. Las versiones en español de España no me sirven mucho porque no les noto mucha variedad, parece un sonido muy plano.

    Texto 1:

    (z26n14)
    (c03vf)fass(c01v8)i(c03vd)nan(vb)te-(vf)

    Texto 2:

    (z26n15c03v8)
    ele(vd)sp(v8)a+(vd)s(v8)i(c05)o- ;;
    (c03n15)la-front(v9)e+r2afi-nal..,
    (n16c03vd)e+stoss(n19c05)on(n15c03)'losbia+jes (n16)delana+b(n19c04)e-espasia+l ,(n19c03)e+nter'pr(n11)ai-s.,
    (n15c03)suk(n19)onti+nua(n11)misio+n,,,
    (n15c03)ekspl(n19)or2a+r'(n15)ekst'ra+nios'(n19)nue+bos(n11)mu+ndos ,;
    (n15c03)busk(n19)a+rnue+basf(n11)o+rmasdebi+da
    (n15c03)i-nue+'bas'(n17c03)sibilis(n19c04)asio+(n11c03)nes ;;
    (n15c03)biaja+ndo(n17c03)temer2ar2(n19c04)iame+nt(n11c03)e ,;
    (n15c03)ado+nde(n19c04)na+d(n11c03)ie-,,(n19c04vf)a'+shega+(n11c03vd)doa+nte-s.(vf)

     

  • Un par de pruebas con textos de Star Trek, probando con variaciones de volumen, velocidad y entonacion para lograr un poco mas de naturalidad en la voz. Van dos mp3s en el zip. No encontre casi nada en español latinoamericano como para comparar la entonacion de las frases, asi que me base en audios en ingles de Nimoy, improvisando un poco porque la entonacion iria en distintas partes en ingles y en español, asi que son versiones muy particulares. Las versiones en español de España no me sirven mucho porque no les noto mucha variedad, parece un sonido muy plano.

    Texto 1:

    (z26n14)
    (c03vf)fass(c01v8)i(c03vd)nan(vb)te-(vf)

    Texto 2:

    (z26n15c03v8)
    ele(vd)sp(v8)a+(vd)s(v8)i(c05)o- ;;
    (c03n15)la-front(v9)e+r2afi-nal..,
    (n16c03vd)e+stoss(n19c05)on(n15c03)'losbia+jes (n16)delana+b(n19c04)e-espasia+l ,(n19c03)e+nter'pr(n11)ai-s.,
    (n15c03)suk(n19)onti+nua(n11)misio+n,,,
    (n15c03)ekspl(n19)or2a+r'(n15)ekst'ra+nios'(n19)nue+bos(n11)mu+ndos ,;
    (n15c03)busk(n19)a+rnue+basf(n11)o+rmasdebi+da
    (n15c03)i-nue+'bas'(n17c03)sibilis(n19c04)asio+(n11c03)nes ;;
    (n15c03)biaja+ndo(n17c03)temer2ar2(n19c04)iame+nt(n11c03)e ,;
    (n15c03)ado+nde(n19c04)na+d(n11c03)ie-,,(n19c04vf)a'+shega+(n11c03vd)doa+nte-s.(vf)

    pastbytes
    En este LINK y en este LINK estas la introduccion originales en español. La segunda es la que yo recuerdo como la que se daba aca

    Despues ni busque las de las peliculas que me parecen estan mas entonadas.
     

  • Esa la encontre, pero el doblaje supongo que no tiene mucho que ver con la voz original, que ya ni recuerdo si la escuche, el texto que use es el de la nueva generacion, pero basado en el final de Star Trek 11, en el final de la primera creo que tambien habla Nimoy.
    Lo que queria era usar un texto en español pero hacer algo mas parecido a lo estandar que es la version de Nimoy en las peliculas. No voy a encontrar algo exacto para comparar porque que yo sepa nunca grabo eso en español. En definitiva es un intento de doblaje, con muchas limitaciones por supuesto, la voz no la puedo hacer igual porque es muy particular, pero me conformo con que tenga un poco de naturalidad. El dia que el sintetizador soporte ingles por ahi lo hago un poco mejor.
     

  • Hay algunas novedades en el proyecto, aunque por el momento no va a cambiar nada en la version actual.
    Hace tiempo que estoy dedicado a otras cosas y no ando mucho con este tema, pero ya que se me ocurrieron algunas ideas aisladas en los ultimos meses, pense que seria mas facil probarlas portando el sintetizador a Linux, usando el lenguaje C. No programaba en C desde los 90s, cuando el ANSI C era algo relativamente nuevo, me costo acordarme de un monton de cosas pero eso me obligo a programar ordenadamente, y recien termine de portar el parser que procesa los comandos en ASCII y los convierte en comandos binarios internos. Ahora falta implementar el secuenciador que toma esa lista de comandos binarios y llama a las rutinas correspondientes a cada sonido.
    Las ondas que usa el sintetizador siempre estuvieron en calidad CD, esto es 16 bits y 44KHz, y se reducian a 8KHz y 8 bits para incorporarlas al programa del PIC, pero ya que reimplementaba el algoritmo en PC aproveche para usar las originales en calidad CD, pero con los mismos criterios que en el PIC, de forma tal de que se pudiera ejecutar la misma secuencia de comandos en las dos implementaciones, y sonara cada una con su respectiva calidad de sonido, pero emitiendo lo mismo.
    El primer desafio importante fue portar la rutina generadora de ruido, que genera numeros al azar haciendo operaciones logicas y desplazamientos, costo emularla de forma exacta en C, ya que en asm se tienen en cuenta las banderas de estado del procesador y habia que emular eso en C, pero quedo bien.
    Lo interesante de todo esto es que pude ver cosas que nunca vi antes, como por ejemplo la salida de la generacion de ruido, que por primera vez pude analizar estadisticamente para ver que tan buen ruido blanco es, y resulto que es excelente. La otra cosa que nunca habia visto es la secuencia binaria que se agrega a la lista de reproduccion, ahora puedo escribir una secuencia en ASCII y ver exactamente que se agrega a la lista. Hay que tener en cuenta que no necesariamente hay una correspondencia directa entre los comandos ASCII y los comandos binarios internos, a veces los fonemas se implementan usando varios sonidos internos, y otras veces es directo. El programa en el PIC lo desarrolle sin ver nada de eso, corrigiendo errores segun el sonido que obtenia, analizando las ondas capturadas de la salida del PIC. No use simuladores de ningun tipo porque no uso eso desde principios de los 2000s, cuando se usaba la serie 16C5x.
    Hay varias cosas que desarrolle en papel y que nunca probe, que voy a ir probando en el futuro, como por ejemplo la transformacion gradual de una onda cualquiera en otra, en tiempo real, tambien logre implementar un filtro pasa bajos usando muy pocas instrucciones, solo suma, resta y desplazamientos, lo que me serviria para hacer una especie de interpolacion al escalar las ondas mas abajo de su frecuencia original. Esto ultimo lo probe y da buenos resultados, pero tomando un wav cualquiera y aplicando el algoritmo en BASIC para generar un nuevo wav filtrado.
    Tambien me queda para mucho mas adelante un experimento para no tener que almacenar las ondas usadas y poder generarlas usando una formula, pero eso va a requerir bastante experimentacion.
    Por el momento el resultado mas directo que obtuve de esta implementacion en C es que logre encontrar unos errores en el parser que no sabia que estaban en el programa del PIC, por suerte el codigo es bastante fiel al original y gracias a eso se lo que hay que corregir en el programa en asm, lo dificil va a ser corregirlo sin espacio suficiente en memoria de programa, por eso por ahora va a quedar igual.
    Por cierto, convertir el programa en asm de PIC a C para Linux demuestra las desventajas de la programacion "correcta", es decir sin usar goto, en C el programa es muy grande en comparacion, ya que es menos lo que se ahorra gracias a las instrucciones de C, que lo que crece el programa por evitar los goto. El programa en asm es bastante ordenado, se ejecuta en un ciclo infinito y siempre hacia adelante, esta todo dividido en bloques que hacen una tarea determinada, las etiquetas usan el mismo prefijo para saber a que bloque corresponden, y no se salta de un bloque al otro sino que se sale como la instruccion break de C, saltando al final del bloque correspondiente. Cada bloque tambien tiene algun chequeo de banderas para saber si se debe ejecutar o saltar al final del bloque, por lo que es facil de convertir a C usando if y switch-case, y evitando etiquetas y goto, pero el codigo resultante es muy extenso tanto en alto como en ancho, requiere mucha indentacion y switch o if anidados. No tenia ninguna necesidad de hacerlo asi porque es codigo para desarrollo interno, pero queria hacer un ejercicio de programacion para ver como quedaba.
    Ya voy a poner alguna prueba de audio cuando lo tenga completo, mostrando como suena en el PIC y en PC a maxima calidad (que se podria aproximar bastante usando el PIC adecuado).
     

  • Bueno, pude corregir el error en el parser, fue facil en el programa de PC, y mas complicado en el PIC, porque solo habia memoria libre para 2 instrucciones, de las cuales solo podia ocupar una porque la otra quedaria en la segunda pagina. Pude hacer alguna optimizacion y ahora solo queda lugar para una instruccion, el parser esta probado y funciona correctamente. Que existia algun bug lo habia descubierto hace unas semanas cuando probaba textos que antes funcionaban, pero con el cable USB a RS232, que andaba muy mal en Linux, se ve que la perdida de datos al enviar un texto largo provoco que se enviaran comandos con caracteres no validos como parametros, y eso causo que se reprodujeran algunos fonemas en particular sin que se le hubiera enviado los comandos correspondientes. No tenia idea de cual podia ser el error y menos de como corregirlo, y quedo ahi hasta que lo encontre portando el programa a la PC, supongo que lo podria haber encontrado igual directamente en el PIC, pero habria llevado bastante trabajo.
    De paso aproveche a corregir un par de errores que no modificaban nada pero chequeaban condiciones que no se podian dar, y por lo tanto perdian algunos ciclos extra en el parser.
    Ahora el programa pasa a la version 1.0 beta 12, y supongo que esta vez ya es la version final.
    Dije que el cable USB a RS232 funcionaba mal en Linux, porque estaba usando GTKTerm, que un dia empezo a perder datos y nunca mas se arreglo, pero ahora encontre otro programa, Qodem, que tiene aspecto de programa emulador de terminal de MSDOS, y ahi el cable funciona muy bien. GTKTerm en algun momento enviaba pero dejaba de recibir y se quedaba bloqueado hasta volver a configurar el puerto en el programa.
     

  • *** VERSION BETA 13 ***

    Hice una serie de optimizaciones y ajustes, y ahora el programa pasa a ser beta 13.
    Se optimizo el programa y se ahorraron 8 instrucciones, que no use para nada todavia.
    Se amplio la variacion de tono en los acentos, lo que hace que ahora la voz tenga un poco mas de expresion (suena menos robotica).
    Se redujo el volumen a los fonemas S, K y G, que se notaban demasiado, ahora suena un poco mas natural.
    Tambien aproveche y agregue al codigo fuente las tablas de ondas de voz femenina, no se puede tener las dos voces a la vez pero puedo probar mas facil definiendo o no una etiqueta, porque tiene compilacion condicional. La voz suena bien en entonacion, pero las ondas necesitan bastante trabajo porque todavia distorsionan, no tienen el nivel de trabajo de las otras ondas actuales.
    Dejo una prueba en mp3 del sintetizador recitando el comienzo del Martin Fierro.


    ]pruebahr4_2014-06-05_4martinfierro.zip[/file]
     

  • Va mejorando cada vez mas
    excelente trabajo
     

  • Hace un tiempo me pasaron este link: LINK
    Es de un circuito y programa para enviar programas BASIC desde una ZX81 a otra maquina por RS232, en ASCII, para poder almacenarlos en la otra. En este caso se envia a una C64 por lo cual no se necesita un MAX232, pero se podria usar para conectar con cualquiera maquina que tenga puerto serie. Viendo esa aplicacion se me ocurrio que podria conectar el PIC directamente a la salida de los dos transistores, ya que en definitiva eso simula un RS232 con niveles TTL usando la salida MIC. Mi idea era adaptar la rutina RS232 de la MSX (la del puerto de joystick) y calibrarla para la TS2068 y Spectrum, para enviar a 19200 bps los comandos de voz al PIC, pero todavia no tuve tiempo de armarlo para calibrar la velocidad.
    Me olvidaba, si alguno quiere probar el texto del Martin Fierro, la secuencia de comandos a enviar es esta:

    (Z28N1BC05VF)
    A-KI+MEPO+NGOA-KANTA+R   A-LKOMPA+SDELA-BI-GUE+LA-,
    KE-ALO+MBREKE-LO-DESBE+LA-   U+NAPE+NAE-STRO-RDINA+R2IA-,
    KO-MO-LAA+BESO-LITA+R2IA-, KO-NE-LKANTA+RSEKO-NSU-ELA-;,
    PI-DO-A-LOSSA+NTOSDE-LSIE+LO-   KE-ASHU+DENMI-PE-NSA-MIE+NTO-,
    LESPI+DOE-NE-STE-MOME+NTO-   KEBO+IA-KANTA+RMI-ISTO+R2IA-,
    ME-REFRE+SKENLA-MEMO+R2IA-, I-AKLA+R2ENMI-E-NTE-NDI-MI-ENTO-;,
    BE-NGANSA+NTOSMI-LAG'RO+SO-S   BE-NGANTO+DOSE-NMI-ASHU+DA-,
    KE-LALE+NGUA-SE-ME-A-NIU+DA-   I-SE-METU+RBALABI+STA-,
    PI-DO-A-DIO+SKEME-ASI+STA-, ENU+NAO-KA-SI-ONTA-NRUDA-;,
    SHO-EBI+STOMU+CHOSKANTO+R2E-S   KONFA+MA-SBIE+N'OTENI+DA-S,
    I-KE-DE-SPUE+SDEA-LKIR2I+DA-S   NO-LA-SKIE+R2ENSU-STE-NTAR,
    PA-R2ESEKE-SI-N'LA-RGAR, SE-KA-NSAR2O-NE-NPA-RTIDA-S;,
    MA-S'ANDE-OTRO-KRIO+SHOPA+SA-   MARTI+NFIE+RRO'A-DE-PA-SAR,
    NA-DA-LOA+SE'RE'KU+LA-R   NI-LA-SFANTA+SMASLO-ESPA+NTA-N,
    I-DENDE-KETO+DOS'KA+NTA-N, SHO-TA-MBIE+NKIE-R2O-KANTA-R;,
    KA-NTANDO-ME-EDE-MOR2I+R   KA-NTANDO-MEA+NDE-ENTERRA+R,
    I-KANTA+NDOE+'DESHEGA+R   A-LPIE+DELETE+RNO'PA+DRE-,
    DE-NDE-E-LBIE+NTREDE-MI'MA+DRE-, BINE-A-ESTE-MUNDO-A-KANTA-R;,
    KE-NO-SE'T'RA+BEMILE+NGUA-   NI-MEFA+LTELA-PALA+BRA-,
    E-LKANTA+RMIGLO+R2IA'LA+B'RA-   I- PO-RNIE+NDOME-A-KANTA+R,
    KA-NTANDO-ME-ANDE-ENKONTRA+R, A-U-NKE-LA-TI-ERRA-SE-AB'RA-;,

    No va a sonar con la misma naturalidad en las versiones anteriores, no probe que tal suena pero no debe haber una diferencia drastica.
     

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