Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: MsxKun en 29 de Enero de 2012, 04:38:01 pm



Título: Sintetizador de Voz para MSX
Publicado por: MsxKun en 29 de Enero de 2012, 04:38:01 pm
Buenas!

En mis busquedas por ahi en las interwebs he encontrado esto:http://www.pastbytes.com/apps/tav/ (http://www.pastbytes.com/apps/tav/)

Es un sintetizador de voz multiplataforma creado por un usuario argentino, Jorge Castillo. Entre las versiones, esta la de MSX (TAVMSX), la cual usa el PSG para reproducir voz en castellano (si bien, un poco argentinizado, esas LL que son SH... y tal) que suena bastante bien y puede ser usado desde BASIC. Incluso canta!

El programa aun es beta, ya que su creador tiene problemas para testearlo en MSX real pues su Talent MSX no va muy fina. Asi que me he ofrecido a echar una mano y testear lo que haga falta en MSX reales. Efectivamente, en mi Sony HB-20P el programa casca tras un rato.

Me ha dicho que no ha visto mucho interes de la gente, asi que me he ofrecido a dar un toque en los foros de por aqui, para que os animeis a probarlo y, el que pueda, testear y echar una mano, si hace falta. A ver si esa beta se convierte en una version 1.0 totalmente funcional :)

Ahi queda!


Título: Re: Sintetizador de Voz para MSX
Publicado por: aorante en 30 de Enero de 2012, 12:53:53 pm
Esta muy interesante!
es muy bueno encontrar proyectos de este tipo!  :D

Yo tengo los fuentes en c de una reverse-engineering del Software Automatic Mouth (SAM), para PC. Mi intención es la de intentar adaptarlo para MSX, pero ahora estoy liado con otros temas y lo tengo aparcado.  :P

Intentare buscarlos por si alguien le quiere echar un tiento..  ;)

De todas formas el de Jorge, tiene una ventaja frente al SAM, y es que es muy compacto (4k?) y seria útil para usarlo en juegos, como aventuras conversacionales...

Saludos!






Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 30 de Enero de 2012, 01:04:43 pm
El SAM de PC lo tengo por ahi, ni lo he probado... no tiene gracia sintetizar voz en un PC :P Hay multitples Text to Speech para eso...
Asi que para algun voz en los temas de Destroy the Core! usaba el SAM. Pero ahora usare el MSX :D


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 14 de Febrero de 2012, 11:03:41 am
Por cierto, hace unos dias, el creador del software me dijo que se habia registrado aqui en el foro, pero aun no habia recibido el alta.
Esta solucionado?

Saludos.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pitpan en 14 de Febrero de 2012, 11:41:31 am
Pues lo suyo sería que me enviase un e-mail o algo... Hay demasiado spam como para poder identificarlo entre los centenares de usuarios "falsos" que se apuntan cada día. O dame tú su nick y trataré de activarlo directamente. Siento las molestias, pero es que es todo un festival.


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 15 de Febrero de 2012, 03:03:31 pm
Pues lo suyo sería que me enviase un e-mail o algo... Hay demasiado spam como para poder identificarlo entre los centenares de usuarios "falsos" que se apuntan cada día. O dame tú su nick y trataré de activarlo directamente. Siento las molestias, pero es que es todo un festival.

Su nick es pastbytes.
Saludos.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pitpan en 15 de Febrero de 2012, 05:45:38 pm
Cuenta activada. Perdón por las molestias.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 16 de Febrero de 2012, 03:14:52 am
Gracias, por fin pude acceder, saludos a todos.
Hace unos meses comence la conversion del programa a C64, que es el origen de la version para Z80, la primera conversion para ese procesador iba a ser para MSX, pero como no conocia del todo bien la arquitectura, y casi nada del procesador Z80, mas alla de la informacion basica, resulto mas facil hacer una conversion para Spectrum, TS2068 y ZX81. TAVMSX es una modificacion de la version para Spectrum 128K, que usa el PSG, los primeros intentos estaban diseñados para correr bajo MSX-DOS, aunque en ese momento no tuve en cuenta que tenia que llamar a la BIOS en otro slot, por lo cual no funciono. Entonces, como aun estaba aprendiendo sobre el sistema, opte por lo seguro y adapte el programa para ser llamado desde el BASIC. Por el momento tengo mi MSX1 archivado por falta de espacio asi que las pruebas las hice en el BlueMSX, donde funciona como deberia. MsxKun me ha dicho que hay un par de modelos, de MSX2 creo, donde corre bien, y hablamos de hacer unas pruebas para ir descartando si son las llamadas a BIOS o el acceso al VDP los que provocan que deje de funcionar al tiempo. Por ahora estoy un poco ocupado con un trabajo por lo que no pude reformar el programa, pero el codigo no hace mas que imprimir algun texto y cambiar los colores de texto y fondo en el VDP, todo eso usando llamadas a la BIOS, mientras que el PSG se accede de forma directa. Probablemente el problema solo sea algun detalle que me haya olvidado de inicializar.
Cuando estaba haciendo la version para ZX81 vi que hay unos cuantos usuarios que usan interfases de sonido que incorporan un PSG, por lo cual decidi hacer una version para aprovecharlo. De un foro de ZX81 salio la idea de soportar ingles, pero al no conocer suficiente del ingles hablado como para hacer este tipo de programas, empece a basarme en los sonidos del SP0256-AL2, que no parece ser complicado de simular. Este proyecto esta como en un 10%, va a llevar bastante tiempo sintetizar todos esos sonidos, y el tamaño del programa se incrementaria ya que son muchos mas sonidos.
El programa actual ocupa casi 4K solamente en Commodore 64, incluida la interfaz de usuario, algo que en las otras plataformas se deja a un programa BASIC. Las versiones para Z80 andan todas cerca de los 5K, el codigo Z80 es mas largo, supongo que un poco por el Z80 mismo y otro poco por mi poca experiencia con ese procesador, tambien el codigo para colocar una muestra de sonido de 4 bits en el PSG es mas largo que en C64, donde solo se utiliza una instruccion.
Hace poco actualice mi sitio agregando una demo del sintetizador cantante en desarrollo, junto con un video corriendo en C64, esto no es mas que un experimento para probar el codigo con algun tema y saber como suena. Esa misma demo sigue siendo portable a MSX o Sinclair, tiene que sonar exactamente igual salvo por algun sonido que difiere ligeramente entre 6502 y Z80, pero no tiene mucho sentido convertirla a otra plataforma, mas aun si la beta no esta funcionando correctamente. La diferencia de sonido entre las versiones 6502 y Z80 tiene que ver con que en un afan de comprimir los sonidos todo lo posible, use el propio codigo 6502 o Z80 como tablas de ondas para generar ruido, pero esto afecta a un par de fonemas nada mas, en el resto el sonido tiene que ser exactamente el mismo, con la excepcion de que en Z80 las tablas de ondas tienen mas muestras por generar el sonido a una frecuencia de muestreo mayor.


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 16 de Febrero de 2012, 10:21:02 am
Bienvenido :D

[quote author=pastbytes link=topic=2248.msg27573#msg27573 date=1329MsxKun me ha dicho que hay un par de modelos, de MSX2 creo, donde corre bien, y hablamos de hacer unas pruebas para ir descartando si son las llamadas a BIOS o el acceso al VDP los que provocan que deje de funcionar al tiempo.
[/quote]

En un MSX2 y en un TurboR va bien, y sospecho que de MSX2 para arriba ira bien en cualquier lado. En MSX1, en los dos modelos que he probado, falla.
Eso y la manera que tiene de quedarse la pantalla en blanco es lo que me hace sospechar que sea algo del VDP....

Alguien tiene alguna otra sugerencia? :)


Título: Re: Sintetizador de Voz para MSX
Publicado por: Mortimer en 16 de Febrero de 2012, 03:10:21 pm
Pues he estado echando un vistazo al código, y todos los cambios de color de borde (Y son muchos) se hacen con las interrupciones habilitadas, también se hacen sin apenas retardos:

Código:
LD A,color
OUT 99h,A
LA A,87h
OUT 99h,A

Pero no recuerdo ahora si también hay que esperar entre este tipo de comandos o sólo para escribir a vram...

Así que para empezar se podría probar a poner su EI y su DI y algún NOP y ver si mejora la cosa!

