Karoshi MSX Community
19 de Noviembre de 2017, 03:19:37 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Calendario Ingresar Registrarse  
Páginas: [1] 2
  Imprimir  
Autor Tema: Sintetizador de voz en español por RS232  (Leído 8142 veces)
0 Usuarios y 1 Visitante están viendo este tema.
pastbytes
Karoshi Fan
**
Mensajes: 66


Ver Perfil Email
« : 14 de Marzo de 2013, 09:50:30 am »

Este tema esta relacionado con este otro de hace 1 año atras: http://karoshi.auic.es/index.php?topic=2248
Algunos pocos sabran que hice una serie de sintetizadores de voz para varias plataformas de 8 bits, usables desde BASIC. Esos programas, bastante experimentales por cierto, eran una simplificacion extrema del proyecto original que corria en un microcontrolador PIC y se controlaba por RS232. No hice mucho mas en las versiones por soft, llamadas TAV (texto a voz), porque no soy programador de Spectrum o MSX, ni de Z80 siquiera, ese sintetizador fue el primer y ultimo proyecto que hice con Z80. Ya que me habia diversificado demasiado para el tiempo del que disponia, y habiendo quedado 3 versiones sin siquiera empezar (Amstrad CPC, Atari ST y Commodore 16 / Plus/4), decidi concentrarme en mejorar el proyecto original por hard, el cual habia llegado a probar en Spectrum 48K con Interface 1, Commodore 64 y Epson HX-20 (mi MSX no tiene RS232).
Un año despues de mi incursion en los micros de 8 bits, y dos versiones de hard mas tarde, puedo presentar una version casi final del chip. El proyecto TAV se baso en la version 2 del sintetizador con PIC, luego de eso hubo una version 3 que avanzo hasta darme cuenta de que no era realizable con una calidad satisfactoria de la manera en que lo habia encaminado, por lo que a medio camino se convirtio en la actual version 4.
El sintetizador emite sonido digital de 8 bits a 8680 Hz, apenas un poco mas de lo que se conoce como calidad telefonica, pero suficiente para la voz. El programa es basicamente un secuenciador con buffer de recepcion, lo que permite enviar rafagas de informacion al chip y seguir procesando de manera independiente. Para controlarlo se requiere un puerto RS232 con una linea TX para enviar datos (el chip devuelve lo recibido por RX, pero esta linea no es necesaria), y una entrada para leer la señal CTS desde el chip, la que indica al ordenador que temporalmente no puede aceptar mas datos. Es decir que el chip puede conectarse a cualquier ordenador que disponga de una salida y una entrada TTL, como por ejemplo un puerto de joystick programable como salida.
Aqui se puede ver un video probando la placa, que consta de un PIC16F648A a 20MHz, un MAX232 para adaptar de TTL a RS232 (+-12V), y sus componentes asociados:  http://www.youtube.com/watch?v=h2DKORl6hak
La placa es bien minimalista, si se conectara a un MSX por el puerto de joystick o a un Spectrum +2 seguramente bastaria con el PIC, el cristal de 20MHz, 3 capacitores, una resistencia y un conector de salida de audio. En la prueba se usa el PC para enviarle un texto preescrito con los comandos en ASCII, a traves de un programa emulador de terminal a 1200bps.
El led rojo indica que se esta reproduciendo sonido, el azul que esta a su lado indica cuando se activa CTS (buffer de recepcion lleno), y el azul que esta mas alejado es una linea de debug que indica cuando se esta enviando un comando de modificacion de voz.
El texto de prueba quedo un poco improvisado porque queria probar tanto la nota como el tipo de voz, el tipo de voz y la nota se pueden cambiar en el mismo rango, desde la nota C1 hasta la nota C4, pero uno define la nota a la que se emite la voz, y el otro define el tipo de voz, mas alta o mas baja. Se puede ver que se usan dos tipos de voz y ambas pueden cantar las mismas notas de las 3 octavas, solo que con distinto tono de voz (como dos personas distintas).
Ya tendre que intentar conectar la placa al puerto de joystick del unico MSX que tengo, un Talent DPC-200 (MSX1) con alguna rutina en ensamblador para enviar la secuencia a 1200bps.

« Última modificación: 14 de Marzo de 2013, 09:53:56 am por pastbytes » En línea
aorante
Karoshi Maniac
****
Mensajes: 445


nuTella Power!


Ver Perfil WWW Email
« Respuesta #1 : 14 de Marzo de 2013, 10:23:08 am »

Felicidades por el proyecto!
Es impresionante!  Cheesy
En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
j4mk3
Karoshi Maniac
****
Mensajes: 368


