Sintetizador de voz en español por RS232

Si por algo se caracteriza el Spectrum es por su gran variedad de periféricos (clásicos y modernos)

Moderador: Sir Cilve Sinclair

Responder
pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Sintetizador de voz en español por RS232

Mensaje por pastbytes » Jue Mar 14, 2013 9:23 am

Este tema esta relacionado con este otro de hace 1 año atras: viewtopic.php?f=6&t=2539
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.
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 vere de volver a probar la placa en mi Spectrum con el RS232 de la Interface 1.

pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Re: Sintetizador de voz en español por RS232

Mensaje por pastbytes » Sab Mar 16, 2013 10:38 am


pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Re: Sintetizador de voz en español por RS232

Mensaje por pastbytes » Lun Sep 02, 2013 2:56 pm

Despues de unos meses tengo una version casi final del sintetizador de voz con PIC16F648A, y recien ahora lo probe con mi ZX Spectrum 48K por medio del puerto RS232 de la Interface 1.
Hice una captura directamente desde la salida de video compuesto, y del audio del PIC, para que tuviera mejor calidad, ya que mi filmadora es NTSC y anda bastante mal filmando video PAL.
Aca se ve todo conectado:

Imagen

Y el video, no es nada mas que una breve melodia usando una envolvente diente de sierra descendente, y los dos instrumentos disponibles, organo y bajo:



Este es el texto que puse en el video:

Breve prueba del sintetizador HR4 v1.0 beta 8, conectado a una ZX Spectrum 48 con Interface 1, a través del puerto RS232 a 19200 bps.
Cada vez que se altera el borde durante la ejecución del programa es debido a que se está enviando una línea de texto al chip, esto es un efecto de la IF1.
Esta versión del sintetizador, que ya es la última beta, si bien sigue emitiendo sonido monofónico, dispone de varias características nuevas:
- El sintetizador de voz tiene ahora 2 octavas extra, se puede ajustar tanto el tono base de la voz como la nota entre las notas C0 y C5.
- Se agregó un generador de sonido con 2 instrumentos: bajo y órgano.
- El rango de notas de los instrumentos también es de C0 a C5.
- Se agregó un generador de ruido con rango de C0 a C3 (de C3 a C5 el ruido generado es igual)
- Tanto los instrumentos como el ruido pueden modularse con una onda envolvente.
- Se puede deshabilitar la envolvente o seleccionar 4 modos de modulación.
- Se puede elegir entre 3 envolventes distintas.
- Las envolventes pueden tener dos rangos de duración diferentes, para lograr tiempos de entre 8 ms a alrededor de 10 segundos.
- Las envolventes pueden correr mientras dure el sonido, o ejecutar sólo un ciclo.
- Se agregó un silencio de duración variable.

Avatar de Usuario
Goody
Freddy Hardest
Mensajes: 563
Registrado: Mar Ago 27, 2013 6:59 pm

Re: Sintetizador de voz en español por RS232

Mensaje por Goody » Mié Sep 04, 2013 6:56 pm

Tio, no tengo ni la mas remota idea de lo que dices pero me ha impresionado escuchar hablar al Spectrum, felicidades.
En los 80 España fue potencia mundial en la creación de videojuegos compitiendo con Reino Unido que contaba con mucha mayor infraestructura.

Avatar de Usuario
flopping
Nonamed
Mensajes: 1093
Registrado: Vie Jul 16, 2010 9:54 am

Re: Sintetizador de voz en español por RS232

Mensaje por flopping » Mié Sep 04, 2013 8:40 pm

¿Tienes esquemas y codigo para probar a hacerlo y ayudarte a depurar?, los podrias poner disponibles en algun sitio de descargas, ya que el tema es interesante, salu2.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, debido a la esquizofrenia paranoide que tengo.
(C) 1982-2016, 34 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente"

pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Re: Sintetizador de voz en español por RS232

Mensaje por pastbytes » Jue Sep 05, 2013 6:50 am