PD: Probar como suena con esto: JAMONJAMONJAMONJAMONJAMONJAMONJAMONJAMONJAMON  ;D


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 16 de Febrero de 2012, 10:19:48 pm
En realidad se deshabilitan las interrupciones al comenzar a emitir el sonido y se habilitan al terminar, pero se me debe haber escapado alguna llamada a la BIOS que tal vez las habilita en el medio. Con cada muestra emitida, alrededor de 9500 veces por segundo, lo primero que se hace es cargar un color de tinta y fondo en el VDP e inmediatamente escribirlos en el registro 7, sin pausa entre las dos escrituras al puerto $99. Podria dejar una de las instrucciones al comienzo y otra al final, despues del cambio de volumen de los 3 canales.
El cambio de color de fondo se hace para reflejar el nivel de volumen de la muestra, con colores mas brillantes cuanto mas se aleje la muestra del medio, es decir que una muestra de valor 15 mostraria el color blanco, lo mismo que una muestra de valor 0. Es un detalle poco importante, si da problemas se lo elimino.


Título: Re: Sintetizador de Voz para MSX
Publicado por: Mortimer en 17 de Febrero de 2012, 10:07:35 am
Entonces, además de ser quizás la causa de los fallos, tenerlas habilitadas estará afectando a la calidad el sonido ¿No? A mí me gusta mucho el efecto de las líneas, lo único para la versión definitiva hacerlas opcionales.

(Probad: "SALUDOS PROFESOR FALKEN"  :o)


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 17 de Febrero de 2012, 11:54:44 am
Ahora que lo probe de nuevo, me parece que no suena del todo bien, eso parece confirmar que es un tema de interrupciones, voy a ver si me hago un momento en el fin de semana para hacer todos los chequeos que tengo pendientes. El programa deberia sonar igual que en C64, ya que emite sonido de 4 bits con volumen lineal, tal como se hace en la otra version, pero puede que el BlueMSX no tenga tan buena calidad de sonido y en un MSX real suene mejor. En C64 el sonido es muy claro, y para emitir sonido digital no tiene ventajas sobre el PSG, en C64 se pueden lograr frecuencias de muestreo mas altas porque requiere menos instrucciones, una de carga en el acumulador y otra de escritura en memoria, mientras que mi codigo en MSX usa 12 instrucciones para hacer lo mismo. Sin embargo, esto no cuenta como desventaja en este caso porque la frecuencia de muestreo en la version MSX es mayor, en C64 se podria alcanzar una frecuencia mayor de lo posible en MSX, aunque no tiene mucho sentido pasar de los 8KHz para la voz.
Una opcion que tengo que implementar para que sea util y no un simple programa curioso, es que se le puedan definir teclas para capturar y retornar, esto es por ejemplo que al llamarlo con una frase se le indique que teclas pueden interrumpir la reproduccion, digamos que fueran las teclas de cursor, esto facilitaria que se pueda hacer un menu en BASIC donde al moverse a cada opcion se hable esa opcion, complementando asi lo impreso en pantalla. Pero esto deja de ser practico si por cada opcion hay que esperar al texto entero, lo ideal es que podamos avanzar en las opciones del menu y en cada una comience a hablar, pero no detenga el tiempo de respuesta del menu, simplemente se podria pasar rapidamente entre las opciones, empezando a hablar en todos los casos pero interrumpiendose inmediatamente al detectar las teclas indicadas, retornando al BASIC con la tecla recibida como parametro. El programa BASIC entonces llamaria al sintetizador y al retornar chequearia el valor retornado, si es 0 no haria nada, si es distinto sabria que es la tecla que interrumpio el sonido y la procesaria, en este caso al ser de cursor avanzaria a la opcion que corresponda o entraria a otro menu. Implementandolo de esta manera la voz seria bastante transparente y no habria que armar una interfaz especial para el sintetizador, simplemente se manejaria todo como siempre pero la voz complementaria lo existente, aunque incluso segun como se haga podria permitir el uso del programa sin pantalla.
Por cierto, en el sitio del programa esta la tabla con los comandos disponibles, como las vocales acentuadas que se expresan como A+ E+ I+ O+ U+, son el mismo sonido pero con tono ligeramente mayor, lo mismo con -, suena con un tono menor y se usa para la ultima silaba de una oracion, para que suene un poco mas natural. En la pantalla cuando ejecuta la demostracion se pueden ver impresos los comandos de parte de lo que dice. Tambien se puede usar < para bajar el tono de lo que venga a continuacion, por defecto siempre se usa el tono mayor, que tambien se puede especificar con >, todo esto esta explicado en los manuales de las versiones Spectrum o C64.
Ejemplo de acentuacion:  E+ME E+SE E+KI-S
Sin acentos el tono es siempre el mismo y por lo tanto la voz es mas robotica.


Título: Re: Sintetizador de Voz para MSX
Publicado por: PAC en 17 de Febrero de 2012, 12:36:42 pm
Sólo una propuesta, aunque no sé si será posible implementarla ya que deduzco reproducir texto por el PSG consume bastantes recursos. 

¿Sería posible ir indicando que sílaba o letra está leyendo el programa en cada momento en vez del cambiar el color de borde?


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 17 de Febrero de 2012, 12:58:41 pm
Sólo una propuesta, aunque no sé si será posible implementarla ya que deduzco reproducir texto por el PSG consume bastantes recursos.  

¿Sería posible ir indicando que sílaba o letra está leyendo el programa en cada momento en vez del cambiar el color de borde?

Como poder se podria, seria un poco complicado especificarlo, porque el programa habla con texto fonetico, no con palabras en castellano, ademas a veces difiere mucho lo que uno quiere imprimir y lo que se habla, por ejemplo se podria hablar E+ME E+SE E+KI-S e imprimir MSX. En la version C64 se hace eso de imprimir mientras se habla, en principio se utilizaba la ROM para imprimir cada letra, pero resulto que el retraso aunque pequeño era suficiente para que sonara mal, porque agregaba un espacio entre cada sonido. Esto lo solucione imprimiendo el texto en pantalla con el mismo color de fondo, y el programa simplemente va cambiando el color de lo que haya en la pantalla de texto para ir haciendo visible el texto ya impreso a medida que habla, pero esta solucion es posible en C64 por implicar nada mas que dos instrucciones por caracter, ya que se trata simplemente de un acceso a memoria. En MSX todo se hace indirectamente, asi que me parece que es mas rapido directamente colocar los caracteres accediendo al VDP, lo que implica que hay que especificar el texto en el codigo que use el VDP y no en ASCII, de lo contrario el programa tendria que hacer algun tipo de traduccion previa. Ademas de eso hay que decirle de alguna manera al programa lo que se va a imprimir y cuando, por ejemplo para que diga MSX se podria hacer algo asi: (M)E+ME (S)E+SE (X)E+KI-S, indicando entre parentesis lo que tiene que imprimir y no ser hablado. Se podria llegar a agregar a la siguiente version, pero tengo que mirar bien como hacerlo, ya que si uso rutinas de la ROM probablemente tenga el mismo problema que en C64, por eso lo ideal seria hacer mi propia rutina de impresion directa al VDP, que respete las coordenadas actuales de texto (como para que se las pueda definir previamente con LOCATE) y el color de tinta. No se si el VDP tiene acceso directo por coordenadas a la pantalla de texto, sino habra ademas que hacer algunos calculos para determinar la direccion en VRAM donde hay que colocar el caracter.
Lo de cambiar el color del fondo en realidad no tiene sentido, es una opcion hecha para C64 y Spectrum, donde existe realmente el borde, cuando converti el programa a MSX me di cuenta que no existia el color de borde en la pantalla normal de texto, y que solo se puede tener un color de tinta en toda la pantalla. Estas limitaciones vuelven inutiles los trucos que use en las otras versiones, y en una aplicacion es molesto que vaya cambiando el fondo mientras se la esta usando.


Título: Re: Sintetizador de Voz para MSX
Publicado por: PAC en 17 de Febrero de 2012, 01:35:28 pm
Lo comentaba principalmente porque de esta manera sería más sencillo seguir el texto. Cuando lo probé hubo momentos en los que no sabía qué parte de la frase estaba reproduciendo ya que no entendía correctamente la pronunciación.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 17 de Febrero de 2012, 01:45:33 pm
Bueno eso pasa con todos los sintetizadores de voz para 8 bits que conozco, pero al poder usarse desde BASIC, el mismo usuario puede imprimir cada palabra antes de llamar al programa para que la hable, el retraso generado por la orden PRINT entre cada palabra debe ser equivalente en tiempo a un espacio normal entre palabras asi que no quedaria mal. El programa en BASIC que hace de interfaz se podria llegar a modificar para que detecte los espacios del texto ingresado e imprima las palabras una a una, llamando al sintetizador luego de cada impresion. Yo lo hice lo mas basico posible porque sirve a la vez de demostracion para saber como se usa, por eso no quise complicarlo demasiado.