MSx Powa!


Ver Perfil WWW Email
« Respuesta #2 : 14 de Marzo de 2013, 10:24:18 pm »

Impresionante es poco !! Shocked Shocked Shocked Shocked Shocked Shocked

¿Que viavilidad tiene este hardware sonoro por el port de joystick para un posible videojuego ?
¿Exige el soft mucho tiempo de CPU para el refresco del buffer ? Roll Eyes
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE & STAN, THE DREAMER ---
pastbytes
Karoshi Fan
**
Mensajes: 66


Ver Perfil Email
« Respuesta #3 : 15 de Marzo de 2013, 12:19:59 am »

La idea es precisamente que sirva como expansion de sonido, el buffer es interno, el chip comienza a ejecutar la secuencia apenas la recibe, y va almacenando en el buffer, se puede enviar rafagas de informacion y seguir procesando en el MSX sin preocuparse del sonido, mientras se emita mas informacion a tiempo cuando se este terminando de reproducir lo del buffer. Se puede ir enviando datos cada tanto, evitando que se vacie el buffer, y no se notaria ninguna interrupcion, es posible tener el chip sonando continuamente. En el caso de hacer un juego que lo use, habria que sincronizar de alguna manera el codigo para enviar un byte a 1200 bps, 8N1, eso no seria muy complicado de hacer ya que se puede enviar un byte cada tanto y es lo suficientemente lento para el Z80 como para hacer otras cosas en medio del envio del byte.
El proyecto originalmente era solo sintesis de voz en español, pero con el tiempo decidi incluir funciones de sintetizador musical, las primeras pruebas de eso es el hecho de que cante, adaptar el chip para que genere musica solo implicaria agregar un par de "fonemas" que en lugar de voz representen ondas basicas, como triangular, cuadrada, etc. El metodo que se usa para darle una nota a la voz es el de aplicarle una onda envolvente a una frecuencia determinada, por lo que ya tenemos ondas y envolvente, tambien la generacion de ruido esta implementada, se usa para generar los fonemas S, T, SH, F, CH y J. En resumen, es un secuenciador complejo aplicado en este caso a la generacion de voz.
Lamentablemente tuve que desistir de la parte musical, mi idea era tener voz y un canal basico de sonido extra, que permitiera hacer melodias simples y algun efecto sonoro (disparos, pasos, explosiones), pero tambien queria mantenerme en ese modelo particular de PIC, y por cuestiones de falta de memoria tuve que dejarlo solo en voz. El chip tiene solo 4K para el programa, pero es facil de conseguir y cuesta menos de 5 dolares, tampoco se usan muchos componentes extra, el diseño esta pensado para poder armarse en gran escala de ser necesario. La placa que se ve en el video ni siquiera tiene hecho el circuito impreso, es una placa generica armada con cables.
La decision que tuve que tomar por el limite de memoria del chip, es que este proyecto se queda sin funciones musicales, implementado en un PIC16, y ahora empiezo a migrar el programa a un PIC18, que tiene 32K para programa (y para agregar muchas mas tablas de ondas), el doble de velocidad, y algunas instrucciones nuevas que optimizarian bastante el programa. El nuevo proyecto esta definido como un sintetizador musical de 4 canales de 8 bits a 26KHz de muestreo, con varios tipos de onda basicos, algunos instrumentos mas elaborados, y la voz como un instrumento mas.
Con ambos proyectos se pueden hacer algunas variaciones, por ejemplo si conecto el chip directo al bus del Z80, el espacio ahorrado en el codigo de recepcion y transmision serie se puede utilizar para agregar un soporte basico de sonido y ruido, aunque igual seria monofonico. Lo mismo si se conecta al puerto paralelo. En el proyecto con PIC18, estoy estudiando la posibilidad de hacer una version con MIDI y otra para el puerto serie que usan los perifericos del Commodore 64.
Si interesa el tema, de este mensaje en adelante se puede leer un poco de esta version del sintetizador, y hay algunos mp3s con pruebas varias para escuchar:
http://www.retrocomputacion.com/e107_plugins/forum/forum_viewtopic.php?59536.20#post_77250
Un poco mas arriba de ese mensaje hay una foto con la placa actual, junto a la placa sin adaptador a RS232, que como se ve es bien minimalista, esa se conecta al puerto del usuario del Commodore 64, que incluye un puerto RS232 pero TTL por lo que no es necesaria la adaptacion de voltajes. Para MSX tendria que armarse una placa similar pero conectada al puerto de joystick o al paralelo.
En ese mismo tema tambien se puede seguir todo el desarrollo de las versiones 2 y 3.
En línea
pastbytes
Karoshi Fan
**
Mensajes: 66