El sintetizador solo usa TX para recibir datos desde el controlador (PC, Spectrum, MSX, otro microcontrolador, etc.) y CTS para indicar que temporalmente no se puede recibir mas datos, si se usa desde una terminal y se habilita el eco con uno de los jumpers, el PIC devuelve cada caracter valido recibido, permitiendo que se pueda experimentar sin tener que programar.
En principio era solo un sintetizador de voz, luego lo modifique para que se pudiera cantar y simular distintas voces, por ultimo se agregaron instrumentos musicales y un generador de ruido para que sirviera como chip de sonido completo, por ejemplo para un ZX81. Por medio de dos jumpers se puede configurar el PIC en el arranque para que reciba a 1200, 9600, 19200 o 57600 bps, esto da flexibilidad para conectarlo a casi todo, y con otro jumper se puede deshabilitar el mensaje de arranque para facilitar la integracion en otro proyecto.
El proyecto esta pensado para ser un generador de voz y sonido de uso general, puede aceptar un flujo ininterrumpido de datos, no es necesario enviarle una frase y darle la orden de reproducirla, ya que lo hace apenas recibido el primer comando. Si se mantiene el buffer lleno no hay limite en el tiempo durante el cual podria generar sonido. Tambien esta diseñado como un secuenciador, lo cual reduce la carga de procesador porque solo haria falta enviar datos cada tanto, lo suficientemente a menudo como para que no termine la reproduccion antes de que lleguen los nuevos datos, pero ya no es necesario tener que contar ciclos de reloj para enviar el sonido en el momento correcto como se haria con un AY o un SID. Sin embargo tambien dispone de un par de comandos inmediatos, para detener el sonido y para interrumpir el sonido actual y avanzar al siguiente elemento de la lista de reproduccion. Con estos comandos se podria por ejemplo musicalizar el menu de un juego enviando continuamente los comandos para la musica, y si se selecciona una opcion, se enviaria un comando para interrumpir el sonido, y luego los comandos para comenzar otra secuencia. Otro ejemplo seria disparando un misil en un juego, enviando la secuencia completa de sonido para el misil, e interrumpiendola al dar en el blanco, enviando en su lugar una secuencia para la explosion.
Los comandos no son dificiles de recordar, y son pocos, esta hecho para que no tenga un uso complicado, lo mas dificil son los parametros que por practicidad de programacion estan en hexadecimal. El lenguaje esta pensado para que permita el agregado de fonemas o alofonos en ingles en el futuro, y para seguir siendo compatible con futuras versiones multicanal.
Si bien no es la primera version del sintetizador sino la cuarta, es la primera que llego a una version final, y es la mas modesta (por ahora), ya que emite sonido a menos de 9KHz y con un solo canal de sonido, aunque permite una buena variedad de sonido por ser un sintetizador de tablas de ondas.
Habra una siguiente version en un PIC con el doble de memoria de programa (este tiene 4Kx14 bits) y mas E/S, conectable directamente al bus del Z80 o 6502, lo cual es una caracteristica del proximo PIC a usar (probablemente un 16F877A), pero dado que esa opcion solo esta disponible en PICs de al menos 40 pines, la intencion es agregar comandos para aprovechar el hard extra del PIC, como para poder leer y escribir en los puertos paralelo, leer un valor analogico con el conversor A/D, y mas importante, tener acceso a los timers para poder generar interrupciones que faciliten la programacion de juegos. Esa version del programa ya tendria al menos 2 canales de sonido y generaria sonido a algo cercano a los 12KHz, pero una version final de ese proyecto todavia esta muy lejos en el tiempo, seguramente voy a desarrollar en paralelo esa version con la mas completa que seria un sintetizador de 4 canales a mas de 20KHz de muestreo.
En cuanto al codigo, no tengo planes para liberarlo alguna vez y tampoco distribuir el binario para grabar los PIC, pero no tengo problema en enviar los que quieran siempre que se cubran los costos de los PICs y el envio.
Por ahora voy a enviar 9 o 10 chips, de los cuales 4 van para España, y ahi veremos que tal se comportan en pruebas con distintos ordenadores y que caracteristicas se podrian agregar o cambiar.
Tambien seria interesante adaptar algun juego en BASIC para que use voz o sonido generados por el PIC, pero no pueden ser textos en ingles ya que la pronunciacion deja mucho que desear, asi que probablemente tenga que escribir algo desde cero.