Título: Re: Sintetizador de Voz para MSX
Publicado por: Mortimer en 17 de Febrero de 2012, 02:58:26 pm
Se me ocurre una forma de hacerlo más o menos fácil para que pueda indicar palabra a palabra, que sería que dejara configuar (Opcionalmente claro) una dirección para una llamada callback que se invocaría cada vez que termine de leer una palabra. Además no hace falta tocar el código del sintetizador para cada uso. (Eso sí, la rutina de presentación también tendría que estar en ASM)

Así que cada vez que termina una palabra, se llama a esta rutina nuestra pasándole la posición de la siguiente palabra que va a leer. Y ya podemos colorear o lo que queramos, y como es entre palabra y palabra, si la rutina es razonablemente rápida no creo que afecte mucho a la calidad del sonido. ¿No?

También se podría aprovechar esta rutina para indicarle al sintetizador si tiene que terminar, dejando algún flag para ello, así también le quitamos al sintetizador otro asunto digamos 'externo' de lo que preocuparse.




Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 17 de Febrero de 2012, 03:35:54 pm
Lo de cambiar el color del fondo en realidad no tiene sentido, es una opcion hecha para C64 y Spectrum, donde existe realmente el borde, cuando converti el programa a MSX me di cuenta que no existia el color de borde en la pantalla normal de texto, y que solo se puede tener un color de tinta en toda la pantalla.

Si usas screen 1, podras tener el color del borde a tu antojo. Simplemente añade una linea con SCREEN 1, antes de nada, y veras.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 17 de Febrero de 2012, 03:43:07 pm
Lo de cambiar el color del fondo en realidad no tiene sentido, es una opcion hecha para C64 y Spectrum, donde existe realmente el borde, cuando converti el programa a MSX me di cuenta que no existia el color de borde en la pantalla normal de texto, y que solo se puede tener un color de tinta en toda la pantalla.

Si usas screen 1, podras tener el color del borde a tu antojo. Simplemente añade una linea con SCREEN 1, antes de nada, y veras.


El problema es que deberia funcionar en cualquier modo de pantalla que el usuario necesite, asi que tengo que ajustarme al modo mas basico, en todo caso hacer seleccionable que cambie los colores, o detectar el modo para decidir si se hace o no.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 17 de Febrero de 2012, 04:01:08 pm
Se me ocurre una forma de hacerlo más o menos fácil para que pueda indicar palabra a palabra, que sería que dejara configuar (Opcionalmente claro) una dirección para una llamada callback que se invocaría cada vez que termine de leer una palabra. Además no hace falta tocar el código del sintetizador para cada uso. (Eso sí, la rutina de presentación también tendría que estar en ASM)

Así que cada vez que termina una palabra, se llama a esta rutina nuestra pasándole la posición de la siguiente palabra que va a leer. Y ya podemos colorear o lo que queramos, y como es entre palabra y palabra, si la rutina es razonablemente rápida no creo que afecte mucho a la calidad del sonido. ¿No?

También se podría aprovechar esta rutina para indicarle al sintetizador si tiene que terminar, dejando algún flag para ello, así también le quitamos al sintetizador otro asunto digamos 'externo' de lo que preocuparse.

Entre palabras suele haber espacios, aunque no siempre, esos espacios, en vez de especificarlos en el texto para que el sintetizador no ejecute mas que un bucle de espera, se pueden aprovechar para que el mismo programa BASIC imprima la palabra que el usuario quiere y luego llame al sintetizador con el texto que sigue.
Si quisiera hacer un programa que hable e imprima "hola, mundo. saludos." tendria que hacer algo asi, todo esto implementado en BASIC:

imprimir "HOLA, "
llamar al sintetizador para que hable "O+LA"
imprimir "MUNDO. "
llamar al sintetizador para que hable "MU+NDO-"
imprimir "SALUDOS"
llamar al sintetizador para que hable "SALU+DO-S"

Me parece que tal como esta el programa se resuelve perfectamente, y como dije si uno quiere que sea mas automatico se puede hacer un bucle en el programa BASIC para que busque los espacios en una cadena, obtenga las palabras una a una y haga el procedimiento con cada una (imprimir y hablar).
Tambien se puede poner el texto en lineas DATA, o en una matriz para contener el texto a imprimir y el texto a hablar correspondiente al mismo, y muchos otros refinamientos posibles.
El programa no imprime porque es una accion muy dependiente del usuario, se me hace que tendria mas sentido incorporar la impresion en el futuro sintetizador cantante, donde puede ser mas importante ir marcando la letra a medida que se canta.
De todos modos, antes habia dicho que la impresion se podria especificar como parte del texto, colocando el texto a imprimir entre parentesis, lo que haria que el programa no lo procese como habla y lo mande directo a la pantalla antes de continuar con el resto del texto. La limitacion de esto es que imprimiria de forma estandar, en las coordenadas y color de tinta actuales, por lo que si se quiere ir imprimiendo en distintas zonas o colores el usuario tendra que dividir la frase en partes y hacer distintas llamadas.


Título: Re: Sintetizador de Voz para MSX
Publicado por: Mortimer en 17 de Febrero de 2012, 04:07:27 pm
Sí, así en basic funcionaría bien. Mi idea iba más para poder usarlo desde ASM de forma genérica sin tener que tocar el código para cada uso.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 17 de Febrero de 2012, 04:30:59 pm
Sí, así en basic funcionaría bien. Mi idea iba más para poder usarlo desde ASM de forma genérica sin tener que tocar el código para cada uso.

Lo mismo vale para assembler, y es mejor que se llame al sintetizador por cada palabra, porque asi el programa principal del usuario puede decidir cuando detener el proceso. Si es un programa que muestra un texto y lo va hablando, por ejemplo alguna demo o la presentacion de la historia de un juego, el usuario puede querer presionar espacio o escape para saltar a lo que sigue, y al ser el programa del usuario quien tiene el control puede tras cada palabra leer el teclado y tomar la decision de no seguir enviando texto para hablar.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 01 de Marzo de 2012, 01:55:13 pm
Pregunta, hay programas que permitan cargar desde disco archivos de sonido digitalizado para reproducirlos? Algo asi como un sampler que permita reproducir sonidos, como decian en los 80s, con la pulsacion de una tecla. Hay tambien editores de sonido digitalizado, o todo debe hacerse en un PC e importarlo en el MSX?
Todo esto funciona en el PSG, o es para otros chips?


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 01 de Marzo de 2012, 02:47:11 pm
Epa.

El señor Robsy se curro una rutina que reproduce sonido digitalizado a 1bit mediante el puerto PPI (el click click click de teclado de toda la vida). 1bit no es mucho, pero no suena del todo mal. Yo mismo utilice la rutina en el josconzio final del Parachuteless Joe. Incluso el Sr. Dioniso se curro un jueguecillo entero, el Beepertron, que solo usaba este metodo para reproducir sonido.
Luego, player para PSG algo habia por ahi. Y tambien para SCC. En todos los casos (segun yo se) son simplemente rutinas para reproducir, no un programa realmente dedicado a ello (interface, playeo, etc...)
Por supuesto, tambien puede usarse el Music Module, el PCM del TurboR y la Moonsound. Y ese pequeño cacharrito llamado Covox, que se conecta a la impresora. En todos de una forma u otra podras cargar algun sample, pero es casi siempre un tema de hacerlo a manubrio. (aunque en el Music Module puedes usar el Moonblaster para cargar y playear samples, idem para la Moonsound, pero es un apaño...)


Software para editar el sonido, convertir y demas... no hay nada que yo sepa. Todo lo que he visto necesita convertir el sample en PC primero y luego ya pasarlo al MSX.  Personalmente quiero experimentar con la Covox (tengo una), ya que parece un metodo sencillo, pero mas adelante, cuando tenga un poco de tiempo.

Cualquier soft de este estilo seria bienvenido :)