Ver Perfil Email
« Respuesta #4 : 16 de Marzo de 2013, 10:30:10 am »

Otro video de prueba, generando voz robotica, y con un poco de imaginacion, musica y efectos.  Wink

http://www.youtube.com/watch?v=YVDSw3bjCP4
En línea
pastbytes
Karoshi Fan
**
Mensajes: 66


Ver Perfil Email
« Respuesta #5 : 26 de Septiembre de 2013, 10:09:46 pm »

Por falta de tiempo todavia no pude hacer una demo en BASIC para MSX, pero hubo algunos avances, en estos meses pude agregar al sintetizador un generador de ruido y varios instrumentos musicales, incluso uno programable por el usuario, aunque el sonido sigue siendo monofonico.
Hice una placa de prueba para MSX conectada al puerto de joystick, y funciona bien usando esta rutina que simula RS232:
http://hotbit.blogspot.com.es/2008/01/serial-bitbang-19200-bauds-na-porta-de.html
La rutina soporta varias velocidades, yo la probe a 19200 bps, la misma velocidad que use en una prueba con ZX Spectrum con la salida RS232 de la Interface 1.
En este video se puede ver la demostracion de Spectrum, en MSX tiene que funcionar exactamente igual, la Interface 1 muestra cambios de color en el borde de la pantalla cuando esta transfiriendo datos, asi que les da una idea de que tanto proceso requiere el sintetizador. Como es basicamente un secuenciador, solo hace falta enviarle datos cada tanto, y no es necesario andar temporizando, ya que de eso se encarga el propio sintetizador.
El video es este: http://www.youtube.com/watch?v=Au8V4iX4EPg

Y aca se pueden ver unas fotos de la placa del sintetizador conectada a mi Talent DPC-200, que es MSX1, se puede apreciar que los componentes usados son minimos:









En cuanto me haga tiempo para hacerle una interfaz a la rutina de transmision para usarla desde el BASIC, con lectura de la linea CTS incluida, voy a hacer algun video de prueba.
En línea
pastbytes
Karoshi Fan
**
Mensajes: 66


Ver Perfil Email
« Respuesta #6 : 01 de Octubre de 2013, 02:16:10 am »

Modifique un juego en BASIC para MSX, que fue presentado por DamianWorf en la competencia Retrospectiva 2012, e hice un video probandolo con la placa del sintetizador a 19200 bps.
El juego usaba la orden PLAY para emitir los sonidos, y esperaba a que terminara la reproduccion antes de continuar, por lo que estaba sincronizado con el sonido, para poder hacer lo mismo con el sintetizador, agregue la conexion de la salida PLAYING de la placa a una entrada de direccion del joystick, por lo que ahora se puede saber cuando el chip termina de reproducir sonido.
En el video tambien se prueba la voz en el menu principal, mostrando que a pesar de ser un secuenciador, dispone de comandos para detener el sonido y borrar el buffer, que es lo que se hace cada vez que se cambia de opcion.
El video se puede ver aca: http://www.youtube.com/watch?v=DWPktgs_d4A
En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


Ver Perfil WWW Email
« Respuesta #7 : 01 de Octubre de 2013, 06:10:02 pm »

Modifique un juego en BASIC para MSX, que fue presentado por DamianWorf en la competencia Retrospectiva 2012, e hice un video probandolo con la placa del sintetizador a 19200 bps.
El juego usaba la orden PLAY para emitir los sonidos, y esperaba a que terminara la reproduccion antes de continuar, por lo que estaba sincronizado con el sonido, para poder hacer lo mismo con el sintetizador, agregue la conexion de la salida PLAYING de la placa a una entrada de direccion del joystick, por lo que ahora se puede saber cuando el chip termina de reproducir sonido.
En el video tambien se prueba la voz en el menu principal, mostrando que a pesar de ser un secuenciador, dispone de comandos para detener el sonido y borrar el buffer, que es lo que se hace cada vez que se cambia de opcion.
El video se puede ver aca: http://www.youtube.com/watch?v=DWPktgs_d4A

Mola Smiley
En línea

--

Cindy Lauper She Bops!
Mortimer
Karoshi Lover
***
Mensajes: 216


Ver Perfil WWW
« Respuesta #8 : 01 de Octubre de 2013, 09:26:06 pm »

Me alegra mucho ver que este proyecto tan interesante sigue adelante Cheesy
En línea
pastbytes
Karoshi Fan
**
Mensajes: 66


Ver Perfil Email
« Respuesta #9 : 14 de Mayo de 2014, 07:23:14 pm »