Avatar de Usuario
mittemot
Herbert
Mensajes: 75
Registrado: Mar Oct 16, 2012 8:42 am
Ubicación: Castellón
Contactar:

Re: Sintetizador de voz en español por RS232

Mensaje por mittemot » Jue Sep 05, 2013 11:28 am

No he podido evitar acordarme de esto

http://www.youtube.com/watch?feature=pl ... SDL50#t=30

pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Re: Sintetizador de voz en español por RS232

Mensaje por pastbytes » Jue Sep 05, 2013 12:15 pm

Ya me habian pedido una frase de Juegos de guerra, e hice el mp3 capturando el audio del chip:
http://www.retrocomputacion.com/e107_fi ... rgames.zip

Dice "Saludos Profesor Falken. Extraño juego; el único movimiento para ganar es no jugar".

Es una mezcla con el texto español pero los tiempos mas parecidos a la version en ingles. Tambien como vi que en las dos versiones le agregaron eco, a la captura del PIC le aplique reverberancia con el GoldWave, ese es el mp3 que dice eco, aclaro que eso no lo genera el PIC (el eco). Sin embargo se puede simular en la secuencia, pero no veo como adjuntar el mp3 aca.

Esta es la secuencia de comandos que se envia al sintetizador para que hable eso:

(z34n24c07)salu+do-s profeso+rfo+lke-n..ekstra+nio-jue+go.e-lu+niko-mobimie+nto-pa+r2a-gana+r es no- juga+r.

pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Re: Sintetizador de voz en español por RS232

Mensaje por pastbytes » Lun Sep 09, 2013 1:17 pm

*** Version ¿final? del sintetizador HR4 ***

Creo que esta vez ya tenemos una version definitiva, me habian quedado cosas para agregar que era una lastima que no estuvieran, ya me habia resignado a que quedaban afuera, pero arreglando cosas fui descubriendo codigo para optimizar, y fue posible agregar practicamente todo lo que pretendia.
Hasta que no pude terminar hace un rato no estaba seguro de si iba a caber todo el codigo necesario, y los cambios generaron errores que habia que corregir antes de dar por aprobadas las nuevas funciones, por lo cual decidi no adelantar nada hasta que estuviera seguro de que todo funcionaba bien.
Hubo una version beta 9 en medio que solo existio para "congelar" el codigo en un estado intermedio antes de continuar, por eso de que cada cambio generaba errores o requeria modificar rutinas a veces drasticamente. Las modificaciones que empece en la beta 9 tuvieron el punto de partida en haber encontrado que tenia una tabla de ondas de 216 muestras cuando en realidad solo se usaban 177, eso dejo de pronto una gran cantidad de memoria disponible, que se sumo a posteriores optimizaciones del codigo en otras rutinas, y como la memoria esta para ser llenada, no me quedo mas remedio que agregar nuevas funciones. :lol:

Al final quedamos en beta 10, que tiene unos cuantos cambios con respecto a la beta 8:

- Desde el inicio del proyecto (HR1) habia un limite en la cantidad de ciclos para un fonema/instrumento, que era de 127, limitado por el funcionamiento interno del secuenciador que usaba el bit 7 para multiplicar la cantidad de ciclos por 8 para lograr mayores duraciones con solo 8 bits. Se reimplementaron los fonemas que usaban esa opcion (principalmente silencios) para que dejaran libre ese bit, y ahora el limite de ciclos de duracion es de 255.
- Ya que la duracion maxima de un instrumento esta definida en ciclos, y la duracion real depende de la nota que se emita (a mayor nota, menor duracion de ciclo), podia darse el caso de que al ejecutar por ejemplo la nota C5, la duracion maxima a 255 ciclos fuera de menos de medio segundo. Esto no seria problema si el instrumento no usara envolvente, ya que se podria simplemente agregar el instrumento a la secuencia varias veces seguidas, pero si estamos usando una envolvente que dura mas de medio segundo, comenzaria desde cero cada vez que se ejecutara el instrumento, en lugar de continuar. Para compensar esto, se agrego un instrumento que se invoca con el comando =, que ejecuta el ultimo instrumento reproducido, pero conservando el estado de la envolvente, pudiendo de esta manera "expandir" la duracion de un sonido con el agregado de uno o varios de estos comandos.
- Se cambio el orden de los comandos de instrumentos, ahora /3 es ruido, /4 es bajo y /5 es organo, para dejar los instrumentos al final y no alterar el lenguaje si se agregan nuevos instrumentos en el futuro.
- Se agrego un nuevo instrumento invocado con el comando /6, que leera la tabla de ondas desde la RAM interna.
- Se agrego un nuevo comando de condiguracion I, que recibe como parametro una serie de 66 bytes en hexadecimal, y los va cargando a la RAM del instrumento 3.
- Se expandio el comando de seleccion de envolvente Ex, para que tambien permita elegir el instrumento 3 como envolvente.