Saludos!


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 01 de Marzo de 2012, 03:08:41 pm
En realidad todo esto venia porque el sintetizador no es mas que un secuenciador simple de sonidos digitalizados, aunque algunos son generados por codigo, pero se podria ver como una forma de compresion de sonido. Las versiones para 6502 y Z80 difieren en la frecuencia de muestreo, pero todas parten del sonido digitalizado fuente en 44KHz y 16 bits, todas las modificaciones al sonido las hago primero ahi, para luego reducir al muestreo y cantidad de bits necesarios. Pasar sonido de 8 bits a 4 me ha complicado bastante, ya que no encontre soft para PC que lo haga directamente, por lo que tuve que escribirme un programa en BASIC para leer el archivo raw grabado con el GoldWave a 4 bits redondeando los numeros en vez de recortar lo que vendrian a ser los "decimales". De esta manera se redujo un poco el ruido que queda de fondo al convertir, pero aun sigue, convertir un audio de 8 bits a 4 es una tarea artesanal, y la unica manera de hacerla bien es mirando las ondas graficamente y corrigiendolas a mano para decidir en cada muestra si el valor intermedio (16 niveles de 8 bits) que se encuentra entre 2 niveles de 4 bits lo ajustamos hacia arriba o hacia abajo.
Lo que se me ocurrio es hacer un programa que permita cargar un audio de 8 bits directamente en el ordenador de 8 bits, que se pueda ver graficamente la onda en 8 bits, y que encima de eso se pueda dibujar la onda en 4 bits, o dejar que el programa la dibuje automaticamente. Tambien seria interesante que se pudiera usar raton para seleccionar partes y que haya opcion de cortar y pegar. No creo que el programa sea adecuado para teclado o joystick, es algo que solo funciona con raton.
Esto era un proyecto de largo (o muy largo) plazo, ya que ademas del sonido requiere conocimientos de graficos y de como aprovechar cada byte libre de RAM para almacenar todo el sonido que se pueda. Tampoco habia pensado empezar por MSX sino por C64, pero viendo ultimamente el uso que se les da a los programas de sonido en ordenadores de 8 bits para hacer musica, creo que del proyecto original y del sintetizador se pueden desarrollar algunas cosas no tan ambiciosas que se puedan aprovechar.
Una cosa que aun tengo pendiente es encontrar alguna forma de temporizacion precisa en MSX, desconozco si existen timers en el hard, en la version para C64 se sincroniza el sonido con las lineas impares de la pantalla, por eso es tan estable, y ademas de eso se dispone de varios timers en las CIA.


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 01 de Marzo de 2012, 09:15:13 pm
Parece complicado, si...
Lo malo es que aqui el unico timer que tendras sera el del VDP... Si, hay gente por aqui que cuenta ciclos de reloj y otras cosas esotericas, pero eso complica mucho el asunto. Para temas de audio y sincro, quien te podria ayudar seria Madonna MkII, pero no se si volvera a aparecer por aqui :(

Por conocimiento sobre graficos si que no te has de preocupar, se nos da bien por aqui.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 02 de Marzo de 2012, 02:51:53 am
El otro dia le comentaba a makinavaja de la idea de hacer algun programa que cargue algunos sonidos digitalizados y permita reproducirlos con las teclas de funcion, el me comentaba que seria interesante que se pudiera secuenciar eso, que se usen tiempos musicales y se pueda decir en que momento se reproducen los sonidos. Yo de musica conozco poco, pero algo de eso tuve que hacer en la demo de C64 donde el programa canta, para ir ajustandose lo mejor posible a lo que indica la partitura, pero al ser una demo la precision no era tan importante. El asunto es, que si se suele usar varios MSX simultaneamente para hacer musica, no ocurre acaso que en algun momento se desincronizan? Se puede temporizar en cada uno pero no hay una fuente de reloj maestro que permita a todos sincronizarse entre si, y esto se agrava mas cuanto mas tiempo pasa, mas aun si los MSX usan distintas frecuencias de reloj en el procesador, o incluso distintos programas, ya que cada uno aproxima los tiempos como mejor puede.
Sin conocer mucho de lo existente, me parece que tendria que haber algo que emitiera pulsos de reloj, sea un MSX o una pequeña placa, y se podria conectar esa señal de reloj (una cierta cantidad de pulsos por minuto) a los puertos de joystick, con lo cual cada programa tendria una manera de estar perfectamente sincronizado con los otros. En este caso podria haber retrasos para detectar el pulso a tiempo, por lo cual la precision a muy corto plazo dependeria del programa, pero a largo plazo todo estaria perfectamente en sincronia.
Como es lo del timer del VDP? Estuve buscando pero es tan generico que da demasiados resultados. Hay algun sitio que hable de eso?


Título: Re: Sintetizador de Voz para MSX
Publicado por: Mortimer en 02 de Marzo de 2012, 08:00:18 am
El timer del VDP de los MSX1 es muy sencillo, dependiendo de si el ordenador es NTSC o PAL simplemente produce una interrupción 60 o 50 veces por segundo respectivamente que llega al Z80. La únicas opciones que tenemos al respecto es decirle al VDP que genere o no esta señal, y a la CPU que la ignore o que la acepte y salte a una rutina de interrupción.

Sobre un reloj maestro externo, estaría genial, pero mejor que usar el puerto de Joystick en que hay que mirar el estado por polling, supongo que sería mejor hacer algo que se conectara a un slot de cartucho y poder así generar una interrupción al Z80 con la cadencia que nos interese.










Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 02 de Marzo de 2012, 09:20:47 am
Bueno, esa interrupcion de 50/60 Hz serviria entonces para la temporizacion musical, detectando previamente en que frecuencia funciona el MSX donde corre el programa, no digo que detecte PAL o NTSC porque los MSX brasileros usan PAL M a 60Hz.
Sin embargo para otro tipo de temporizacion mas precisa parece que se va a complicar un poco, en el sintetizador cantante uso tiempos de 200 microsegundos que son temporizados por una de las CIA (en C64), sin que tenga que hacer mas que cargar el valor y sentarme a esperar que se active un bit, o directamente habilitar una interrupcion. La temporizacion seria muy importante para reproducir el sonido digital en una frecuencia de muestreo estable, y mas importante si ademas no se quiere trabajar con una frecuencia fija, porque no todos van a querer usar una frecuencia alta desperdiciando memoria, o una baja sacrificando la calidad de sonido.
Si tan solo se pudiera conocer el estado de la onda de un canal en un momento dado, hasta se podria usar el PSG para temporizar, aunque si se pudiera no seria util justamente para aplicaciones que usan el sonido.
Voy a tener que seguir investigando, por el momento todo funciona con bucles para perder tiempo, calibrados a prueba y error, pero seria mejor que el hard se ocupe de esos asuntos, ya que de tiempos de ejecucion no conozco demasiado y prefiero no complicarme con eso.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 02 de Marzo de 2012, 09:55:31 am
Sobre un reloj maestro externo, estaría genial, pero mejor que usar el puerto de Joystick en que hay que mirar el estado por polling, supongo que sería mejor hacer algo que se conectara a un slot de cartucho y poder así generar una interrupción al Z80 con la cadencia que nos interese.

Claro, pero mi idea era que cualquiera pudiera armarlo, un cartucho no es para cualquiera, y de usar un cartucho seria mejor incluir uno o mas microcontroladores, lo que eliminaria la necesidad de usar el PSG.
A ver si me explico, en el caso del sintetizador de voz, originalmente era un programa que hice en un PIC que debe costar 3 o 4 dolares, emite sonido de 8 bits y corre a 20MHz.
Aqui se puede ver la placa, esta armada sobre una mas grande con otros proyectos, pero lo unico que pertenece al proyecto es lo que sale indicado en el video:
http://www.youtube.com/watch?v=b_z-iPSDG7g
Eso era solamente una prueba cuando aun no estaba terminado el codigo para procesar RS232, por eso tiene una frase grabada al arrancar y no dice nada mas. Cuando estuvo listo lo probe con una terminal por RS232, que en esa ocasion fue un Epson HX-20 pero lo mismo se podria haber usado cualquier terminal, un PC, un C64, un Spectrum con Interface 1, etc.
Aqui se ve la prueba: http://www.youtube.com/watch?v=Itgr15GTick
Las versiones para micros de 8 bits las renombre TAV, pero estan basadas en ese programa, tomando todos los atajos posibles para lograr un resultado similar con recursos muy inferiores. Inicialmente iba a ser un sintetizador de voz expandible en el futuro a placa de sonido basica, emulando algo similar al PSG o el SID, mi idea era conectarlo a un ZX81 o Spectrum 48K para agregar sonido basico o complementar el existente, de ahi vienen los comandos extendidos /0, /1 y /2 que agregan señalizaciones basicas para usar en algun programa. En el futuro habria otros comandos que generarian sonidos basicos como explosiones, pasos, disparos, etc., aunque todo eso quedo congelado desde el momento en que hice la conversion a micros de 8 bits, y en las versiones de TAVx quedan un poco fuera de lugar esos comandos.
A lo que iba es a que desde el momento en que pase el programa al mundo de los micros de 8 bits, el objetivo fue lograr resultados con el hard existente, si tuviera que incorporar hard adicional, el camino logico seria olvidarme de los tiempos, incorporar un medio de reproduccion de sonido fuera del micro (un chip de sonido, un microcontrolador, etc.), controlarlo por MIDI, y usar el micro solamente como interfaz.
Mas alla de esto, igualmente se podria encontrar una solucion intermedia, tal vez un microcontrolador que se sincronice con eventos externos y genere una interrupcion al Z80, ademas de expandir las capacidades de sonido del PSG, pero por el momento estoy mas en soluciones de software.
El chip que programe se quedo sin conectarse a un MSX porque esta diseñado para RS232, pero se podria llegar a emular usando el puerto paralelo, ya que solo es necesaria una linea de salida a 1200bps, y una linea de entrada con la que el PIC indica que no puede recibir datos (CTS). El chip funciona en tiempo real, es decir habla apenas recibe algo valido, y continua con la recepcion en paralelo, no es necesario enviar una frase y luego darle la orden de procesarla, ya que esta diseñado para un flujo continuo de datos. Se puede ver en el segundo video que tengo que ingresar puntos antes de cada frase, ya que comienza a hablar inmediatamente y hay que ser muy rapido tipeando para que no se interrumpa el sonido. Cada punto equivale a un silencio de 1 segundo, por lo que ingresar varios me da tiempo para tipear el resto de la frase.


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 02 de Marzo de 2012, 12:30:47 pm
Este maki liante... :D
En mi caso ultimamente estoy probando de generar notas en el MSX a tempos determinados. El problema de precision y sync con otros chismes que usan el mismo tempo es un rollo, si.
En mi caso aun puedo usar MIDI Sync usando el Music Module, que lo recibe via MIDI. No estoy seguro ahora mismo si el mismo Music Module tambien genera MIDI Clock y tal... Este tema todavia lo he mirado poco, por ahora me limitaba a recibir notas y listo.

Y en cualquier caso sigue siendo hardware externo. Por el MRC creo que alguien hizo pruebas de generar algo asi como las interrupciones por linea, usando sprites y el bit de colision. Era curioso.. No se como quedo el tema.

Saludos



Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 02 de Marzo de 2012, 12:47:25 pm
Entonces deduzco que los que usan varios equipos para hacer musica tienen que usarlos ya sea como instrumento musical, es decir con un usuario manejandolo, o si se usa como secuenciador, tiene que estar conectado por MIDI. Supongo que no usan equipos que no sea de esas dos formas, es decir no se usarian dos MSX secuenciando por separado, por el tema de la desincronizacion, pero si se usaria alguno para meter efectos cada tanto, como reproducir algun sonido, aunque esto entraria en la categoria de instrumento musical, aunque no sea convencional.
No se usan MSX tocando simultaneamente con otros equipos como gameboy, amiga, etc.?


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 02 de Marzo de 2012, 01:31:22 pm
Bueno, usarse usarse... Se puede usar sin sincronizar por MIDI, pero es mas complicado. Sincronizar vida MIDI te simplifica las cosas (siempre que el hard y el soft lo soporte). En MSX no se ha usado demasiado el MSX para tocar en directo :D Igual algun Yamaha... que ya tenian MIDI integrado...

Por poder tocar a pelo...  mirate el video del sabado pasado :D http://www.youtube.com/watch?v=dzNbH5da16g
Por cierto tambien usamos el TAVMSX...

Yo intentaba lanzar alguna nota suelta con mi MSX, de oido. Tampoco es que se me de bien, soy un desastre.
Maki estaba con su c64 y Neuroflip con el Amiga. Habia alguna que otra Gameboy y DS... Aorante le daba al VJ.... Estuvo bien :D
No se como sincronizaban, la verdad.... a mi el Commodore me la trae floja y blablabla...:D


Título: Re: Sintetizador de Voz para MSX
Publicado por: Mortimer en 02 de Marzo de 2012, 02:05:10 pm
Lo de generar las INT en el Z80 lo dije porque es la manera más precisa de sincronizar, pero si se admite un pequeño error, el candidato ideal creo que sería como sugeriste el puerto de joystick: todos los MSX tienen al menos uno (El de impresora por ejemplo no), y además es bidireccional (2 bits sólo, eso sí), así que en vez de utilizar un MSX para que hicera de master del resto, simplificando la circuitería.

Y también, no sé exactamente a qué velocidad puede enviar información, pero en teoría también se podría usar el puerto de joystick como terminal para tu sintetizador.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 02 de Marzo de 2012, 08:36:51 pm
Por poder tocar a pelo...  mirate el video del sabado pasado :D http://www.youtube.com/watch?v=dzNbH5da16g
Por cierto tambien usamos el TAVMSX...

No habia visto un video de ese tipo de eventos en vivo, es decir no en detalle, si vi alguno de lejos donde no se ve mucho de los equipos, o algun otro editado donde no esta el sonido de ambiente, por aqui donde estoy ese tipo de eventos no existen. Me habian comentado que usaron el programa, la verdad aun me cuesta imaginar como puede llegar a quedar bien ya que no esta diseñado para ese uso, pero sera que tengo poca imaginacion para esas cosas.
Pensando en esos usos, se me ocurrio que tambien podria agregar en el futuro opciones para distorsionar la voz un poco, no era la idea del programa, claro, porque se hace menos entendible, pero quedaria bien como efecto de sonido.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 02 de Marzo de 2012, 08:47:22 pm
Lo de generar las INT en el Z80 lo dije porque es la manera más precisa de sincronizar, pero si se admite un pequeño error, el candidato ideal creo que sería como sugeriste el puerto de joystick: todos los MSX tienen al menos uno (El de impresora por ejemplo no), y además es bidireccional (2 bits sólo, eso sí), así que en vez de utilizar un MSX para que hicera de master del resto, simplificando la circuitería.

Y también, no sé exactamente a qué velocidad puede enviar información, pero en teoría también se podría usar el puerto de joystick como terminal para tu sintetizador.

Interesante lo de que tambien sirva como salida, se que en varios sistemas (no MSX) existe esa posibilidad porque el hard que maneja los joysticks suele ser programable, pero desconocia que en MSX se tuviera lineas de salida, si esto es asi en cualquier modelo de la norma es seguro que para algo lo voy a usar.
Con dos lineas de salida se puede hacer milagros, incluso con una sola, aunque complica un poco mas el codigo.
En cuanto al puerto paralelo, pense que venia en todos los modelos, voy a tener que descartarlo entonces, tambien era un problema conseguir el conector, al menos en esta zona.


Título: Re: Sintetizador de Voz para MSX
Publicado por: Mortimer en 02 de Marzo de 2012, 09:53:22 pm
En realidad, visto desde el MSX, son 4 bits de entrada, 1 de salida, y dos programables para ser de entrada o de salida. Además también incluye una salida de 5V, así que si el sintetizador no necesita mucha corriente hasta se podría alimentar por ahí.

Bájate si no lo tienes ya el MSX Technical Data Book ( http://www.msxarchive.nl/pub/msx/docs/manuals/msxtech.pdf ) y mira en las páginas 25 y 26 (En la 25 hay una errata porque TRG2 también es input/output).


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 03 de Marzo de 2012, 11:34:41 am
Para el tema del joystick creo que seria util mirar la informacion existente sobre JOYNET. Lo que hacia Joynet era conectar 2 MSX mediante el puerto de joystick. Esto se uso en el F1-Spirit 3D de Konami.

Lo de la impresora... todos los MSX tienen puerto. No se si habra alguna oveja perdida por ahi, porque hay de todo, pero seria un caso excepcional.  El que si es caso excepcional, es el 1chipMSX, que claro, para algunos no es MSX, sino emulador :D
Pero es el unico caso que yo conozca...


Título: Re: Sintetizador de Voz para MSX
Publicado por: Mortimer en 03 de Marzo de 2012, 11:56:48 pm
Si no me equivoco al menos el Casio PV7 y el Philips VG-8000 no llevan puerto de impresora (La norma no lo exige).

La norma en cambio si exige al menos un Joystick, pero no sé si hay algún modelo que sólo lleve uno  ???


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 04 de Marzo de 2012, 02:57:08 am
Ya baje el manual ese, no lo tenia.
Si se uso ya el joystick para algo comercial entonces habra que mirar de que forma lo hacia para que sea algo seguro, ya que si algunas lineas son de entrada y salida hay que tener cuidado de dejar todo como estaba antes de retornar el control al sistema. Lo ideal seria usar lo minimo y que no se haga ningun corto si hay un joystick enchufado en el puerto, es decir usar solamente lo que esta fijo como entrada o salida.
El puerto paralelo habia pensado usarlo originalmente para conectar con el chip, por eso la placa tiene unos pines para conexion paralela, de esta forma el chip podria emular una impresora y se podria usar comandos estandar en el BASIC. Pero despues no se por que lo descarte y me parecio mejor armar un cartucho que utilizara dos puertos de E/S del Z80, esta solucion ademas seria adaptable a Spectrum o ZX81, pero la desventaja es que ya es un poco mas trabajoso el tema del software.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 04 de Marzo de 2012, 02:09:52 pm
Encontre esto en WOS: http://www.worldofspectrum.org/infoseekid.cgi?id=0021299
Es mas o menos lo que queria hacer con el tema de edicion de sonido, algo asi deberia haber para MSX, incluso se puede usar con raton.
El programa tiene algunos samples para cargar y probar, pero tuve que adivinar que en el DOS hay que poner CAT para ver el directorio, y LOAD "boot" para arrancar el programa.


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 04 de Marzo de 2012, 05:38:37 pm
Curioso :) Soporta AY y Covox, asi que seria bastante portable, si estuviera el codigo fuente...


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 05 de Marzo de 2012, 01:51:24 pm
Estuve haciendo pruebas simuladas con audio del programa, aplicandole modulacion en amplitud, o ring modulation en chips como el SID, me di cuenta que cambiando la onda utilizada y aplicandole una frecuencia se puede lograr ese efecto por hard. Lo que hace es distorsionar la voz, haciendola menos entendible, pero tiene su utilidad musical. El efecto ideal se lograr con una onda triangular, por lo que el SID lo haria mejor, y por lo que vi la frecuencia funciona bien entre 100 y 1000Hz segun el texto usado y el efecto que se quiera lograr. Con onda cuadrada, que es lo que puede ofrecer el PSG, las frecuencias altas parecen funcionar mejor.
Tambien estuve pensando que podria rehacer los samples y rutinas de fonemas del programa para adaptarse directamente al volumen no lineal del PSG, actualmente uso los 3 canales para linealizar el volumen, cada vez que se emite una muestra de 4 bits se toca el volumen de los 3 canales en un orden determinado para que el volumen de mas peso cambie primero y el "ruido" ocasionado por no poder cambiar los 3 a la vez se minimice.
Pero si el sonido digital se adapta a la mejor aproximacion del volumen exponencial que tiene el PSG, me quedarian 2 canales libres, tambien me queda pendiente hacer una herramienta que pueda convertir el audio lineal normal a audio apto para el volumen del PSG.
Esto ya es un delirio, pero seria interesante tener un tracker que en los canales permita sonido normal del PSG, sonido digitalizado, o sintesis de voz. Quien sabe, tal vez algun dia...


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 05 de Marzo de 2012, 09:05:40 pm
Estuve haciendo pruebas simuladas con audio del programa, aplicandole modulacion en amplitud, o ring modulation en chips como el SID.

Jeje, aplicando Ring Modulation, sonara como un Dalek!

Citar
Esto ya es un delirio, pero seria interesante tener un tracker que en los canales permita sonido normal del PSG, sonido digitalizado, o sintesis de voz. Quien sabe, tal vez algun dia...

Seria genial, aunque mucho lio veo. Pero que no decaiga.



Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 08 de Marzo de 2012, 10:35:14 am
Rescate de hace casi exactamente un año las primeras pruebas por soft que hice de sintesis en MSXBASIC, antes tambien lo habia hecho en BASIC de C64. Suena bastante mal porque son ondas cuadradas, pero lo interesante es que teniendo los parametros se pueden hacer efectos de voz (o algo parecido) en un tracker.
Recien converti las ordenes SOUND a PLAY para que sea mas estandar, y quedo esto:

10 PRINT "HOLA"
20 PLAY "T120L8M34S14O5D","L8M34S14O5D"
30 PLAY "L16M35O4G","L16M35O4G"
40 PLAY "L8M36O6D#","L8M36O5G#"

En su tiempo genere los parametros tambien para L, S, T, N, I, U, pero quedo abandonado rapidamente para empezar con las versiones en ensamblador.


Título: Re: Sintetizador de Voz para MSX
Publicado por: assembler en 08 de Marzo de 2012, 12:27:36 pm
Me he quedado flipado  :o

¿En qué te basas para sacar los sonidos?


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 08 de Marzo de 2012, 12:34:05 pm
En la experiencia de varios años de locura analizando sonidos para entender como estaba compuesta la voz, casi que miro una onda y veo la matrix.  ;D


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 08 de Marzo de 2012, 12:57:53 pm
Aca escribi una explicacion de como sintetice la voz analizando sonidos para generarlos con los canales del SID, la version para MSX es una conversion al PSG de esa prueba, usando envolvente en vez de ADSR, lo que la limita un poco, lo mismo que las ondas cuadradas (originalmente se usan triangulares en el SID).
http://www.pastbytes.com/apps/tav/historia.html


Título: Re: Sintetizador de Voz para MSX
Publicado por: SapphiRe_MSX en 08 de Marzo de 2012, 10:12:36 pm
¡Alucinante! ¿Has probado a hacer algo parecido con el Vortex Tracker? Se podrían hacer músicas que hablasen también :D


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 09 de Marzo de 2012, 06:44:18 am
Probe varios trackers de MSX, algunos no andan, otros requieren placas que no tengo, algunos andan con el PSG pero son complicados de manejar, y con el PSGEd solo pude secuenciar un sonido a la vez, asi que desisti, como era solo una prueba no tenia muchas ganas de ponerme a aprender a usar programas.
Pero deberia poder hacerse, y no solo hablar sino tambien cantar, no has visto el video de la version mas reciente del programa? No esta terminada la interfaz, solo el motor de sintesis y solo corre en C64, porque no tenia sentido convertir una simple prueba a otras plataformas.

http://www.youtube.com/watch?v=D3VQdwjZzmM

Ese sintetizador comenzo usando las ondas nativas de los chips, estaba casi terminado cuando decidi convertirlo a sonido digital, ya que el sonido analogico era una conversion del sonido original de 16 bits a 44KHz, que es lo que se ve en mi sitio cuando sintetizo la onda. Casi todos los fonemas (porque algunos se generan por programa) estan separados en audio de 16 bits. Por eso esas pruebas con ondas nativas son simplificaciones del original, y el sintetizador actual en realidad es mas fiel al audio original porque usa sonido digital, aunque reducido en calidad.
Tengo pendiente desde hace tiempo terminar el sintetizador analogico, como curiosidad mas que nada, ese es el que se podria adaptar para trackers, solo hay versiones funcionales para C64 y les faltan algunos fonemas que no se llegaron a hacer.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 13 de Marzo de 2012, 10:01:04 pm
Como nota al margen, probe la ultima version de sonido aditivo que habia hecho (en C64) de lo que despues fue el TAV con sonido digital, y le ingrese el texto E+ME E+SE E+KIS, adjunto mp3 del resultado.
El sonido se genera exactamente igual que como hice con la instruccion PLAY, con 2 canales, solo que combinando ondas triangulares y ruido, pero lo importante es que si se puede obtener esa calidad en el SID, se puede hacer algo mejor con alguna placa de sonido adicional.
Por otro lado, me confirmaron que con PLAY no puedo usar ruido, asi que no sirve para generar todos los fonemas.


Título: Re: Sintetizador de Voz para MSX
Publicado por: Jon_Cortazar en 14 de Marzo de 2012, 10:44:35 am
10 PRINT "HOLA"
20 PLAY "T120L8M34S14O5D","L8M34S14O5D"
30 PLAY "L16M35O4G","L16M35O4G"
40 PLAY "L8M36O6D#","L8M36O5G#"

::wow::


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 18 de Marzo de 2012, 08:21:11 pm
Que sepas que he usado el TAVMSX en este tema ;)

