• *** Primera prueba exitosa del sintetizador HD1 ***

    Bueno, despues de muchas interrupciones, pude dedicarle algunas horas repartidas a lo largo de la semana, y aunque no anduvo a la primera y dio un monton de errores de lo mas extraños, al final hoy pude lograr una primera version funcional del sintetizador HD1, con el sonido exacto que habia obtenido en las simulaciones. Lo de simulaciones suena complejo, pero no es mas que cortar y pegar ondas en un programa de audio, con las ondas exactas que va a usar un programa, y aplicando los mismos procesos. Es bastante artesanal el asunto, y muy trabajoso porque requiere un monton de tiempo para ensamblar una frase.
    Lo primero fue empaquetar las ondas del sintetizador HR5 reduciendo la calidad a 7 bits para poder colocar 2 muestras por palabra, ya que el audio estaba almacenado en memoria de programa, y esta memoria tiene un ancho de 14 bits. De esta manera se pierde la mitad de la resolucion del audio, pero se ocupa la mitad de espacio, y esto era un paso necesario para poder luego agregar los 3Kx14 bits de audio del nuevo sintetizador.
    Lamentablemente, ese primer paso que debio ser simple porque dejaba el HR5 sin alterar, resulto complicado porque se descompagino una rutina de modulacion que define la nota de la voz, por lo que despues de perder un par de dias tratando de saber que pasaba, decidi continuar igual, ya que esa modulacion de todas maneras debia ser eliminada en el nuevo programa.
    Despues siguio recalcular las tablas de frecuencias para las notas, ya que este audio esta capturado en una frecuencia diferente, con ligeramente mas calidad. Luego llego el turno de agregar las nuevas ondas, y modificar las rutinas de ajuste de tono de voz.
    Cuando ya estaba todo implementado, surgieron montones de errores que generaban efectos de sonido extraños, hasta que pude arreglar las rutinas de tono de voz para que funcionaran correctamente. Hay que tener en cuenta que el algoritmo es muy diferente al del HR5, y entonces me limite a hacer parches a las rutinas hasta rehacer el secuenciador de una manera mas limpia.
    En este momento hay memoria de programa de sobra, y unas cuantas rutinas que quedaron obsoletas, mas otras como las de sintesis musical que deben eliminarse y reimplementarse desde cero, pero la voz quedo bastante inteligible, teniendo en cuenta que tuve que reducir la calidad a 7 bits y almacenar solo la mitad de la duracion planeada originalmente.
    Y sorprendentemente, canta mejor de lo que habla.
    Ya voy a grabar un video probandolo cuando tenga un tiempo libre.
     

  • *** Prueba del sintetizador cantando el himno nacional, mp3 adjunto ***

    Hacia tiempo que no probaba el sintetizador cantando el himno, asi que ahi va de nuevo. Se puede notar que es mas inteligible que los otros, porque soporta la reduccion a un mp3 de 22KHz a 32Kbps, las versiones anteriores empeoraban drasticamente al reducir el audio capturado desde el PIC a mp3, y en esta se sigue entiendiendo bien a pesar de la perdida de calidad.
    Como ya aclare alguna vez, esta secuencia para cantar el himno fue hecha para otro sintetizador, por lo que los tiempos y alguna que otra nota estan mal, lo fui arreglando de a poco pero es algo que lleva mucho trabajo, y todavia no esta completo.
    Y una aclaracion mas que tiene que ver con este sintetizador en particular, por la forma en que esta implementado no puede cambiar la nota de la voz, por lo que tiene que cambiar de voz para simular el efecto. Esto hace que por momentos pareciera que cantan dos voces a duo, porque salta varias notas y el cambio de voz es drastico.
    Algun dia voy a terminar de arreglar la secuencia, asi dejo de arruinar el himno nacional con estas pruebas antes de que la patria me lo demande.  biglaugh.png


    ]pruebahd1_2015-12-31_4.zip[/file]
     

  • Por mi podes seguir arruinandolo biglaugh biglaugh
     

  • Ya que estamos, hago una actualizacion.
    Pude agregarle el algoritmo para seleccionar la nota de la voz, por lo que ahora es independiente del tono (tipo) de voz, como en los proyectos anteriores. La voz robotica suena muchisimo mejor ahora con voz mas realista, que lo que sonaban los anteriores, que ironicamente tenian voz mas robotica.
    Lamentablemente el algoritmo de proceso de notas no anda del todo bien, por lo que la voz tiene un poco de distorsion, aunque aun asi se entiende mucho mejor que los sintetizadores HR.
    No se si en esta version reducida HD1 va a caber tambien la voz femenina, el plan es que tenga las dos voces seleccionables, tampoco se si los sonidos que tengo sirven, hasta no arreglar el cambio de notas no voy a poder hacer pruebas con otra voz distinta, y ahi voy a saber si sirve.
    Luego sigue erradicar todo el codigo del sintetizador musical, que ya no va a ser secuenciado, hasta ahora los comandos musicales eran parte de la misma secuencia de la voz, todo se ejecutaba en orden de llegada, y no podian sonar voz y musica a la vez. En adelante, solo la voz va a ser secuenciada, y el sintetizador musical va a tener en la medida de lo posible 3 canales, que van a ser inmediatos, de forma similar a un chip como el SID o el AY. Esto implica que la aplicacion va a tener que enviar los comandos a cada canal en el tiempo adecuado, y no como hasta ahora que se enviaba una secuencia musical y quedaba sonando automaticamente con los tiempos configurados.
    Poder secuenciar musica es util, pero tambien lo es acceder a los canales en tiempo real, asi que mi solucion seguramente va a ser algo intermedio, estaba pensando en que el chip acepte comandos musicales similares a los de un tracker o del MIDI. Todavia falta mucho para llegar a eso, asi que hay tiempo para que vaya tomando forma.
    En cuanto arregle el error de las notas de la voz voy a hacer alguna prueba en video, tal vez controlandolo con una C64 o C128.
     

  • Solucionados los problemas iniciales con el sintetizador HD1, pude ponerme a grabar unas pruebas. Este proyecto recien empieza, asi que hay un largo camino por recorrer todavia, pero en principio es mas inteligible que los sintetizadores HR.
    En este video se le envia unos textos por RS232 desde una terminal en la PC, el primero es un texto tecnico que explica mas o menos de que se trata este nuevo sintetizador, para probar el nivel de inteligibilidad de la voz, despues siguen dos textos para probar la naturalidad de la entonacion de la voz, el primero es un fragmento del Martin Fierro, el segundo es el texto de apertura de la serie Star Trek.



    Tambien volvi a probar algunos de los programas para MSX que usan el sintetizador, pero con este nuevo chip, publique un video en este tema:  LINK


     

  • Excelente !
    Que laburito.

    Mandate un "GREETINGS PROFESSOR FALKEN" por favor !! wink
     

  • La otra vez no habiamos encontrado la version en castellano para comparar, asi que la habia hecho en base al texto en español pero la entonacion en ingles, que si esta en youtube. La arregle apenas un poco y le agregue mas espacios y eco extra para que hablara medio trabado como en la version en ingles, y el mp3 adjunto es lo que quedo.  wink.png
    Me olvidaba de aclarar, el eco sale asi del chip, eso es la captura original, no esta agregado despues.
    La secuencia que genera eso es esta:

    (z34)(n24c07vfx1)sa-lu+do-s(v4)o-s(v2)o-s(vf) pro-feso+r(v4)o+r(vf)fo+lke-n(v4)ke-n(v2)ke-n(vf).e-kstra+nio(v4)io(vf)-ju-ego-(v4)go-(v2)go-.(vf)e-l(v4)e-l(vf)u+niko-(v4)ko-(vf)mobimie+nto-(v4)to-(vf)pa+r2a-(v4)r2a-(vf)gana+r(v4)na+r(v2)na+r(vf)es(v4)es(vf)no-(n4)no-(v2)no-(vf)juga+r(v4)ga+r(v2)ga+r.(vf)

    Ahi se puede ver que el eco no es mas que repetir la ultima silaba con volumen 4 y luego otra vez con volumen 2 (el maximo es F=15). Como el cerebro no distingue si hay eco mientras habla, solo hay que simularlo en los espacios.


    ]joshua.zip[/file]
     

  • Para el que le interesa el tema, esto puede ser largo, para el que no, no hay mucho de importancia y puede ahorrarse la perdida de tiempo.  biglaugh.png
    Estuve haciendo algunas pocas pruebas, ajustando algunos fonemas para que no fueran tan drasticos, como las R o las T, pero fuera de eso tuve poco tiempo para experimentar.
    Como ando con mucho trabajo, en los ratos libres trato de resolver otros asuntos que voy a necesitar en el futuro, por ejemplo:
    - Para que la pronunciacion tenga un sonido mas continuo, hay que cambiar los comandos de acentuacion para que la entonacion de las silabas se especifiquen de otra manera. Como esta hecho hasta el momento, puede haber algunas distorsiones causadas por el hecho de que dos fonemas de la misma silaba tengan una nota distinta.
    - Hay que modificar el parser para que entienda Español escrito, mas o menos ya tengo las reglas basicas, entre ellas una que parecia complicada, que es determinar cuando una R debe ser suave o fuerte, el parser actual requiere que el usuario especifique eso. Lo mismo pasa con la C y la G.
    - Hay que implementar el sintetizador musical multicanal, totalmente diferente al existente.
    - Hay que arreglar el sintetizador musical actual, que tiene una falla todavia no detectada en la implementacion de las envolventes, esto ya viene del sintetizador HR5.
     
    Rebobinando un poco en el tiempo, yo habia definido las funciones de los sintetizadores de voz actuales cuando decidi que necesitaba un chip de sonido para mi proyecto de computadora con 6502, por eso es que incorporan un generador musical basico. Como este proyecto, si algun dia se termina, va a poder armarlo cualquiera, si hacia un chip de sonido, tenia que poder tenerlo cualquiera. Mi intencion era modificar una ROM de BASIC para que tuviera los mensajes del sistema hablados, pero si no tenia un sintetizador de voz libre esto iba a tener que quedar como opcional. La mejor alternativa era tener un sintetizador libre, y una version mejorada y compatible, comercial.
    Los sintetizadores HR4 y HR5 cumplian con estas caracteristicas, el HR4 iba a estar disponible para que cualquiera lo use como base para el sistema, y el que quisiera algo mejor podria comprar el HR5 como reemplazo directo. Sin embargo, y a pesar de que la calidad de sonido es mucho mejor en el HR5, no habia una diferencia drastica con respecto a la inteligibilidad de la voz, por lo que el HR5 no seria demasiado atractivo a menos que se quisiera una mejor calidad musical y en voces roboticas. A esto se agrega el hecho de que las envolventes del sintetizador musical nunca funcionaron bien desde la adaptacion a 15625 Hz, por lo que al final el sintetizador HR5 fue quedando abandonado.
    Volviendo a la actualidad, mis planes para el sintetizador HD1 fueron seguir usando la misma placa y chip del HR5 durante el desarrollo inicial, para luego abandonar ese hard y empezar a usar un PIC18 y conexion directa al bus del procesador. En este momento, el HD1 es totalmente compatible con el HR5, y compatible con el HR4 excepto con el comando para cargar un instrumento del usuario en RAM, ya que el HR4 usa instrumentos de 66 muestras, mientras que el HR5 usa 119, y el HD1 usa 131.
    Llegado a este punto, me encuentro con la necesidad de tomar decisiones de tipo comercial. Pensaba publicar el binario del sintetizador HR4 para que ese fuera el estandar inicial en cuanto a caracteristicas y comandos, pero mi decision de cancelar el HR5 y abandonar la compatibilidad del HD1 con los sintetizadores HR, va a dejar un abismo entre los HR4 y el futuro sintetizador, porque se van a conectar de manera diferente y en el futuro no va a servir el soft que se haga para el HR4.
    Por esta razon me parece que voy a tener que dividir el proyecto en dos ramas: primero, congelar el HD1 tal como esta, agregarle un modo de compatibilidad con HR4, y tal vez alguna funcion en los pines sobrantes del chip, para tener un sintetizador intermedio (y comercial) como actualizacion del HR4, y segundo, continuar el desarrollo del ahora HD1 en un nuevo sintetizador HD2, donde se implemente la lectura directa del Español y nuevos comandos musicales.
    En lo que ahora es el HD1, tal vez solo arregle el sintetizador musical, le agregue la capa de compatibilidad con los instrumentos del HR4, y algunos comandos para utilizar el segundo canal de audio. No creo que la poca memoria, tanto RAM como flash de este PIC de para mucho mas que eso. Va a seguir requiriendo que el texto este expresado foneticamente, tal como en los HR.
    Para implementar el procesamiento directo del Español, voy a tener que definir un lenguaje nuevo, por lo que solo va a estar disponible en los PIC18. El lenguaje de los HR estaba diseñado para adaptarse facilmente a cualquier computadora de 8 bits, por eso no distinguia mayusculas de minusculas (porque una ZX81 por ejemplo no tiene minusculas, mientras que una C64 funciona usa mayusculas o minusculas segun el juego de caracteres seleccionado) ni usaba caracteres poco comunes en esas maquinas. El nuevo lenguaje (newspeak? biglaugh.png ) va a seguir permitiendo la expansion a otros lenguajes como el ingles, cosa que estaba pensada para los sintetizadores anteriores y nunca se agrego. En los HR, se dejo reservado el caracter / para que si va seguida de una letra, se especifique un fonema/alofono del ingles, de esta manera se podria tener un texto con los dos idiomas combinados. Por supuesto, esto nunca fue implementado, pero probablemente lo haga en los futuros sintetizadores. El agregado de alofonos del ingles facilitaria que el chip hablara otros idiomas, como el Portugues y el Aleman. Pero eso todavia es ciencia ficcion.
    Lamentablemente todo lo que siga de ahora en adelante va a tender a ser incompatible con lo actual, porque los tiempos de la voz y la musica se van a medir musicalmente y no en ciclos como hasta ahora. Es probable que tambien se agregue compatibilidad con el estandar MIDI, y se implemente un reloj interno para reproducir las secuencias basandose en tiempos musicales. Habra que dejar para el futuro la posibilidad de agregar una capa de compatibilidad con el lenguaje de los sintetizadores anteriores.
    Mientras tanto, voy a tratar de que el sintetizador HD1 este terminado lo antes posible (es decir, en unos meses) con el mismo hard actual, y el HD2, o como se llame, dudo que este terminado, o al menos en beta, antes de fin de año.

     

  • *** Estado del proyecto. Version actual: alfa 4 ***

    Hubo algunos cambios, algunos internos que tienen que ver mas con la optimizacion de codigo o de recursos, y otros que afectan a la salida de audio.
    Este es un resumen de cambios entre versiones;

    Alfa 2:
    - Se agrego una rutina de suavizado de las ondas para los casos en que una onda debe terminar antes de completarse, ahora se baja progresivamente el volumen antes de finalizar. Esto elimina algunas distorsiones en determinadas combinaciones de tono y nota de la voz.
    - Se corrigieron unos errores que ya venian del sintetizador HR5, donde se asignaban varios registros (variables) a las mismas direcciones de memoria, con resultados imprevisibles.

    Alfa 3:
    - Se ajusto el volumen de algunos fonemas para que no se noten mas que el resto, ya que esto desvia la atencion o genera interferencias que hacen mas dificil entender la voz.
    - Se reemplazaron las viejas rutinas de volumen usadas internamente por el sintetizador, que existian desde el sintetizador HR1 y se conservaban porque eran suficientes para las versiones anteriores. Estas rutinas se basaban en desplazamiento de bits y no hacian mas que reducir el volumen a la mitad en cada paso, por lo que no habia pasos intermedios entre el 50% y el 100% del volumen. Para poder ajustar mejor el volumen de los fonemas, ahora se usa el mismo algoritmo que para el volumen general, que tiene 16 pasos lineales, gracias a esto se ajusto el volumen de varios fonemas a un nivel mas aceptable. Tambien se adaptaron todos los fonemas a este nuevo sistema.

    Alfa 4:
    - Se regrabaron 8 fonemas, incluyendo las vocales, y se decidio usar como base 128 muestras para los sonidos, en lugar de 131, ya que asi se simplifican las comparaciones de varias rutinas. Despues de varias pruebas, solo se reemplazaron los fonemas I, O y U, ya que del resto ninguno mejoraba el sonido existente. De todas maneras igual se rehicieron los sonidos anteriores para adaptarse a 128 muestras.
    - Se reemplazaron los 3 instrumentos musicales (bajo, organo, guitarra electrica) por versiones de 128 muestras, y con el bajo y la guitarra electrica basados en instrumentos del proyecto freepats, que es un intento de reemplazar los bancos de sonidos MIDI por versiones libres.
    - Se adapto el comando para cargar instrumentos en RAM, para que use 128 muestras, y se recalcularon las tablas de conversion de notas a frecuencias, tambien para que use 128 muestras como base.
     

  • *** Version HD1 alfa 5 ***
     
    A pesar de que casi no tuve tiempo para dedicarle al proyecto, tuve un par de dias, separados entre si, en los que primero tuve un gran fracaso, y luego un gran exito. En el resultado final, lo unico que se nota es que ahora el sintetizador no pierde la potencia de la voz cuando se usan notas mas bajas, que son las que mas naturalmente suenan. Con estas mejoras, me parece que el sintetizador de voz quedaria en un estado casi final, faltando nada mas arreglar los problemas del sintetizador musical, y agregar algunas funciones de compatibilidad con el HR4.
    Atencion: El que no quiera que le explote la cabeza con una historia completa del desarrollo, necesaria para entender lo que cambia en la ultima version, huya ya mismo, contento con saber que hay un avance mas. Al que le interese un poco de los avances que fui logrando en las diferentes versiones y como todo cierra al final, quiera saber como funciona internamente el cambio de tono y nota de la voz, o simplemente esta aburrido y se aburre menos leyendo textos interminables (???), continue con la historia abajo.

    Version larga de la historia:

    Hace unos años, cuando estaba haciendo el sintetizador HR2, vi que necesitaba cambiar el tono de la voz para poder acentuar las silabas y expresar por ejemplo interrogacion. Ya en el HR1, quien sabe por que, se me ocurrio ajustar la voz a la nota musical mas cercana, algo que no tenia mucho sentido ya que era un sintetizador de un solo tono. Sin embargo, esta decision influencio a todas las versiones posteriores, ya que todos los parametros de tono de voz se ajustan en semitonos. Esto tambien hizo que las mejoras se compararan tambien en terminos musicales, como por ejemplo el rango de la voz en octavas, en lugar de usar porcentaje de frecuencia o algun otro tipo de medicion. Y por supuesto, tambien inicio una carrera paralela para tratar de que el sintetizador cantara mejor, como un medio para lograr una mayor naturalidad en la voz.
    Como prueba del rango de notas de la voz, use el himno nacional argentino, por una razon de evitar problemas de copyrights en youtube, y ahi vi que alcanza con una octava para cantar la mayoria de las cosas.
    Cuando empece lo que ahora es el sintetizador HD1, dije que solo se iba a poder cambiar el tono (tipo) de la voz, pero no la nota, porque a pesar de tener sonido de mejor calidad y naturalidad, al basarse mas en sonido digitalizado se limita el proceso que se le puede aplicar a las ondas para cambiarles la nota. Sin embargo, y teniendo en cuenta que con un rango de una octava alcanza para la mayoria de las cosas, decidi incorporarle el algoritmo de cambio de nota utilizado en las primeras versiones del sintetizador HR2, y eso, con mucho mas de tecnica y calidad que entonces, es lo que estaba usando el HD1 hasta la version alfa 4.
    A ver si puedo explicar la evolucion de los algoritmos sin entrar en detalles muy tecnicos. Como dije antes, el sintetizador HR1 tenia un solo tono de voz, en el HR2, por una necesidad de incorporar una minima expresividad a la voz (para hacer acentos) se empieza a probar algoritmos de cambio de nota a las ondas. Inicialmente se probo con un algoritmo muy simple, que consiste en agregar silencio a un ciclo de la onda, de forma tal que el tono de la voz es el mismo (suena como la misma persona), pero la nota a la que sale la voz es menor cuanto mas silencio se agregue.
    Cuales son las limitaciones de este metodo? La primera es que solo se puede bajar la nota de la voz, no subir, porque esto requeriria que la onda fuera mas corta que la original, y la segunda es que a medida que se baja la nota hay mayor porcentaje de silencio por ciclo, llegando al punto en que al bajar una octava, cada ciclo de la onda tiene una mitad de sonido y la otra de silencio, provocando que el volumen caiga a la mitad. Si bien esto ultimo suena bien para voces roboticas, hace que la voz se entienda un poco menos. La primera limitacion tambien implica que las ondas de la voz tienen que estar capturadas a la maxima nota que queremos emitir, ya que solo se puede bajar la nota de la voz.
    Vistas las limitaciones de este metodo, desarrolle otro mas estandar, basado en "deslizarse" por la onda, es decir reproduciendola a mayor o menor velocidad para cambiar de nota. Esto resulto mucho mejor, pero despues de meses de prueba y varias confirmaciones con los años, vi que por lo general al cantar la voz se mantiene con el mismo tono, y solo cambia la nota. Con el metodo de variar la velocidad de reproduccion, se cambia exitosamente la nota, pero tambien cambian las componentes de la voz, por lo que solo sirve en rangos muy chicos, como +-3 semitonos, porque al variar en una octava o incluso menos, ya suena como una persona distinta. En definitiva, este metodo permitia cambiar la nota sin perder volumen, pero no servia para cantar porque parecia que iba cambiando de persona. Y el primer metodo servia para cantar porque se reconocia siempre la misma voz, pero tenia un rango muy limitado si no queriamos perder volumen.
    Como se podia resolver esto? Comenzando un nuevo sintetizador, el HR3, que intentaria combinar estos metodos para tener lo mejor de los dos. Y como me fue con el HR3? Fue un rotundo fracaso, tanto que lo abandone para empezar un metodo nuevo en el HR4. Lo que intentaba hacer el HR3 era variar la velocidad de reproduccion para cambiar el tipo de la voz, y una vez elegido eso, usar el metodo de agregar silencio a los ciclos de las ondas para bajar la nota de la voz. Eso se logro. Quedaban para resolver dos cosas, la primera era lograr emitir notas mas altas que la de la onda original, acortandola como fuera necesario para mantener el tipo de voz pero a la vez lograr una nota mayor, y la otra era encontrar una solucion a la perdida de volumen al bajar la nota. El primer problema se resolvio, pero ya que las ondas se cortaban sin ningun tipo de suavizado, esto podia generar bastante distorsion. El segundo problema tuvo algunos ensayos que aumentaron la complejidad del programa al punto tal que al final quedo sin terminar.
    Buscandole solucion a estos problemas, vino a mi mente una idea inspirada en los primeros metodos de sintesis de voz que use en Commodore 64, donde generaba la voz usando formantes y una envolvente, para resumirlo, por cada vocal generaba dos ondas triangulares con las frecuencias correspondientes al fonema, y luego se le aplicaba una envolvente, que determinaba la nota de la voz. Y si pudiera recomponer el sonido original antes de la "envolvente" que le aplica la boca para lograr la voz que escuchamos? Si pudiera hacer eso, podria rellenar el silencio continuando la onda original. Cuando capturamos la voz con un microfono, lo que se ve es un sonido complejo modulado en volumen por una envolvente similar a una triangular, que determina la nota sin cambiar el tipo de voz. Si tengo esas ondas originales, reconstruyendo lo que sigue cuando el volumen baja a cero, podria emitir ese sonido y luego aplicarle yo la envolvente de la frecuencia que quiera, sin que quede silencio entre cada ciclo. Basicamente eso es lo que hacen los sintetizadores HR4 y HR5, utilizan ondas base, en parte originales, un poco inventadas, un poco imaginadas, a las que se les aplica una envolvente despues para obtener una onda parecida a la que uno capturaria de una voz real.
    Claramente, gran parte del trabajo de los HR estaba en las ondas, el resto se lograba acelerando o retrasando la velocidad de las ondas base y la envolvente, para poder variar de forma independiente tanto tipo como nota de la voz. Estos sintetizadores podrian ser los mejores, si tan solo tuvieran las ondas adecuadas, que no puedo capturar, y aunque hacen un trabajo bastante bueno, no pueden competir con la claridad de un sintetizador con voz digitalizada como el HD1.
    En cierto punto del desarrollo del HR4, tuve curiosidad de saber si la limitada inteligibilidad de la voz tenia que ver con la calidad de la frecuencia de muestreo del sonido y de la cantidad de muestras de las ondas, lo que me llevo a desarrollar dos proyectos, por un lado una simulacion del sintetizador por soft, con ondas calculadas para 44KHz y 16 bits de resolucion, implementado en C para Linux, y por otro lo que termino siendo el sintetizador HR5, que usa para las ondas 119 muestras en lugar de 66, y 15625 Hz de muestreo para el audio en lugar de 8680 Hz. Despues de muchas pruebas, la conclusion fue que si bien mejoraba con mas muestras y mejor calidad de sonido, la mejora no justificaba la diferencia drastica de recursos, teniendo en cuenta que 15625 Hz es mas de lo necesario para representar bien la voz. Estos resultados decepcionantes hicieron que el HR5 tuviera un progreso muy lento, ya que estaba condenado a ser solo una mejora leve del HR4, sin una gran diferencia en cuanto a inteligibilidad.
    Y asi llegamos hasta el HD1, donde decidi basarme en un sintetizador que nunca implemente, basado enteramente en fonemas digitalizados. Este sintetizador iba a ser totalmente diferente de los otros, ya que los fonemas tendrian duracion fija, y tendria un proceso de aceleracion/desaceleracion para realizar los cambios de nota, limitados solo a los acentos, por lo que solamente se necesitaba generar 3 notas. Sin embargo, estas eran las expectativas cuando diseñe ese sintetizador hace años, pero mis desarrollos desde entonces me daban instantaneamente dos posibilidades que no tenia originalmente: la duracion de los fonemas ya no tendria que ser fija, y el tipo de la voz podria variar. En eso me apoyaba cuando dije que solo se podria cambiar el tipo de voz y no la nota.
    Como dije al principio, decidi usar el primer metodo de cambio de nota usado en el HR2, agregando silencio para bajar la nota, y luego el metodo del HR3, cortando la onda para lograr notas mayores. Es decir que de a poco estaba reintentando lo que no pude resolver en el sintetizador HR3, pero esta vez con mas recursos tecnicos que antes. En el HR3 habian quedado dos problemas pendientes, el primero era el corte abrupto de las ondas que generaba distorsion, eso se resolvio facilmente agregando un algoritmo de suavizado, el segundo era el problema de "rellenar" el silencio cuando se bajaba la nota de la voz. Esto ultimo es lo que quedo resuelto en la version alfa 5, aplicando una de las tantas pruebas de algoritmos que intente en el HR3 y que con menos experiencia no pude resolver en ese momento.
    Que se logra con este ultimo cambio? Que un sintetizador basado en sonido digitalizado pueda alcanzar facilmente un rango de 2 octavas hacia abajo, cuando antes apenas alcanzaba una y con perdida de calidad.
    Lo curioso de esto es que esta iba a ser una version reducida del sintetizador basado en sonido digitalizado, ya que solo tiene 8 fonemas digitalizados y el resto es sintetizado, no esperaba que tuviera la calidad que tiene ni que los fonemas sintetizados en algunos casos funcionaran mejor que sus versiones digitalizadas (ironicamente, lo sintetico anda mejor que lo real). Hice una prueba con una captura de voz del HD1, reemplazando en un programa de audio algunos fonemas sintetizados por los que iba a usar en el futuro sintetizador digitalizado, y comprobe que los fonemas sinteticos en muchos casos suenan mas claros que los reales.
    Otra cosa interesante es que al resolver en el HD1 los problemas del HR3, se pueden aplicar los progresos retroactivamente a los sintetizadores anteriores, ya que los HR2 y HR3 pueden verse como versiones limitadas del HD1, porque sus motores de sintesis de voz tienen mas en comun con el HD1 que con los HR4 y HR5. Lo que implica esto, es que ahora podria tener los sintetizadores HR4 y HR5 con ondas basadas en las del HD1, y los algoritmos ahora resueltos del HR3, lo que seguramente le daria mayor calidad que el motor de sintesis actual de los HR, aun cuando solo usarian un 15% de los sonidos del HD1. Tal vez haga la prueba solo por curiosidad, pero no creo que eso llegue a distribuirse, probablemente haga clones llamados HR6 y HR7 y solo me limite a probar como suenan, para luego archivarlos.
    Y a que me referia al principio con lo de un gran fracaso, antes de un gran exito?
    Resulta que en un momento, frustrado por la perdida de volumen en las notas bajas, y en un impulso de esos radicales que me hacen empezar una nueva version de sintetizador, decidi rehacer las ondas del sintetizador HR5, utilizando esta vez metodos mas cientificos que los que utilice en su momento. Lo primero que hice fue tratar de deducir la forma de la envolvente que define la nota de la voz, para esto capture mi voz e intente emitir varias notas para comparar los cambios, esto me confirmo dos cosas: que la teoria sobre la que se basan los HR4 y HR5 es correcta, la voz se comporta exactamente como pensaba, y la segunda, que si fuera cantante me moriria de hambre, porque de 5 o 6 "notas" (lo digo asi porque no deben estar ni cerca de notas reales) supuestamente diferentes, habia solo 2 o 3 frecuencias distintas.
    Una vez verificado que la onda base (lo que suena dentro de la envolvente) se mantiene casi igual en distintas notas, me puse a observar varias grabaciones que hice, tratando de deducir una forma de envolvente mas aproximada a la realidad que la simple onda triangular que usaba. Comparando varias notas y distintas vocales, obtuve una onda modelo, que luego diseñe en GoldWave usando la generacion de ondas a partir de funciones. En lugar de usar simples pendientes, queria algo hecho con partes de ondas senoidales, pero al complicarse el calculo y no tener paciencia para investigarlo mejor, decidi usar lineas y luego aplicar filtros para darle el suavizado requerido.
    Una vez lograda la envolvente buscada, el siguiente paso fue hacer un programa en lenguaje C (lo que tenia a mano en ese momento) para aplicar una envolvente inversa a las ondas (desenvolverlas?), de forma de lograr algo cercano a las ondas originales, para que luego al aplicarles la envolvente se obtuviera algo cercano a lo real. Lo del programa en C se termino abruptamente cuando se me ocurrio que el propio GoldWave permite hacer funciones entre las muestras de distintas ondas cargadas, por lo que luego de un rato de experimentar pude hacer lo que pretendia. El trabajo resulto ser mas complicado de lo que parecia, ya que no era tan sistematico como pense en un principio, porque para aplicar siempre la misma envolvente habia primero que normalizar las ondas, aplicandole filtros y otros ajustes, que luego requerian retoques manuales. En definitiva, que estuve horas para lograr hacer solo el fonema A, o mas bien 1/6 del fonema, pero justo lo necesario para el HR5, y el resultado fue decepcionante. Si bien sonaba perfecto y casi no tenia diferencia cuando se aplicaba la envolvente a la nota original de la onda, al aplicarle una envolvente con nota distinta no respondia como debia, sonando a veces en una frecuencia distinta, y otras agregando distorsion. No me puse a investigar demasiado la razon, la respuesta era simple: las ondas no mejoraban lo que ya habia en el HR5, y el trabajo que requerian hacian que tuviera que dedicarle un dia a rehacer cada fonema, por lo que tenia mas de una semana de trabajo intensivo por delante.
    La conclusion, como dije al principio, es que la idea fue un gran fracaso.
    Sin embargo, al recomponer las ondas originales, me fui dando cuenta de la forma que tenian, cosa que no habia visto en detalle hasta entonces, porque antes no habia visto patrones que ahora se veian claramente, y eso me quedo en la mente hasta un par de dias despues, cuando recorde los intentos hechos en el HR3, y de pronto estaba probando varios metodos en GoldWave, simulando lo que haria el sintetizador, hasta que di con el adecuado. Y ahi quedo eliminada la ultima limitacion del HD1.
    Si alguien llego hasta aca, espero que haya aprendido algo, del desarrollo de estos proyectos, no de teoria de sintesis de voz, porque la mayoria de lo que se al respecto lo se por pura observacion, y me doy cuenta con los años de cuanto esfuerzo desperdicie por no saber, o de que tan acertado o errado estuve en el pasado con las cosas que hacia. Lo positivo de estos dias, mas alla de haber completado los algoritmos que me faltaban en el HD1, es que al final el HR3, que hasta ahora era un experimento fallido, ahora tiene su lugar en la historia, aunque sea en la pequeña historia de mis desarrollos. Y el punto de vista negativo, es que visto desde ahora, si hubiera dedicado mas tiempo a hacer andar el HR3, tal vez no habrian existido los HR4 y HR5, y habria llegado al estado actual mucho antes.  biglaugh.png
    Pero tal como paso con el HR3, probablemente el dia que encuentre las ondas perfectas, los HR4 y HR5 pasen de nuevo al frente. wink.png
     

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