Con toda la memoria que habia podido liberar, en un momento tuve que optar entre varias funciones posibles, la mas simple era agregar un tercer instrumento fijo en EEPROM, y tambien expandir el rango del sintetizador a una octava extra, llegando hasta C6, pero eran esas funciones o una mas ambiciosa, que es la que al final decidi agregar: un tercer instrumento cargable en RAM por el usuario. Esto tambien fue posible por haber descubierto que tenia los 80 registros del banco 2 sin usar, suficiente para los 66 bytes requeridos por un instrumento.
Si se quiere usar como instrumento, la onda deberia empezar y terminar en el cruce por cero, representado por el valor 128 (es sonido de 8 bits), mientras que si se quiere usar como envolvente, la onda puede empezar o terminar en 0, ya que 0 es el minimo volumen de modulacion y 255 es el maximo. Cuando el sintetizador modula el volumen, siempre centra automaticamente la onda.
Creo que con esto ya tiene una gran flexibilidad para adaptarse tanto a juegos como a musica y voz, lo unico que hubiera querido poder agregar es una octava mas, pero con solo 4 posiciones de memoria libres, y decenas de optimizaciones de codigo que parecia imposible de reducir, lo veo muy dificil (para lograr una octava extra necesitaria 24 instrucciones).
Ya habra algun video de prueba cuando pueda hacerme un tiempo, hay demasiadas cosas para probar y eso requiere armar una secuencia de comandos mas elaborada.

pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Re: Sintetizador de voz en español por RS232

Mensaje por pastbytes » Mar Sep 10, 2013 7:12 am

Bueno, al final se pudo reducir el codigo un poco como para que entrara una octava mas, ahora se puede llegar hasta la nota C6, se podia haber agregado otra mas pero ya a C6 tenemos 8 muestras por ciclo y esta al limite de lo reconocible, agregar la octava 6 solo serviria con ondas muy particulares como la cuadrada, por lo que no valia la pena.
En lugar de eso, use el codigo extra para habilitar el espacio sobrante en EEPROM para agregar el ultimo instrumento que cabe (hay 256 bytes de EEPROM y cada instrumento ocupa 66, hasta ahora habia 2 instrumentos ahi).
En definitiva, en la beta 11 tenemos 4 instrumentos:

/3: generador de ruido
/4: bajo
/5: organo
/6: guitarra electrica
/7: instrumento en RAM, definible por el usuario

Siguen estando las mismas 4 envolventes:

0: Envolvente triangular (1/4 sube, 3/4 baja)
1: Envolvente diente de sierra descendente
2: Envolvente diente de sierra ascendente
3: Envolvente definible por el usuario (instrumento en RAM)

Las notas posibles ahora van desde C0 hasta C6.
Ya que hay dos rangos de duracion de envolvente, definidos para no solaparse, es decir que la duracion maxima del rango alto es la misma que la minima del rango bajo, al agregar una nueva octava se redujo el tiempo minimo de envolvente a la mitad en el rango alto, y en el rango bajo quedaba una octava entera coincidiendo con duraciones que ya tenia el rango alto. Para solucionar esto, se multiplico por 2 la duracion del rango bajo, por lo que ahora entre los dos rangos se pueden obtener envolventes con duraciones de entre 3,8 milisegundos y 31 segundos, es decir que el agregado de una octava se reflejo en dividir por 2 la duracion minima de las envolventes y multiplicar por 2 la duracion maxima.
Y como no podia ser de otra manera, el cambio en las duraciones de las envolventes hizo que sobren 3 instrucciones mas, porque antes se dividia un numero de 16 bits por 128 y ahora se lo hace por 256, que es mucho mas facil. Al final terminaron sobrando 12 posiciones de memoria, que ahora si van a quedar para corregir errores en caso de ser necesario. Si no aparece ningun error, la beta 11 es la version final.

pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Re: Sintetizador de voz en español por RS232

Mensaje por pastbytes » Sab Sep 21, 2013 11:53 am

Hice una prueba un poco resumida pero que da una idea de las caracteristicas de voz, ruido y musica del sintetizador, lo probe esta vez en mi CZ Spectrum y de nuevo con la Interface 1, capturando nuevamente el video compuesto y la salida de audio del sintetizador.
Se prueban varias opciones de voz, algunos efectos de sonido y un tema con distintos instrumentos y configuracion de envolventes.
El video se puede ver aca:

Última edición por pastbytes el Mar Sep 08, 2015 8:17 am, editado 1 vez en total.

pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Re: Sintetizador de voz en español por RS232

Mensaje por pastbytes » Mar Sep 08, 2015 7:58 am

Revivo este hilo casi 2 años mas tarde porque no vale la pena empezar uno nuevo. Resumo brevemente los progresos desde el ultimo mensaje solamente para que no quede incompleta la historia, si alguien quiere ver otras pruebas y la evolucion del proyecto, lo puede ver en el foro de retrocomputacion.com, o en mi canal en youtube.
El proyecto que se comento hasta aqui, llamado HR4, llego a la version 1.0 el 28/11/2014 luego de 14 betas. Desde la beta 11 del video anterior hasta la v1.0, ademas de corregir errores y optimizar el codigo, se transfirieron mejoras de la siguiente generacion, el sintetizador HR5, que tienen que ver con la calidad de algunos fonemas y con un nuevo comando de expresividad. Este ultimo permite configurar la diferencia entre una vocal acentuada y una normal, haciendo la voz mas robotica (monotona) o mas expresiva.
El sintetizador actual, HR5, comenzo a desarrollarse un mes antes de llegar a la v1.0 en el sintetizador HR4, esta implementado con un PIC16F886, emite audio a 15625Hz, tiene dos salidas de audio independientes, y dispondrá de 2 o 3 canales de sonido. Por el momento es un proyecto experimental con especificaciones variables, probablemente nunca llegue a una version final, y solo sea un proyecto intermedio para experimentar con nuevos algoritmos que se usaran en la siguiente generacion.
Al disponer de una mejor calidad de audio de salida y tener mas memoria disponible, tambien se agrego una octava y se regeneraron las ondas a 15KHz, partiendo de las originales a 44KHz, que es la calidad de las ondas fuente de casi todas las versiones del sintetizador.
Dado que el mes pasado hice unas pequeñas mejoras a los fonemas, y habiendo usado una aventura conversacional escrita en BASIC (Neutronia) para probar los sintetizadores HR4 y HR5 con textos mas cercanos a la realidad, decidi probar esta vez con el Spectrum y la Interface 1, ya que aun el chip requiere recibir los comandos por RS232. Ya habia probado esta aventura en Commodore 128, MSX, y GW-BASIC bajo MSDOS (los videos se pueden encontrar en mi canal), a veces con el modulo HR4 y otras con el HR5.
En el video que se comenta mas abajo se puede ver a mi CZ Spectrum corriendo la aventura Neutronia con el modulo HR5. Se puede apreciar que todavia falta ajustar muchos textos, ya que el listado desde donde parti era para 80 columnas adaptado a 40, luego volvi a adaptarlo a 80 para el Commodore 128, y despues a 40 nuevamente para MSX1. No parti de versiones antiguas (como volver usar la de 40 antes de adaptar a 80, en lugar de adaptar de nuevo de 80 a 40) porque en cada adaptacion se agregaban mejoras, por lo que siempre era conveniente usar la ultima, aunque hubiera que formatear de nuevo el texto. En las 32 columnas del Spectrum hay textos que no quedan muy bien y se requieren algunas modificaciones al programa, ya que parece estar pensado para una pantalla minima de 40x25.

El video se puede ver aqui:


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 16 invitados