http://destroythecore.bandcamp.com/track/color-auto-goto-list-run

De paso hago spam xD


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 18 de Marzo de 2012, 08:42:34 pm
Suena muy bien, esta todo hecho con MSX y PC?


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 18 de Marzo de 2012, 08:52:26 pm
Suena muy bien, esta todo hecho con MSX y PC?

Hola. Gracias :) A ver, las voces estan hechas con el TAVMSX en un 1chipMSX (es lo que tenia mas a mano, que bastante lio de cables necesitaba montar...) El audio del MSX lo paso a un Korg Kaoss Pad3 y de ahi distorsiono (o no). Ahi me apetecia meterle un poco de vocoder :D Tambien hay audio del MSX usando el Moonblaster (un poco de bateria), y algo de SID (grabe varios cachos con el software que estoy haciendo pero luego aproveche menos y ná!, lo aprovechare para otra ocasion).
Luego ya el resto son sonidos del Moog y uno o dos plugins VST en PC, con algun sample por ahi.... Todo enmarranado junto.

Y por hoy ya tengo los oidos saturadisimos :D Mañana cuando lo escuche seguramente me suene a rayos...

Ah, la parte del TAVMSX dice algo asi (como buenamente puede)...:

10 print "hello"
20 goto 10

y tambien

color auto goto list run

