Sintetizador de voz y generador de sonido

Proyectos de hardware con sus esquemáticos y si llevan software en fuente

Moderadores: cacharreo, Fundadores

Reglas del Foro
Aquí solo tienen cabida proyectos de hardware que incluyan siempre al menos sus esquemáticos para poder reproducirlos si llevan componentes electrónicos, y si es posible los ficheros del programa en que se hacen, los diseños de las placas, los gerber, etc. Si llevan algún tipo de software asociado debe estar diponible el código fuente

Para los que no cumplen estas condiciones se debe postear en el foro de proyectos generales.
Responder
pastbytes
Le gustan las llamas
Le gustan las llamas
Mensajes: 95
Registrado: 14 May 2016, 09:12
Ubicación: Patagonia Argentina
Been thanked: 48 times
Contactar:

Sintetizador de voz y generador de sonido

Mensaje por pastbytes »

Alguno puede haber visto parte de este proyecto en otros sitios, es un proyecto que abarca muchas versiones y plataformas distintas, por lo que cada implementacion se fue tratando en los foros que eran mas convenientes de acuerdo a la plataforma.
Este desarrollo arranca en 2005 cuando empiezo a hacer experimentos con sintesis de voz en un microcontrolador PIC, al principio los resultados fueron mediocres pero lo suficientemente prometedores como para continuar, aunque el desarrollo fue muy erratico y le dedicaba poco tiempo. Esto recien cambio alrededor de 2010, cuando lo rescato del olvido y me propongo hacer una segunda version practicamente desde cero, desde entonces avanza, aunque no siempre todo lo rapido que quisiera. En 2011 se produce un gran salto cuando decido que el sintetizador va a ser controlado por RS232 y con un lenguaje ASCII fonetico, de manera de poder adaptarse a distintas pronunciaciones y que pudiera ser utilizado desde una terminal serie. Esta segunda version es la que hoy se llama HR2, y con diferencias de calidad y de funciones que se fueron agregando, es mas o menos la base de las versiones actuales.
Antes de continuar con la historia, explico en que consiste lo que esta funcionando hoy. Actualmente hay 3 sintetizadores en desarrollo: HR4, HR6 y HD1.
HR4 y HR6 estan implementados con un PIC16F648A de 18 pines, corriendo a 20MHz, el PIC recibe los comandos desde una entrada serie a 4 velocidades seleccionables por jumpers: 1200, 9600, 19200 o 57600 bps. Estas velocidades fueron elegidas pensando en soportar una variedad de ordenadores/controladores, por ejemplo 1200 bps es la maxima velocidad a la que puede conectarse un Commodore 64 con las rutinas serie de la ROM, 9600 bps es la maxima velocidad normalmente disponible en un puerto serie de PC XT, 19200 bps es la maxima velocidad del RS232 de la Interface 1 de Spectrum, y 57600 bps es la maxima velocidad estandar que puede manejar el PIC con ese cristal (la maxima absoluta es de alrededor de 76Kbps). El sintetizador puede funcionar con una entrada serie TTL, un filtro RC (una resistencia y un capacitor) para la salida de audio, el cristal de 20MHz y dos capacitores de 22pF para el oscilador. El resto son cables para configurar los jumpers, y opcionalmente se pueden conectar leds para observar el estado de funcionamiento.
Hasta el momento pude conectar el sintetizador a Commodore 64/128 (por el puerto del usuario), Commodore Plus/4 (por el puerto del usuario), MSX (por el puerto de joystick), Epson HX-20 y PC (por RS232).
El hard necesario para conectarlo depende de la plataforma, por ejemplo este es el esquema para la conexion a MSX:
picsynthmsx2.gif
El sintetizador esta diseñado para solo necesitar una entrada serie, la salida serie solo es util en tres casos, el primero es cuando arranca, ya que reporta el nombre del sintetizador y la version, el segundo es cuando se controla el chip desde una terminal serie, activando el jumper de eco devuelve cada caracter recibido, una opcion util para que podamos ver lo que tipeamos en la terminal. Y el tercero es cuando se estan probando secuencias de comandos, ya que el chip devuelve un asterisco por cada caracter no valido, lo que se puede usar para depuracion.
El chip procesa los comandos apenas los recibe, y tiene un buffer interno, lo que permite enviarle una frase a alta velocidad y luego dejarlo procesando sin intervencion del ordenador. La salida PLAYING indica si se esta reproduciendo sonido, aunque sean comandos de silencio, esto es util para sincronizar el programa con la reproduccion de sonido. Si el buffer se llena, se activara la salida CTS, indicando esto. Si se quiere usar esta caracteristica y se conecta el chip por RS232, debera configurar el puerto para usar RTS/CTS. En el caso del montaje para el MSX, se tiene disponibles estas señales en el puerto de joystick.
En este video se puede ver como se utiliza:



Se prueba una aventura conversacional, que como se ve sincroniza la impresion del texto con la voz, lo mismo pasa con el juego R.E.C, que originalmente utilizaba la orden PLAY del MSX-BASIC para generar los sonidos, y tambien para saber cuando se terminaba de reproducir cada nota, Mis modificaciones al programa reemplazan las ordenes PLAY por llamadas a una rutina escrita en asm (el driver) que simula un puerto RS232 a 19200 bps utilizando la salida en el puerto de joystick, y se encarga de enviar los comandos de nota e instrumento al sintetizador. Tambien, en lugar de usar PLAY para saber cuando se termina la reproduccion de sonido, se lee la entrada correspondiente en el puerto (PLAYING). De esta manera, el juego esta sincronizado con el chip, y no necesita temporizar nada.
El sintetizador dispone de 3 instrumentos musicales incluidos (bajo, organo y guitarra electrica), mas un generador de ruido, y la posibilidad de cargar un instrumento definido por el usuario en RAM.
La salida de audio en estos sintetizadores es PCM de 8 bits, con un muestreo de 8680 Hz, los instrumentos musicales se definen como "wavs" de 66 muestras. No se puede reproducir mas de un sonido a la vez, puede ser voz, ruido o cualquiera de los 4 instrumentos posibles.
El generador de sonido fue un agregado de ultimo momento, y por lo tanto sujeto a las limitaciones de memoria de programa, se tuvo que compartir el codigo para cambiar de nota musical, para ajustar la duracion del sonido, y para generar envolventes, por lo que no es tan simple de utilizar.
En este video se pueden ver las caracteristicas del generador de voz y sonido, en este caso el chip esta controlado por el RS232 de la Interface 1 en un CZ Spectrum 48K:



El sintetizador HR4 tuvo algunas mejoras desde que se grabo el video, pero esa es la calidad general a 8680 Hz.
La desventaja de la version para Spectrum es que requeria una conexion RS232, y eso no estaba disponible en un 48K a menos que se tuviera una interfaz con ese puerto, como la IF1.
Pero eso quedo resuelto hace unos dias, cuando logre convertir la salida MIC en un puerto RS232, con ayuda de un pequeño amplificador y una rutina en asm, que envia datos a 19200 bps.
En este video se puede ver funcionando, con el sintetizador mas avanzado, el HD1:



El esquema de conexion en este caso es el siguiente:
picsynthzx1.gif
Ya que en este caso no tenemos retornos de las lineas PLAYING o CTS, el agregado de esos leds es fundamental. En todas las pruebas que hice con Spectrum, se envian los comandos a ciegas, es decir sin saber si el buffer esta lleno, para esto hay que agregar pausas al programa para asegurarse de no enviar todo el texto junto. Tengo que ver si es posible implementar algo con la entrada EAR para que el Spectrum pueda detectar alguna de esas dos señales.
Como funciona la aventura conversacional en el Spectrum? Con limitaciones, ya que al no poder detectar cuando finaliza la reproduccion de sonido, debe temporizarse todos los envios:



Para finalizar, por ahora, porque este tema es largo, dejo un video del juego donkey.bas programado por Bill Gates, corriendo en un Fujitsu Poqet PC (un XT con NEC V30) y luego en DOSBox, con dos sintetizadores distintos, HR6 y HD1.
Solo sirve para mostrar el uso de efectos de sonido en un juego, el juego de Bill no da para mucho. :D

No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Avatar de Usuario
pachu003
El infierno es su lugar
El infierno es su lugar
Mensajes: 155
Registrado: 28 May 2014, 15:42
Ubicación: Puertollano, Ciudad Real
Has thanked: 2 times
Been thanked: 2 times
Contactar:

Re: Sintetizador de voz y generador de sonido

Mensaje por pachu003 »

una chulada, eso de ver "hablar" al spectrum.

Molaría verlo en vivo y en directo.
Imagen
Avatar de Usuario
Heckler
Aspirante a demonio
Aspirante a demonio
Mensajes: 445
Registrado: 19 May 2014, 17:26
Ubicación: Valencia
Been thanked: 6 times

Re: Sintetizador de voz y generador de sonido

Mensaje por Heckler »

Oh! Juegos de Guerra!!!
Avatar de Usuario
sinclair200 España
Moderador
Moderador
Mensajes: 9997
Registrado: 28 Mar 2014, 18:25
Ubicación: Madrid
Has thanked: 8 times
Been thanked: 177 times

Re: Sintetizador de voz y generador de sonido

Mensaje por sinclair200 »

Heckler escribió:Oh! Juegos de Guerra!!!
"Hola profesor....desea jugar a una partidita de ajedrez........"
Imagen
Z80 INSIDE.........
WANTED:…………. CPC 6128 british
Avatar de Usuario
flopping
Fundador
Fundador
Mensajes: 9973
Registrado: 29 Mar 2013, 15:26
Ubicación: Valencia
Been thanked: 124 times
Contactar:

Re: Sintetizador de voz y generador de sonido

Mensaje por flopping »

Eso mismo que estas haciendo ya hace bastantes años que existe, con el chip SPO256, que es el que usan aparatos como el uSPEECH de Spectrum, commodore, etc....

Imagen
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide.
(C) 1982-2024, 42 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".

Mi juego, que puedes descargar desde aqui
pastbytes
Le gustan las llamas
Le gustan las llamas
Mensajes: 95
Registrado: 14 May 2016, 09:12
Ubicación: Patagonia Argentina
Been thanked: 48 times
Contactar:

Re: Sintetizador de voz y generador de sonido

Mensaje por pastbytes »

Bueno, todo lo que hay habla en ingles, el SP0256-AL2 es el mas accesible de los clasicos simplemente porque hay mas desarrollos hechos con ese, pero no es simple de usar, usa alofonos y comandos binarios para controlarlo. Si se ve el manual, incluye un breve diccionario con palabras comunes del ingles y la secuencia de alofonos necesaria para pronunciarlas correctamente, pero para el resto de las palabras hay que probar y por supuesto conocer bien el lenguaje.
Hay un sintetizador relativamente nuevo, hecho con un PIC (parece que el tampoco se dio cuenta que ya existia eso), llamado SpeakJet, que recibe los comandos en serie, me parece que soporta RS232 y no se si SPI tambien. Ese sintetizador es comercial y se usa por ejemplo en el AtariVox, que se conecta en un puerto de joystick y le da voz y sonido a la Atari 2600 y la Vectrex, en algunos juegos hechos para aprovechar la placa.
Para el que no lo conoce, asi suena el AtariVox, que como dije adentro tiene un SpeakJet:



En mi opinion, el principal inconveniente es que habla ingles, lo que lo hace poco apto para dar voz a una aventura conversacional, aunque para juegos mas simples probablemente se lo pueda acercar a pronunciar Español, ya que se usarian frases cortas. Lo bueno de ese chip es que tiene un generador de sonido de 6 canales, algo que todavia no tiene mi proyecto.
El otro problema es que cuesta 25 dolares (en algun otro lado creo que lo vi a 18) solo el chip, por eso es que mi intencion fue mantener el uso de recursos al minimo para usar un PIC mas barato, aunque no tuviera tantas opciones musicales.
Mi desarrollo estuvo centrado en dar mas opciones para la voz, por ejemplo que pudiera cantar, exclamar, preguntar, y que pudiera tener distintos tipos de voz o configurarla como natural o robotica.
En este video se puede ver una demostracion con el sintetizador HD1 controlado desde una terminal, primero tipeo y el chip habla eso en tiempo real, y luego le envio un texto preescrito con la demostracion. Como el chip tiene activada la funcion eco, devuelve lo que recibe por el puerto serie, y eso es lo que se va viendo escrito en la terminal. La salida de audio del chip esta conectada a la entrada de linea de la tarjeta de sonido, y la monitoreo usando el editor de audio GoldWave, que en el video solo se usa como una especie de osciloscopio, para ver las ondas de salida.