Revivo este tema porque tenia curiosidad de saber que tan util podia ser el sintetizador para musica en tiempo real, ya que hasta ahora lo usaba como secuenciador, y para esto me hice un programa controlador en BASIC que puede leer notas en dos octavas desde el teclado y enviar los comandos por el puerto de joystick al sintetizador.
Esta es una captura de la interfaz del programa:



El resultado fue que el sintetizador funciona muy bien, pero el BASIC no tiene la velocidad suficiente para tocar algo con fluidez. Por supuesto se podria mejorar escribiendo el programa en ensamblador o C, pero no creo que tenga alguna utilidad, por el momento me basta con haberlo probado asi. Hay que recordar que las funciones de sintesis de ruido y sonido son muy basicas porque fueron agregadas a ultimo momento y solo gracias a haber optimizado el sintetizador de voz, porque no habia memoria de programa para implementarlas. Tal vez si valga la pena hacer un mejor programa para un sintetizador mas avanzado.
En el BASIC tuve unas cuantas complicaciones, la principal fue la repeticion automatica de teclas que no encontre como deshabilitar, y me obligo a usar algunos trucos para enviar los comandos al PIC solamente al presionar y al soltar la tecla, lo cual hace que se tenga un retardo desde que se suelta la tecla hasta que se pueda presionar otra.
La idea inicial era leer el teclado de forma directa con alguna rutina en asm para poder presionar varias teclas simultaneas y tocar los acordes como arpegios (porque el sintetizador solo tiene un canal de sonido), pero lei que la lectura directa puede variar segun el modelo de MSX.
Para no hacer esto tan largo, probe el programa en un MSX1 y luego probe otra version para Commodore Plus/4. Hice un video de la version para Plus/4 porque no tengo lugar para armar el MSX en un lugar adecuado para filmarlo, pero la version de MSX funciona exactamente igual, con la unica diferencia de que usa las teclas de funcion mientras que en el Plus/4 se tienen que usar ademas las teclas de cursor.
Musicalmente el video es un desastre, queda claro que para la musica no sirvo.  Grin
Lo unico que hago es probar distintas notas variando los parametros del sintetizador, le agregue anotaciones para entender mejor lo que se va haciendo. El sonido sale por el altavoz del monitor.
El video se puede ver aqui: https://www.youtube.com/watch?v=1uZiPfPafdo
En línea
pastbytes
Karoshi Fan
**
Mensajes: 66


Ver Perfil Email
« Respuesta #10 : 22 de Diciembre de 2014, 01:06:07 pm »

Aunque estoy un poco desaparecido del mundo de MSX, este proyecto siguio avanzando, aunque no tan rapido como querria. El sintetizador de este tema ya quedo finalmente en la version 1.0, y pude darme el gusto de probarlo en un juego de accion, aunque sea accion en camara lenta.  Grin
No lo probe en MSX porque me descargue montones de juegos en BASIC y no habia ninguno que tuviera la velocidad suficiente y donde se pudiera agregar voz de forma que lo complementara.
Pero si encontre un juego para el Commodore Plus/4 donde la voz quedaba bien, el video se puede ver aqui:  https://www.youtube.com/watch?v=iDFFgrF5bGQ
Si algun dia encuentro algun juego en MSX-BASIC que se adapte a la voz y que sea interesante para probar, tal vez lo intente.
Otra cosa que ocurrio en todo este tiempo es que empece una nueva version del sintetizador de voz, que por ahora se llama HR5, a diferencia del HR4, que emite sonido a 8680Hz, este emite a 15625Hz y esta implementado con un PIC16F886, que tiene el doble de memoria de programa (8Kx14 bits) y dos salidas de sonido independientes. Esta version tiene renderizadas las ondas de la voz e instrumentos en mejor calidad, soporta una octava extra, y por ahora emite lo mismo en los dos canales de la salida estereo, pero la intencion es que soporte dos canales de musica en una salida y un canal de voz en la otra.
Me arme una placa de este sintetizador para ir probando en MSX, pero esta vez de forma compacta, soldada directamente al conector DB9 para no usar un cable. Y para probar el funcionamiento, cargue de nuevo el juego REC de DamianWorf, y el piano en BASIC que hice para el sintetizador HR4. Es una prueba breve, no muy detallada, solo la hice para mostrar el MSX funcionando con la placa, y de paso para mostrar el programa de piano que solo mostre en version Commodore Plus/4.
El video se puede ver aqui:  https://www.youtube.com/watch?v=D92n-QcibqY

« Última modificación: 22 de Diciembre de 2014, 01:56:14 pm por pastbytes » En línea
mohai
Karoshi Fan
**
Mensajes: 79