Otra cosa es que se distinga, porque generalmente se me suele ir la mano con los FX :S


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 18 de Marzo de 2012, 09:23:32 pm
color auto goto list run

Mierd..! xD Me acabo de dar cuenta que dice "auto color..." (si no oigo mal!!) Me va a tocar cambiarlo y renderizar la pista de nuevo xD Cagonelcoponpodrido...


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 18 de Marzo de 2012, 09:48:13 pm
color auto goto list run

Mierd..! xD Me acabo de dar cuenta que dice "auto color..." (si no oigo mal!!) Me va a tocar cambiarlo y renderizar la pista de nuevo xD Cagonelcoponpodrido...

Corregido y resubido. En el tema intro se va a quedar como esta, total no se distingue...  :joe: Que empanada la mia...


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 19 de Marzo de 2012, 07:31:38 am
Como un detalle puede complicarte la vida, suerte que lo tenias secuenciado y te diste cuenta pronto, podia suceder que en unos dias fuera dificil de reproducir el mismo resultado exacto.
Estuve escuchando un poco el resto de los temas, es un uso ingenioso de la sintesis de voz como efecto.
Ya que andas en el tema te pregunto, o a cualquiera que haga sonido con el PSG, se puede controlar las envolventes o las ondas de los canales de forma que empiecen a voluntad? Es decir si quiero disparar una envolvente determinada se la asigno a uno canal, pero supongo que esa envolvente corre permanentemente y no necesariamente empieza desde el inicio de la onda cuando la asigno. Probablemente se resetee y comience desde el inicio cuando se le cambia la frecuencia de envolvente, eso es asi?
Lo mismo con las ondas de los canales, supongo que empiezan en 1 cuando les asigno una nueva frecuencia o cuando asigno tono a un canal, o son osciladores que corren permanentemente y cuando asigno tono a un canal simplemente se activa la onda cuadrada este donde este en ese momento, sea 1 o 0?
Alguien sabe como funciona eso?
Todo esto viene por saber que tan bien se puede convertir la sintesis aditiva al PSG, en el SID se puede disparar una onda de forma exacta y por lo tanto se pueden formar ondas complejas sumando ondas simples, a veces se usan dos canales con la misma onda pero ligeramente atrasada una de otra.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 19 de Marzo de 2012, 08:33:18 am
Publique lo del album en el tema del TAVMSX en retrocomputacion.com, asi que de paso tienes un poco de publicidad.
http://www.retrocomputacion.com/e107_plugins/forum/forum_viewtopic.php?63913.0#post_66654


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 19 de Marzo de 2012, 09:22:36 am
Ya que andas en el tema te pregunto, o a cualquiera que haga sonido con el PSG, se puede controlar las envolventes o las ondas de los canales de forma que empiecen a voluntad? Es decir si quiero disparar una envolvente determinada se la asigno a uno canal, pero supongo que esa envolvente corre permanentemente y no necesariamente empieza desde el inicio de la onda cuando la asigno. Probablemente se resetee y comience desde el inicio cuando se le cambia la frecuencia de envolvente, eso es asi?

