Logo pastbytes.com
Logo pastbytes.com
Fotos Información Instalación Programación Conexiones Aplicaciones Enlaces Contacto Foro
 
TAV - Sintetizador de voz multiplataforma
Introducción:

El proyecto
TAV (Texto a voz) se originó como una conversión del proyecto PICSYNTH a la Commodore 64, primero en versiones especiales usando sonido "analógico", es decir combinando ondas triangulares y de ruido generadas por el chip SID, y más tarde emitiendo sonido digital de 4 bits. Si bien en principio era sólo un experimento, un mes y medio más tarde tenía un programa que sonaba mucho mejor de lo que esperaba al iniciar la conversión. Una vez terminada esta versión, se me ocurrió intentar una conversión a MSX, plataforma para la cual si bien había hecho algunos programas en BASIC en los 80s, nunca había programado en ensamblador, es más, nunca había hecho nada para Z80 más allá de un par de ejercicios en papel en la secundaria. La arquitectura de la MSX resultó ser bastante compleja, esto sumado al hecho de estar aprendiendo Z80 y de las complicaciones de encontrar algún ensamblador moderno con el cual desarrollar el programa, hicieron que esta versión se retrasara. Mientras continuaba mi investigación sobre el Z80 y la MSX, empecé a investigar la Spectrum 48K, para la cual también había hecho programas en BASIC en los 80s. La Spectrum resultó ser una plataforma mucho más accesible, con un sistema operativo bien diseñado, y más importante aún, con excelente documentación y soporte en emuladores, lo que permitió convertir rapidamente el programa a Z80. El problema lo presentaba el audio, consistente en una salida que solamente puede tener dos valores, activada o desactivada, esto es, sonido digital de 1 bit. Dado que la versión para PIC emite el sonido usando modulación de ancho de pulso, decidí utilizar este método para simular 16 niveles de voltaje (sonido de 4 bits), lo cual resultó bastante bien. Teniendo escrito ya el programa en código Z80 y adaptado para el beeper, decidí intentar la emisión de sonido digital utilizando el chip AY-3-8192 de la Spectrum 128K, también con buenos resultados. Pude entonces hacer versiones del programa para Timex Sinclair 2068 (utilizando el chip de sonido), MSX1 (también usando el PSG), e incluso ZX81, emitiendo el sonido por la salida MIC y señal de video, programa basado en la version Spectrum 48K (para beeper). La última variación desarrollada es para ZX81 con módulo Zon X, el cual contiene un PSG AY-3-8912, por lo que se hizo una mezcla entre la versión ZX81 y la versión para Spectrum 128K.

Historia del desarrollo

Videos de las distintas pruebas y versiones
Descargas (programas y manuales)

Estado del proyecto (27-Dic-2011):

Commodore 64
TAV64 versión 1.0: Emite el sonido usando el SID6581/8580. Es la única versión estable.

Sinclair ZX81
TAV81 beta 5: Emite el sonido usando PWM por el TV (requiere expansión a 16K)
TAV81 Zon X beta 5: Emite el sonido por el PSG AY-3-8912 de la expansión Zon X (requiere expansión a 16K)
Hay que hacer pruebas en la máquina real. Por el momento no dispongo de expansión a 16K ni interfaz Zon X.

Sinclair Spectrum 48K
TAVZX beta 4: Emite el sonido usando PWM por el beeper y salida MIC
Hay que reubicar el programa para que permita usar UDG.

Sinclair Spectrum 128K
TAVZX beta 4: Emite el sonido por el PSG AY-3-8912
Hay que reubicar el programa para que permita usar UDG.

Timex Sinclair 2068
TAV2068 beta 4: Emite el sonido por el PSG AY-3-8912
Esta versión es casi final.

MSX1
TAVMSX beta 4: Emite el sonido por el PSG AY-3-8910
Falta hacer más pruebas antes de pasar a la versión 1.0

Modo de uso del programa:

El sintetizador está diseñado para usarse desde el BASIC, en las versiones para computadoras Sinclair, se debe cargar el texto a hablar en la variable Z$ y luego llamar al sintetizador con la orden USR correspondiente a la versión del programa. En la versión para C64, se debe usar la variable ZZ$ y llamar al programa con la orden SYS, mientras que en la versión MSX se utiliza la misma orden USR para enviar el texto a hablar en la propia llamada.
El texto que se envía al sintetizador debe tener un formato determinado, estando representado cada sonido por una combinación de letras y símbolos, a la cual llamaremos comando. A continuación tenemos una tabla de los comandos permitidos para los fonemas. En la columna COMANDO se ve el texto que debe enviarse para emitir el fonema correspondiente.

COMANDO
FONEMA
DESCRIPCION
A
a
 
E
e
 
I
i
 
O
o
 
U
u
 
A+
á
Vocal acentuada
E+
é
Vocal acentuada
I+
í
Vocal acentuada
O+
ó
Vocal acentuada
U+
ú
Vocal acentuada
A-
a.
Ultima sílaba de la frase
E-
e.
Ultima sílaba de la frase
I-
i.
Ultima sílaba de la frase
O-
o.
Ultima sílaba de la frase
U-
u.
Ultima sílaba de la frase
B
b
 
CH
ch
 
D
d
 
F
f
 
G
g/gu
lueGo / áGUila / Gato / GUitarra
J
j
 Juego / Gente
K
k
 
L
l
 
M
m
 
N
n
 
P
p
 
R
rr
alaRRma / peRRo / RRoca / RRaíz
R2
r
caRa / aRena
S
s
 
T
t
 
SH
sh
LLamada / faLLa / aYer
' (apóstrofe)
Pausa
Espacio auxiliar (dentro de una palabra): 32 milisegundos
  (espacio)
Pausa
Espacio normal entre palabras: 50 milisegundos
, (coma)
Pausa
Espacio de 256 milisegundos (aprox. 1/4 de segundo)
;
Pausa
Espacio de 400 milisegundos (aprox. 1/2 segundo)
. (punto)
Pausa
Espacio de 1 segundo

Nota: En la versión del programa para ZX81 se cambió el comando apóstrofe por los dos puntos (:), ya que no existe apóstrofe en el conjunto de caracteres de la máquina.

Existen comandos extendidos que emiten sonidos que pueden usarse para indicaciones y alarmas en los programas:

COMANDO
DESCRIPCION
/0
Reproduce un tono (beep 1) con volumen fijo
/1
Reproduce un tono (beep 2) con volumen descendente
/2
Reproduce un sonido de alerta o error

El sintetizador dispone de dos tonos de voz que se pueden combinar en una misma frase, el tono se puede cambiar con los siguientes comandos:

COMANDO DESCRIPCION
< Cambia la voz al tono menor para el texto que sigue
> Cambia la voz al tono mayor (por defecto) para el texto que sigue

 

Actualizado el
27-Dic-2011

Accesos desde
25-Ago-2006:

© 2011 pastbytes.com - Prohibida su reproducción total o parcial sin autorización del autor
Las marcas, productos y logos que aparecen en este sitio pertenecen a sus respectivos propietarios