Ver Perfil
« Respuesta #11 : 29 de Diciembre de 2014, 10:47:21 am »

Muy interesante el proyecto.
Se nota que con el nuevo PIC, el sonido suena menos sintético.
Si consigues que los instrumentos suenen de manera decente y sea polifónico, manteniendo un bajo precio, creo que podría ser un interfaz muy interesante.
Las primeras pruebas no parecen sorprendentes. Lo mismo se había hecho ya por software.
¿Conoces el juego Cobra's Arc?

Tengo una duda: ¿El control de volumen y envolventes lo hace el PIC directamente?

Saludos
En línea
pastbytes
Karoshi Fan
**
Mensajes: 66


Ver Perfil Email
« Respuesta #12 : 02 de Enero de 2015, 06:22:26 am »

Si conozco el juego Cobra's Arc, todo el mundo parece idealizarlo, pero no se entiende mucho de lo que dice. La interfaz me parece mas interesante que la parte de la voz, es un juego bien pensado graficamente. No es porque sea mio, pero me parece que mi sintetizador de voz por soft TAVMSX es mejor que el de ese juego, tengo que arreglar el codigo para que todas las versiones para las diferentes plataformas sean iguales y luego publicar el codigo fuente, hay alguien esperando eso para hacer una version para Amstrad CPC. Mi sintetizador emite sonido de 4 bits por el AY y es facilmente portable a otras plataformas con ese chip de sonido, o cualquier otro capaz de emitir sonido digitalizado.
La ventaja de hacerlo por hard es que se pueden hacer juegos de accion dejando la voz sonando con el PIC como coprocesador, a diferencia de las versiones por soft que no pueden hacer otra cosa simultaneamente, o por lo menos lo dificultan bastante. Esta nueva version deberia terminar con dos canales de musica/ruido y un canal de voz simultaneos, por ahora recien esta empezando el desarrollo, ademas es probable que la version final se conecte directo al bus del Z80 y no simulando RS232 como la version actual. Pero esa decision todavia no esta tomada, si decido conectarlo al bus, tambien pensaba incorporarle un conector para tarjetas SD, con la posibilidad de usar instrumentos digitalizados grabados en la tarjeta, pero tal vez eso quede para la siguiente version que ya seria mucho mas potente.
Con respecto al control de volumen y envolventes, lo hace el PIC por soft, perdiendo resolucion en el proceso, si bajas el volumen a la mitad tendras audio de 7 bits. Lo interesante de hacerlo por soft es que puedes cargar una onda propia en el instrumento 7 y usar esa onda de 119 muestras como envolvente.
En línea
MsxKun
Karoshi Forum's Guru
*******
Mensajes: 1554


Kimochi-ii


Ver Perfil WWW Email
« Respuesta #13 : 05 de Enero de 2015, 11:24:53 am »

Si conozco el juego Cobra's Arc, todo el mundo parece idealizarlo, pero no se entiende mucho de lo que dice

Hombre, el Cobra's no usa ningun chip de sonido del MSX para generar las voces, solo el PPI Smiley
En línea

--

Cindy Lauper She Bops!
pastbytes
Karoshi Fan
**
Mensajes: 66


Ver Perfil Email
« Respuesta #14 : 05 de Enero de 2015, 08:35:53 pm »

Sin duda que es un gran logro tecnico lo del Cobra's Arc, pero visto del lado del usuario es solo una curiosidad, quiero decir que si pones a un ciego a jugarlo no entiende nada.
Son cosas muy diferentes, mi intencion es lograr un buen promedio entre inteligibilidad y costos, y ademas que se pueda usar de forma paralela a la ejecucion de un juego, sin ocupar el procesador en generar la voz. Todavia queda un largo camino hasta que este terminado, pero el chip final va a ser una mezcla entre un SCC, un SID y algo del sonido del Amiga, aunque va a tener una interfaz directa al estilo tracker, me refiero a que va a aceptar comandos del estilo de los trackers mas comunes, por lo que solo habria que hacer una rutina que envie los comandos al chip 50 o 60 veces por segundo, usando un puerto de E/S para escribir y dos para leer.
Por cierto, aunque esto no es de MSX, el resultado seria el mismo pero con 40 columnas y menos colores de texto (ya que solo dispongo de un MSX1). Ya voy a hacer un video probandolo en el MSX cuando lo tenga listo, pero por ahora se puede ver una prueba en el Commodore 128, en modo de 80 columnas, es una aventura conversacional en BASIC donde el chip habla el texto:  https://www.youtube.com/watch?v=XyTJEdFo6Z8
En línea
Páginas: [1] 2
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!