Hola. Yo el tema envolventes apenas lo he tocado. El PSG es muy simplote para eso, una envolvente para todos los canales y control minimo sobre la idem.
Aqui hay gente que ha experimentado con ello mas que yo, a ver si saben algo concreto. Yo diria que la envolvente corre permanentemente, y es posible que se resetee al cambiar la frecuencia, como dices, o la forma de la misma. No sabria decirte. Se podrian hacer unas pruebas simples para mirarlo, aunque hay que tener algo de oido. Um.. o mejor, podria grabarse el sonido y ver la forma de la onda en el ordenador, asi visualmente lo apreciaria mejor :)


Título: Re: Sintetizador de Voz para MSX
Publicado por: MsxKun en 19 de Marzo de 2012, 09:25:24 am
Publique lo del album en el tema del TAVMSX en retrocomputacion.com, asi que de paso tienes un poco de publicidad.
http://www.retrocomputacion.com/e107_plugins/forum/forum_viewtopic.php?63913.0#post_66654

Jo, gracias  :-[ Que ganas de torturar a la gente.  :angel:


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 20 de Marzo de 2012, 07:32:21 pm
Reforme la prueba original en BASIC, que estaba hecha con SOUND en vez de PLAY, es un poco mas flexible el sonido pero al ser BASIC es imposible sincronizar la envolvente adecuadamente, por lo que el sonido es erratico, no siempre suena de la misma manera. Pero como sea, lo que importa es que si es posible desde BASIC, se puede secuenciar de alguna manera en algun programa que tenga mas precision y velocidad.
Adjunto un zip con el .BAS y el .ASC del programa, porque no a todos les conviene un .DSK de 360K, y sacando los creditos, el codigo que hace el sonido es el siguiente:

200 FORI=1TO100:NEXTI
210 SOUND 0,192:SOUND 1,0:SOUND 2,192:SOUND 3,0:SOUND 8,16:SOUND 9,16
220 SOUND 7,&B11111100:SOUND 11,34:SOUND 12,0:SOUND 13,14
230 PRINT"HO";:FOR I=1 TO 100:NEXT I
240 SOUND 0,29:SOUND 1,1:SOUND 2,29:SOUND 3,1:SOUND 8,16:SOUND 9,16
250 SOUND 7,&B11111100:SOUND 11,35:SOUND 12,0:SOUND 13,14
260 PRINT"L";:FOR I=1 TO 100:NEXT I
270 SOUND 0,87:SOUND 1,0:SOUND 2,137:SOUND 3,0:SOUND 8,16:SOUND 9,16
280 SOUND 7,&B11111100:SOUND 11,36:SOUND 12,0:SOUND 13,14
290 PRINT"A";:FOR I=1 TO 100:NEXT I
300 SOUND 13,0:PRINT", ";:FOR I=1 TO 150:NEXT I
310 SOUND 0,28:SOUND 1,0:SOUND 2,28:SOUND 3,0:SOUND 8,15:SOUND 9,15
320 SOUND 7,&B11101110:SOUND 11,150:SOUND 12,2:SOUND 13,10
330 PRINT"S";:FOR I=1 TO 30:NEXT I
340 SOUND 0,87:SOUND 1,0:SOUND 2,137:SOUND 3,0:SOUND 8,16:SOUND 9,16
350 SOUND 7,&B11111100:SOUND 11,36:SOUND 12,0:SOUND 13,14
360 PRINT"A";:FOR I=1 TO 100:NEXT I
370 SOUND 0,29:SOUND 1,1:SOUND 2,29:SOUND 3,1:SOUND 8,16:SOUND 9,16
380 SOUND 7,&B11111100:SOUND 11,35:SOUND 12,0:SOUND 13,14
390 PRINT"L";:FOR I=1 TO 100:NEXT I
400 SOUND 0,64:SOUND 1,1:SOUND 2,64:SOUND 3,1:SOUND 8,16:SOUND 9,16
410 SOUND 7,&B11111100:SOUND 11,34:SOUND 12,0:SOUND 13,14
420 PRINT"U";:FOR I=1 TO 100:NEXT I
430 SOUND 7,&B11111111:FORI=1TO10:NEXTI
440 SOUND 0,56:SOUND 1,0:SOUND 2,213:SOUND 3,0:SOUND 8,16:SOUND 9,16
450 SOUND 7,&B11111100:SOUND 11,36:SOUND 12,0:SOUND 13,14
460 PRINT"D";:FOR I=1 TO 10:NEXT I
470 SOUND 0,192:SOUND 1,0:SOUND 2,192:SOUND 3,0:SOUND 8,16:SOUND 9,16
480 SOUND 7,&B11111100:SOUND 11,36:SOUND 12,0:SOUND 13,14
490 PRINT"O";:FOR I=1 TO 100:NEXT I
500 SOUND 0,28:SOUND 1,0:SOUND 2,28:SOUND 3,0:SOUND 8,15:SOUND 9,15
510 SOUND 7,&B11101110:SOUND 11,150:SOUND 12,2:SOUND 13,10
520 PRINT"S";:FOR I=1 TO 30:NEXT I
530 SOUND 7,&B11111111:PRINT"."

El programa dice HOLA, SALUDOS.
Tambien lo va imprimiendo en pantalla.


Título: Re: Sintetizador de Voz para MSX
Publicado por: Jon_Cortazar en 21 de Marzo de 2012, 06:31:30 am
El programa dice HOLA, SALUDOS.
Tambien lo va imprimiendo en pantalla.

Probado. Lo flipo mucho :o


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 21 de Marzo de 2012, 07:09:00 am
La verdad es que no tiene aplicacion practica, pero es interesante. Si se prueba emulando al 200 o 300% de velocidad mejora mucho el sonido, y es sonido perfectamente posible, porque no es digitalizado como en el TAVMSX. Esto es sintesis aditiva, combinando dos canales y la envolvente, por lo tanto para lograr lo mismo que se escucha en 2x o 3x de velocidad, habria que utilizar assembler y multiplicar las frecuencias usadas en los canales y envolvente por 2 o 3 segun el caso. Lo que implica esto es que suena mal solo por la lentitud del BASIC, pero en assembler o en un secuenciador se tienen que obtener resultados iguales o mejores que cuando se acelera la emulacion.
Por cierto, en la frase, la O de HOLA esta acentuada, lo mismo que la U de SALUDOS, eso se cambia en la frecuencia de la envolvente, incluso se puede cantar en BASIC si se ajustan las frecuencias de envolvente para cada vocal, las consonantes no importan. Eso para que vean el poder de la poco valorada envolvente del sonido.  :D


Título: Re: Sintetizador de Voz para MSX
Publicado por: Iggy Rock en 22 de Marzo de 2012, 09:16:39 pm
Ya que andas en el tema te pregunto, o a cualquiera que haga sonido con el PSG, se puede controlar las envolventes o las ondas de los canales de forma que empiecen a voluntad? Es decir si quiero disparar una envolvente determinada se la asigno a uno canal, pero supongo que esa envolvente corre permanentemente y no necesariamente empieza desde el inicio de la onda cuando la asigno. Probablemente se resetee y comience desde el inicio cuando se le cambia la frecuencia de envolvente, eso es asi?

Hola. Yo el tema envolventes apenas lo he tocado. El PSG es muy simplote para eso, una envolvente para todos los canales y control minimo sobre la idem.
Aqui hay gente que ha experimentado con ello mas que yo, a ver si saben algo concreto. Yo diria que la envolvente corre permanentemente, y es posible que se resetee al cambiar la frecuencia, como dices, o la forma de la misma. No sabria decirte. Se podrian hacer unas pruebas simples para mirarlo, aunque hay que tener algo de oido. Um.. o mejor, podria grabarse el sonido y ver la forma de la onda en el ordenador, asi visualmente lo apreciaria mejor :)