La diferencia importante con respecto a otros sintetizadores de voz es que el mio usa comandos en ASCII y un lenguaje fonetico, esto lo hice asi porque la forma de pronunciar las palabras puede variar segun el pais o la region, lo mismo que la entonacion. Y los comandos en ASCII facilitan la escritura y depuracion de las frases a enviar al chip, por ejemplo la primera parte del texto de prueba enviado al chip es esta:

(z2bn1bc05x3vf)
salu+dos,esta+n eskucha+ndo labersio+n a+lfa si+nko,delsintetisado+r debo+s a+che de+ u+no-.
estesintetisado+r inkorpo+r2aun'nue+bomoto+r de'jener2asio+n dela'bo+s, kekombi+na unsintetisado+r i+b'rido komoel a+che ere si+nko,
konunsintetisado+r basa+doensoni+do dijitalisa+do-, logra+ndoasi+ unamejo+r intelijibilida+d dela'bos.


Esas son solo 4 lineas de 100, para el que quiera ver el texto completo, adjunto el archivo prueba2.txt que es el que se envia desde la terminal al chip.
Se puede ver que es Español fonetico, tiene en la primera linea los comandos para ajustar el tipo (z2b) y nota (n1b) de la voz, la velocidad (c05), la expresividad (x3) y el volumen (vf). Los comandos de configuracion solo se procesan dentro de los parentesis. Otra cosa que se puede apreciar es que hay signos + y -, y que no hay muchos espacios entre palabras, esto ultimo es porque asi es como hablamos, solemos pegar 2 o 3 palabras juntas al hablar. El sintetizador permite seleccionar todo en base a notas musicales, los comandos de tipo y nota de la voz, z y n, van seguidos del numero de octava, de 0 a 6, y luego el numero de semitono, de 0 a b (0 a 11 en hexadecimal). Una vez seleccionada la nota de la voz, hay dos comandos que la modifican temporalmente, pero solo para las vocales, estos comandos son + y -, que colocados luego de una vocal, suben o bajan la nota musical de esa vocal en la cantidad de semitonos configurados con el comando de expresividad x. En el ejemplo se usa x3, y para la nota, z1b, esto es octava 1, semitono 11, nota "si" o B1. Si enviamos la vocal A sonara en la nota B1, si enviamos A+, se sumaran 3 semitonos (por el comando x3) y la vocal sonara en la nota D2, y si enviamos A-, se restaran 3 semitonos y la vocal sonara en G#1. Si configuramos la expresividad en 0 (x0) no se sumara ni restara nada, y la frase sonara monotona, como voz robotica, sin expresion. Eso es lo que se prueba en el video cuando se envia el texto de las leyes de la robotica, el mismo texto con dos parametros distintos de expresividad. El comando + se suele usar para los acentos, el - se usa por ejemplo en la vocal de la ultima silaba de una oracion, para que no suene como una frase sin terminar.
Como habia comentado antes, en el año 2011 hice mi primer sintetizador de voz usable, el HR2, y digo usable porque antes de eso solo probaba frases codificadas en el programa, y ahora se podia controlar mas facilmente por RS232. Ese mismo año se me ocurrio volver a programar en asm de 6502, y la excusa fue portar una version reducida del HR2 para que funcionara con el chip de sonido del C64 sin agregados de hard, de ahi salio el sintetizador TAV64 (TAV por Texto A Voz), que ocupa 4K incluyendo el parser para un lenguaje fonetico basado en el del HR2, aunque con algunas minimas diferencias. Como para entonces ya habia decidido dejar de acumular equipos que no usaba, y empezar a usar los que ya tenia, me parecio buena idea incursionar en la programacion en asm de Z80, y asi fue como porte el sintetizador TAV al Z80, y la generacion del sonido PCM de 4 bits al AY-3-891x y al beeper. De todo esto quedaron versiones de TAV para Commodore 64/128, Spectrum 48K, Spectrum 128K (AY), MSX, Timex Sinclair 2068, e incluso ZX81, en una version emite la voz por la salida MIC, en otra aprovecha un AY en una interfaz compatible con ZonX.
Ya que soy malo programando en asm de Z80, esas versiones pueden verse mas como un ejercicio de programacion portable, el codigo no esta optimizado ni ajustados los tiempos de ejecucion, pero funcionan, y se pueden descargar desde mi sitio para probarlos: http://www.pastbytes.com/apps/tav/descargas.html
Este es un video muy viejo probando la version para C64:



Y en este otro se ve funcionando la version para Spectrum 128K, usando el AY-3-8912:



Mi plan es rehacer esos sintetizadores TAV, ordenando el codigo, que si bien esta comentado se puede mejorar, y tal vez arreglando algunos fonemas que ahora haria diferentes despues de mas de 4 años de progreso. Luego publicaria el codigo fuente de todas las versiones, y el binario del sintetizador HR4, para que el que quiera pueda armarse una placa con PIC, o usar las versiones por soft en sus propios programas.
En algun momento pense en portar el sintetizador HR4 a un PIC mas grande con interfaz para el bus de Z80 o 6502, pero estos modelos de PIC tienen un minimo de 40 pines, y esto hacia necesario agregarle mas funciones para aprovechar el hard sin usar. Todo esto solo hizo que se atrasara esa version, pensada para poder usarla desde un juego en asm, perdiendo el menor tiempo posible para enviar los datos al chip. Pero despues de mucho experimentar, llegue a la conclusion de que no se necesita enviar tanta informacion al chip, que tal vez bastaria con 50 o 60 caracteres por segundo para la mayoria de los usos durante un juego. Lo que si habria que reducir es la cantidad de tiempo en que se envia un byte, por lo que decidi experimentar con codigo para enviar a 57600 bps en un Commodore 64, y no solo pude enviar, sino tambien recibir. En este video se puede ver que recibo un programa de 46K en alrededor de 8 segundos:



Tanto la rutina para enviar a 57600 bps (que esta probada con el sintetizador aunque no hice ningun video al respecto) como la rutina para recibir, requieren apagar la pantalla, pero si se ejecutan apenas comienza el borde inferior de la pantalla, pueden procesarse sin interrupciones del chip de video. El envio de un byte a esa velocidad toma 170 microsegundos, si se implementa un buffer de envio y se envia solo un byte en cada interrupcion de video (50 o 60 veces por segundo segun si el C64 es PAL o NTSC), deberia poder integrarse el sintetizador en un juego sin perder demasiado tiempo. Lo mismo podria hacerse en Spectrum o MSX si se implementan rutinas a 57600 bps, algo que todavia no hice.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Avatar de Usuario
dandare
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3718
Registrado: 09 Feb 2016, 15:09
Ubicación: I Register
Been thanked: 6 times

Re: Sintetizador de voz y generador de sonido

Mensaje por dandare »

Hola Pastbytes, bonito proyecto.
¿Tienes el código pic disponible en algún sitio?
Un saludo
Imagen
Imagen
Jason_rg
Demonio tercer orden
Demonio tercer orden
Mensajes: 757
Registrado: 16 May 2015, 20:32
Ubicación: Guipuzcoa
Has thanked: 2 times
Been thanked: 18 times

Re: Sintetizador de voz y generador de sonido

Mensaje por Jason_rg »

Hola Pastbytes

Ya mola este proyecto.
Como comenta dandare, sería posible el fichero para grabar el PIC? Así como la configuración para su programación.
En cuanto a la salida del altavoz, que impedancia debería tener éste?

Saludos
Avatar de Usuario
tacha Uruguay
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3164
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Has thanked: 52 times
Been thanked: 35 times
Contactar:

Re: Sintetizador de voz y generador de sonido

Mensaje por tacha »

Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero! Lo quiero!
66 6C 6F 70 70 69 6E 67 20 6D 61 73 63 61 20 50 30 6C 6C 34 / 6D 61 73 20 63 6F 74 69 6C 6C 61 20 73 65 72 E1 73 20 74 75 20 49 7A 61 72 6F 20 3A 70
pastbytes
Le gustan las llamas
Le gustan las llamas
Mensajes: 95
Registrado: 14 May 2016, 09:12
Ubicación: Patagonia Argentina
Been thanked: 48 times
Contactar:

Re: Sintetizador de voz y generador de sonido

Mensaje por pastbytes »

Tengo una version preliminar del sintetizador HR4, pero quiero hacerle unos cambios para que se pueda cambiar facilmente el mensaje hablado en el arranque y alguna otra modificacion a los comandos, podria publicarlo como esta, pero eso me puede condicionar la compatibilidad con las futuras versiones. En este momento hay poca gente en Argentina y España que tiene chips grabados, con la v1.0 o alguna beta anterior, y ya esos chips requieren actualizacion para los comandos que se agregaron posteriormente. Lo que vaya a publicar ahora se queda como el estandar minimo del lenguaje, y si algun dia hago algun cambio drastico voy a tener que recurrir a la emulacion de esos comandos, pero la idea es que las futuras versiones usen las mismas secuencias de comandos de esta version, mas los nuevos comandos de esas versiones.
Principalmente lo que me preocupa ahora es agregarle un metodo de reporte de version, para que un juego pueda saber de que caracteristicas dispone, y todo esto se tiene que hacer de una manera practica para que un ordenador de 8 bits lo pueda chequear. Por ejemplo todos estos sintetizadores envian un texto indicando modelo y version en el arranque, pero lo hacen en un formato "humano", aunque con marcas insertadas para que un programa pueda identificar esa informacion mas rapidamente. Sin embargo, esto se hizo para hard como un arduino, o para trabajar a bajas velocidades, donde el equipo controlador pueda almacenar el texto recibido y luego procesarlo. Pero si pensamos en un juego que emite y recibe a 57600 bps, ya no es posible procesar ese texto, ademas del hecho de que en muchos casos el sintetizador arranca de forma independiente al ordenador, o si arranca simultaneamente (como en el MSX) no hay driver cargado para recibirlo, y ese texto solo se envia al alimentar el sintetizador. Lo que tengo pensado es implementar algun comando que retorne la version de alguna forma compacta, e inmediatamente despues de recibir el comando, de forma de minimizar el tiempo requerido.
El problema grave que tengo es que casi no hay memoria libre, pero el mover el texto hablado en el arranque, de la memoria de programa a la EEPROM deja un poco de espacio libre.
Todo esto puede no parecer importante en este momento, pero el sintetizador HD1 emite sonido a 15625 Hz en lugar de 8680 Hz, tiene dos salidas de audio que actualmente emiten lo mismo, y una octava extra para generar sonido. Cuando se termine el desarrollo, tendra un canal de sonido independiente para generar musica de forma simultanea con la voz, por lo que la deteccion de version es algo que tengo que resolver antes de que eso este andando.
Voy a tratar de tener una version beta durante la semana, que voy a enviar por mensaje privado, y si funciona bien en las pruebas pasaria a version final, y ya seria publica.
Alguien ya tiene los componentes para armar una placa? Y para conectarla a que ordenador?
Hay un esquema para conectarla a RS232, y poder usarla desde un PC, es similar pero se agrega un MAX232 y sus componentes asociados.
En cuanto a lo del altavoz, es un diseño base, no quise definir eso porque lo mismo alguien podria querer integrar un amplificador como el LM386 y el altavoz, todo en una caja, o usar altavoces amplificados de PC, como hago yo. La salida se puede decir que es de linea, pero salen 5V en lugar de 1V, por lo que asi como esta habria que agregar un preset para ajustar el volumen segun a que se la conecte. Lo que es seguro es que no esta hecha para manejar un altavoz de forma directa. Ya que tambien hay que alimentar la placa con 5V, en el caso del Spectrum me parece que es mas practico comprar altavoces amplificados de PC y armar todo ahi dentro, buscando la manera de tomar los 5V de esa misma fuente, eliminando el cable de entrada de audio y agregando uno para conectar directo a la salida MIC del Spectrum.
Recomiendo que se pruebe primero con distintos amplificadores y altavoces, porque los resultados varian bastante. Requiere un amplificador de buena calidad, la mayoria de los altavoces baratos no suenan muy bien.
Responder

Volver a “Proyectos de hardware abiertos”