El registro 13, con el que se selecciona el tipo de envolvente, reinicia la misma cada vez que se escribe en el.
Código:
sound:
0,0
1,0
6,20
7,&b10001001
8,&h10
11,0
12,20
13,8

y 13,8 para reiniciar




Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 22 de Marzo de 2012, 11:18:25 pm
Interesante dato, y sera que se reinicia aunque se escriba el mismo valor existente?


Título: Re: Sintetizador de Voz para MSX
Publicado por: Iggy Rock en 23 de Marzo de 2012, 03:40:30 pm
Eso es.


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 23 de Marzo de 2012, 05:39:07 pm
Perfecto entonces, gracias, voy a ver si puedo hacer algunos experimentos.


Título: Re: Sintetizador de Voz para MSX
Publicado por: Darth_Fistro en 29 de Marzo de 2012, 06:14:46 pm
Saludos,

Me llegan a decir cuando era un crío que el MSX podría hablar a través del PLAY y no me lo creo  :o

¿Podrías por favor dar los parámetros SOUND de las vocales y consonantes que faltan (y que hayas investigado, claro)? Quiero hacer una prueba en ensamblador.  :o

Alucinante, de nuevo, sin palabras, nada que envidiar al SAM del C64 que tanto nos restregaban en la cara los compañeros del colegio  ;D


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 30 de Marzo de 2012, 04:39:07 am
Aca estan el resto de los que habia hecho originalmente, dice TALENT, que es la marca de mi MSX.

510 SOUND 0,28:SOUND 1,0:SOUND 2,28:SOUND 3,0:SOUND 8,16:SOUND 9,16
520 SOUND 7,&B11101110:SOUND 11,150:SOUND 12,2:SOUND 13,1
530 PRINT"T";:REM FOR I=1 TO 20:NEXT I
540 SOUND 0,87:SOUND 1,0:SOUND 2,137:SOUND 3,0:SOUND 8,16:SOUND 9,16
550 SOUND 7,&B11111100:SOUND 11,34:SOUND 12,0:SOUND 13,14
560 PRINT"A";:FOR I=1 TO 100:NEXT I
570 SOUND 0,29:SOUND 1,1:SOUND 2,29:SOUND 3,1:SOUND 8,16:SOUND 9,16
580 SOUND 7,&B11111100:SOUND 11,35:SOUND 12,0:SOUND 13,14
590 PRINT"L";:FOR I=1 TO 100:NEXT I
600 SOUND 0,56:SOUND 1,0:SOUND 2,213:SOUND 3,0:SOUND 8,16:SOUND 9,16
610 SOUND 7,&B11111100:SOUND 11,36:SOUND 12,0:SOUND 13,14
620 PRINT"E";:FOR I=1 TO 100:NEXT I
630 SOUND 0,172:SOUND 1,1:SOUND 2,172:SOUND 3,1:SOUND 8,16:SOUND 9,16
640 SOUND 7,&B11111100:SOUND 11,35:SOUND 12,0:SOUND 13,14
650 PRINT"N";:FOR I=1 TO 50:NEXT I
660 SOUND  13,0:FORI=1TO100:NEXTI
670 SOUND 0,28:SOUND 1,0:SOUND 2,28:SOUND 3,0:SOUND 8,16:SOUND 9,16
680 SOUND 7,&B11101110:SOUND 11,150:SOUND 12,2:SOUND 13,1
690 PRINT"T.":PRINT
700 SOUND 13,0

El programa era otro, asi que la numeracion de las lineas no tiene nada que ver con el anterior. De ahi lo unico nuevo son los fonemas: T, E, N.
Tambien en otra parte estan los fonemas I, U, con un espacio intermedio en la linea 400:

370 SOUND 0,33:SOUND 1,0:SOUND 2,64:SOUND 3,1:SOUND 8,16:SOUND 9,16
380 SOUND 7,&B11111100:SOUND 11,34:SOUND 12,0:SOUND 13,14
390 PRINT"I ";:FOR I=1 TO 100:NEXT I
400 SOUND  13,0:FORI=1TO40:NEXTI
410 SOUND 0,64:SOUND 1,1:SOUND 2,64:SOUND 3,1:SOUND 8,16:SOUND 9,16
420 SOUND 7,&B11111100:SOUND 11,34:SOUND 12,0:SOUND 13,14
430 PRINT"U";:FOR I=1 TO 100:NEXT I


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 30 de Marzo de 2012, 05:15:34 am
Alucinante, de nuevo, sin palabras, nada que envidiar al SAM del C64 que tanto nos restregaban en la cara los compañeros del colegio  ;D

Hablas del TAVMSX, no? Porque si es de los experimentos con BASIC, el SAM suena mucho mejor.  :D


Título: Re: Sintetizador de Voz para MSX
Publicado por: Darth_Fistro en 31 de Marzo de 2012, 11:20:50 am
Muchas gracias, alucinante  :) Pues nada que envidiar al SAM!!!  :griel:

En la revsita Microhobby venía el listado de un sintetizador de voz para el Spectrum. Recuerdo que lo hacía sintetizando cada fonema a través del altavoz (no del PSG, era para un Spectrum básico).

Repito, anonadado me he quedado con esto  :o


Título: Re: Sintetizador de Voz para MSX
Publicado por: pastbytes en 31 de Marzo de 2012, 08:12:08 pm
Si, probe el sintetizador de Microhobby y es muy bueno. El TAVZX tambien tiene una version para Spectrum 48K que suena por el altavoz (y la salida MIC), el TAVMSX es una conversion del TAVZX que hice despues para Spectrum 128K, que es la que usa el PSG.