Logo microsint
Logo
                        pastbytes
Introducción
microSint
                        HR4
microSint HR6
microSint HD1
Descargas
Contacto
Foro
Ir a pastbytes
Introducción
uSint HR4
uSint HR6
uSint HD1
Descargas
Contacto
Foro
 
MICROSINT HR4 > LENGUAJE DE CONTROL
Introducción HR4 Especificaciones Conexión Funcionamiento interno Lenguaje de
                          control Síntesis de
                          voz Generación
                          de ruido Generación
                          de sonido


Icono
                    lenguaje
Este sintetizador de voz está basado en un conjunto reducido de fonemas del castellano, diseñado en principio en base al español rioplatense, por lo que faltan algunos fonemas usados en otras regiones. Se eliminaron letras redundantes como la Q, que debe ser reemplazada por K, la C, reemplazada por K o S según el caso, la V, reemplazada por B, la W, reemplazada por U, la X por KS, la Y por I, y la Z por S. Se conservaron letras como C y H solamente para formar los fonemas CH y SH. También se distinguen los dos sonidos de la R, fuerte y suave, y la G representa solamente su sonido característico, reemplazándose el otro por J.

En total se dispone de 21 fonemas, más 2 modos de acentuación para las vocales, pausas de varias duraciones y comandos de configuración y sonido.

El sintetizador recibe la información del usuario en ASCII, usando una codificación que puede variar entre 1 y 3 caracteres por sonido. Está diseñado para facilitar su uso desde un programa emulador de terminal, emitiendo sonido apenas recibe un comando válido, esto es, una secuencia de caracteres válida que represente un comando o sonido.

No se hace distinción entre mayúsculas y minúsculas ya que esto dificultaría su uso en algunas computadoras de 8 bits, los dos modos son aceptados indistintamente.

Los caracteres válidos son:

A E I O U B C D F G H J K L M N P R S T
0 1 2 3 4 5 6 7 8 9 + - ' _ , ; . / ( ) =

También son válidos el caracter espacio (ASCII 32 decimal, 20 hexadecimal), y los caracteres correspondientes a comandos inmediatos: ! (ASCII 33 decimal, 21 hexadecimal), DEL (ASCII 127 decimal, 7F hexadecimal), ESC (ASCII 27 decimal, 1B hexadecimal), TAB (ASCII 9 decimal/hexadecimal) y VT (ASCII 11 decimal, 0B hexadecimal).

Los caracteres V, X y Z sólo son válidos cuando se está en modo de configuración, los caracteres de retorno de carro y avance de línea se consideran válidos aunque no tienen ningún efecto en el sintetizador.

Cualquier otro caracter distinto recibido se considera inválido.

El sintetizador puede trabajar en dos modos distintos: el modo directo y el modo de configuración. El modo directo es el modo normal de operación, donde se envían los comandos de voz y los comandos extendidos, el modo de configuración sirve para ajustar varios parámetros de la voz y el sonido, y es accesible a través de comandos.

>> COMANDOS VARIABLES (FONEMAS E INSTRUMENTOS)

El sintetizador dispone de varios comandos, entre los cuales están los de configuración, los inmediatos, y los que generan sonido. Dentro de estos últimos, algunos son fijos y otros variables, en el sentido de que son afectados por la configuración de los comandos Z, N y C, para ajustar la nota y duración de los mismos (ver comandos de configuración).

Los comandos fijos, aquellos que no alteran su reproducción en ningún caso, son los siguientes: B, D, F, G, J, K, P, R, R2, S, T, el caracter espacio, los silencios de duraciones definidas, representados por los caracteres apóstrofe, coma, punto y coma, punto, y los comandos extendidos /0, /1 y /2 (ver comandos extendidos). Estos comandos no son afectados por el modo de repetición continua.

Los comandos variables, que pueden ser modificados por los comandos de configuración, son las vocales, los fonemas L, M, N, el espacio variable _ y los 5 instrumentos /3 a /7. Estos comandos son afectados por el modo de repetición continua, y estando en ese modo se reproducirán continuamente hasta recibir los comandos ! o DEL (ver otros comandos).

>> COMANDOS DE VOZ

Se considera un comando a una secuencia de caracteres ASCII que representa a un comando interno, no necesariamente un fonema. La tabla 1 muestra los comandos específicos para la generación de voz.

Algunos fonemas agregan por defecto una pausa inicial para separarlos del sonido que los precede, si se está usando estos fonemas en el inicio de una palabra, donde probablemente ya tengamos una pausa previa entre palabras, puede ser conveniente utilizar las versiones terminadas en 1, que eliminan esta pausa.

Los caracteres + y - se utilizan para dar entonación a las sílabas por medio de las vocales, si se agrega un + luego de una vocal se obtiene un tono mayor como el que da un acento, mientras que agregando un - a continuación de la vocal se logra un tono menor como al finalizar una oración. Esto también puede utilizarse como efecto para lograr algunas tonadas regionales.

Tabla 1 - Comandos directos de voz

COMANDO
FONEMA
DESCRIPCION
A
a

E
e

I
i

O
o

U
u

A+
á
Vocal acentuada, reproduce A con x semitonos más*
E+
é
Vocal acentuada, reproduce E con x semitonos más*
I+
í
Vocal acentuada, reproduce I con x semitonos más*
O+
ó
Vocal acentuada, reproduce O con x semitonos más*
U+
ú
Vocal acentuada, reproduce U con x semitonos más*
A-
a.
Ultima sílaba de la frase, A con x semitonos menos*
E-
e.
Ultima sílaba de la frase, E con x semitonos menos*
I-
i.
Ultima sílaba de la frase, I con x semitonos menos*
O-
o.
Ultima sílaba de la frase, O con x semitonos menos*
U-
u.
Ultima sílaba de la frase, U con x semitonos menos*
B


CH


CH1

Inicio de palabra, CH sin silencio inicial
D


F


F1

Inicio de palabra, F sin silencio inicial
G

lueGo/aGUila/Gato/GUitarra
J

Juego/Gente
K


K1

Inicio de palabra, K sin silencio inicial
L


M


N


P


P1

Inicio de palabra, P sin silencio inicial
R

alaRRma/peRRo/RRoca/RRaíz
R2

caRa/aRena
S


T


T1

Inicio de palabra, T sin silencio inicial
SH

LLamada/faLLa/aYer
'

32 mseg. (pausa auxiliar entre fonemas)
(Espacio)

50 mseg. (espacio normal entre palabras)
,

250 mseg.
;

400 mseg.
.

1000 mseg.
_

Silencio de duración configurable por comandos N y C

Se dispone también de varios silencios de duración predeterminada, y uno de duración variable, que pueden usarse para darle más naturalidad al habla.

El sintetizador de voz dispone de 21 fonemas y 6 silencios, de los cuales son variables los fonemas A, E, I, O, U, L, M, N, y el espacio _.

Es posible modificar tanto la duración en ciclos como el tipo de voz y la nota de los fonemas variables, por defecto el tipo de voz está definido con la nota Do de la octava 3 (C3), y la nota de la voz, como la nota Do de la octava 2 (C2). Tanto el tipo como la nota de la voz pueden redefinirse a un semitono y octava distintos. Para esto existen los comandos de configuración.


* La cantidad de semitonos que se suman o restan a la nota de la voz se puede especificar con el comando de configuración X (expresividad de la voz).

>> COMANDOS EXTENDIDOS

Existen otros comandos disponibles en modo directo que sirven para generar distintos sonidos, y son precedidos por el caracter /.

Tres de estos comandos generan sonidos predefinidos: /0, /1, /2.

Otros 5 comandos extendidos corresponden a instrumentos musicales: /3, /4, /5, /6 y /7.

Estos 5 instrumentos operan de manera similar, siendo afectados por la nota (N) y duración (C) actuales, el modo de modulación (M) y la envolvente seleccionada (E). Ver comandos de configuración.

También existe un comando, que si bien no entra directamente en la categoría de comando extendido, ya que no va precedido por /, su función es repetir el último instrumento ejecutado, esto es, el último comando reproducido que pertenezca al grupo /3 a /7. Este comando funciona como una continuación del último instrumento, se invoca con el caracter =, y tiene la particularidad de que conserva el estado de modulación de la última ejecución de instrumento. La utilidad de este comando se verá cuando se traten las envolventes y los modos de modulación, pero básicamente sirve para extender la duración de un instrumento continuando el desarrollo de la envolvente, es decir sin reiniciar la envolvente en la nueva ejecución.

Tabla 2 - Comandos extendidos

COMANDO
DESCRIPCION
/0
Beep: Emite un tono de frecuencia, duración y volumen fijos.
/1
Campanilla: Emite un tono de frecuencia y duración fijos, y volumen decreciente (beep con volumen descendente).
/2
Emite un sonido de error o alarma.
/3
Emite ruido al ritmo de la nota actual, con duración y envolvente configurables, siendo válidas las notas de C0 a C3.
/4
Emite sonido de bajo, de nota, duración y envolvente configurables.
/5
Emite sonido de órgano, de nota, duración y envolvente configurables.
/6
Emite sonido de guitarra eléctrica, de nota, duración y envolvente configurables.
/7
Emite sonido del instrumento en RAM, definido por el usuario, de nota, duración y envolvente configurables.

 

>> COMANDOS DE CONFIGURACION

Existen 7 comandos de configuración que permiten modificar parámetros generales tanto del sintetizador de voz como del generador de ruido y sonido.

El tono natural de la voz del sintetizador se corresponde con la frecuencia de la nota C3 (nota Do de la octava 3), pero es posible alterar esto mediante comandos de configuración, en un rango que va desde C0 hasta C6, aunque en la práctica es usable entre C1 y C4 si se quiere conservar la inteligibilidad.

La voz se forma mediante dos ondas configurables de forma independiente, la onda base es la que contiene las formantes, la que define el tipo de voz de una persona. La segunda onda es una envolvente que modula en amplitud a la onda base, y define la nota musical a la que sale la voz. Esta segunda onda suele tener una frecuencia menor que la de la onda base. Para cantar, basta con dejar fija la frecuencia de la onda base y alterar la nota de la envolvente.

Ya que el tono original es C3, esta voz se obtiene ajustando la onda base y la envolvente a la nota C3. Por defecto ese es el valor de la onda base, y la nota de la envolvente se ajusta en C2.

La nota de la envolvente define directamente la nota musical a la que sale el sonido, pero la nota de la onda base debe tomarse como una referencia con respecto a la voz original en C3, es decir por ejemplo que si se quiere bajar una octava al tipo de voz se debe ajustar la onda base a C2, mientras que si se quiere aumentar una octava se debe ajustar a C4.
Es posible ajustar la duración de los fonemas, especificándola como la cantidad de ciclos de la onda a emitir. Hay que tener en cuenta que la duración real dependerá de la nota de la envolvente, ya que 2 ciclos en la nota C3 durarán la mitad de tiempo que 2 ciclos en la nota C2, por ser la frecuencia exactamente el doble.

Cuando se utilizan comandos de voz, el comando de expresividad X permite configurar la cantidad de semitonos que se sumaran o restaran a la nota de la voz al ejecutar las vocales acentuadas, en un rango de 0 a 15. El valor por defecto es 3.

También se puede ajustar el volumen general del sonido, en un rango de 0 a 15.

Tabla 3 - Comandos de configuración

COMANDO
DESCRIPCION
Zon
Este comando modifica la nota de la onda base (el tipo de voz), y también la duración del ciclo de la envolvente, cuando se aplica a instrumentos musicales. Al comando Z le siguen dos dígitos, el primero indica la octava, de 0 a 6. El segundo indica el número de semitono (nota), de 0 a B (en hexadecimal).
Non
Este comando modifica la nota musical a la que se emite la voz. Al comando N le siguen dos dígitos, el primero indica la octava, de 0 a 6. El segundo indica el número de semitono (nota), de 0 a B (en hexadecimal).
Cxx
Al comando C le siguen dos dígitos en hexadecimal, indicando la cantidad de ciclos de duración de los fonemas, entre 00 y FF.
Xx
Al comando X le sigue un dígito en hexadecimal, indicando el nivel de expresividad de la voz, de 0 a F.
Vx
Al comando V le sigue un dígito en hexadecimal, indicando el volumen del sonido, de 0 a F.
Mx
Al comando M le sigue un dígito, indicando el modo de modulación del sonido en los instrumentos musicales (/3, /4, /5, /6 y /7).
M0    Deshabilita envolvente de ruido e instrumentos
M1    Habilita envolvente cíclica, rango de notas alto (baja duración)
M2    Habilita envolvente cíclica, rango de notas bajo (alta duración)
M3    Habilita envolvente única, rango de notas alto (baja duración)
M4    Habilita envolvente única, rango de notas bajo (alta duración)
Ex
Al comando E le sigue un dígito, indicando el número de envolvente a utilizar para modular el ruido y el sonido de los instrumentos musicales:.
E0    Envolvente triangular (asciende 1/4, desciende 3/4)
E1    Envolvente diente de sierra descendente
E2    Envolvente diente de sierra ascendente
E3    Envolvente definida por el instrumento en RAM
I
Al comando I le siguen 66 pares de dígitos hexadecimales, que representan 66 bytes que definen una onda.

El sintetizador dispone de un generador de ruido y 4 instrumentos musicales que son afectados por 3 comandos especiales, el primero define si se le aplicará una envolvente al sonido, y de ser así, cual de los dos rangos de duración se usará, y si la envolvente será repetitiva o sólo ejecutará un ciclo. El segundo selecciona una de 4 envolventes que se aplicará al habilitar la modulación, y el tercero permite cargar a la memoria RAM del sintetizador una onda, la que será asignada al instrumento 4.

Los comandos para modificar estos parámetros sólo pueden enviarse estando en el modo de configuración, de lo contrario serán ignorados. Para entrar a este modo, se debe enviar el comando ( el cual una vez recibido cambia el modo del sintetizador hasta recibir un comando ).

Ejemplo:

La voz por defecto se configura en el arranque de esta manera:

(Z30N20C06VFX3)    Base en C3, Nota en C2, Duración de 6 ciclos, Volumen 15, Expresividad 3.

>> OTROS COMANDOS

Existen comandos que no son secuenciables, y que el sintetizador procesa inmediatamente. Si bien todos son comandos inmediatos, llamaremos de esta forma solamente a los que no reciben respuesta del sintetizador, para distinguirlos de los comandos que sí lo hacen, como los comandos de escape y los comandos de entrada/salida.

Los comandos inmediatos son 3, uno de ellos sirve para definir el instrumento musical en RAM, cargando una secuencia de muestras a la memoria del sintetizador, mientras que los otros 2 controlan la operación del secuenciador.

Tabla 4 - Comandos inmediatos

COMANDO
DESCRIPCION
!
Detiene el sonido que se está reproduciendo, borrando todos los elementos pendientes en la lista de reproducción.
DEL
Detiene el sonido que se está reproduciendo, pero sin borrar la lista de reproducción, y continúa reproduciendo el siguiente elemento.
I
(Instrumento) Carga la tabla de ondas del instrumento /7 en RAM.

DEL corresponde al caracter DELETE, ASCII 127 decimal, 7F hexadecimal.

El comando I debe ejecutarse en modo de configuración, ya que de lo contrario se interpretaría como el fonema i. Este comando requiere que a continuación se envíen 66 bytes representando a las muestras de 8 bits que forman un ciclo del instrumento definido por el usuario, estos bytes deben enviarse como números hexadecimales (cada byte requiere dos caracteres representando su valor en hexadecimal). Este comando se verá en detalle en la sección microsint como generador de sonido.

Los comandos ! y DEL existen para sincronizar el secuenciador con eventos en tiempo real del controlador (la computadora o microcontrolador que envía secuencias al sintetizador). Puede ocurrir que el controlador esté enviando continuamente una secuencia de comandos para reproducir voz o sonido, y que en un momento deba cancelar la reproducción actual y enviar una nueva secuencia, como respuesta a algún evento no programado, como por ejemplo la pulsación de una tecla por parte del usuario, la colisión de dos objetos en un juego, etc. Dado que el sintetizador funciona como un secuenciador, la única manera de reaccionar ante un evento para cambiar la secuencia reproducida sería ir enviando los comandos uno por uno en el tiempo exacto en que deban ser reproducidos (para enviar el siguiente comando antes de que termine de reproducirse el anterior, evitando silencios intermedios). Si se tratara de aprovechar el buffer del sintetizador enviando una secuencia más larga, podría ocurrir que hubiera aún elementos para reproducir al momento de producido el evento, y habría que esperar antes de enviar una nueva secuencia. Para facilitar las cosas, el sintetizador permite que se envíe la secuencia en bloques de varios comandos, dejando que el secuenciador las procese a su tiempo, y que se utilice el comando ! para interrumpirla cuando sea necesario, enviando luego la nueva secuencia deseada.

Otra utilidad de los comandos ! y DEL está relacionada con el modo de repetición continua del sintetizador, al que se entra enviando la secuencia (C00). El comando de configuración C especifica la cantidad de ciclos de duración que tendrá cada ejecución de un fonema o instrumento musical, y el parámetro 00 en particular le indica al secuenciador que debe repetir el fonema o instrumento sin límite de duración, hasta que se le ordene detenerse con los comandos ! o DEL. Sería posible por ejemplo colocar al sintetizador en modo de repetición continua y enviar luego una secuencia de voz o sonido, la que quedaría repitiendo el primer elemento variable (fonema o instrumento), y se podría enviar un comando > cada vez que se recibiera algún evento, lo que haría avanzar la secuencia al siguiente elemento de la lista. Utilizando este método se podría hacer que el sintetizador cante, hable o genere sonido al ritmo de la pulsación de una tecla, de un reloj, o de cualquier otro evento.

Tabla 5 - Comandos de entrada/salida

COMANDO
DESCRIPCION
TAB
Devuelve el valor del potenciómetro X y el estado del botón 1.
VT
Devuelve el valor del potenciómetro Y y el estado del botón 2.

TAB corresponde al caracter "horizontal TAB", ASCII 9 decimal/hexadecimal.

VT corresponde al caracter "Vertical Tab", ASCII 11 decimal, 0B hexadecimal.

El sintetizador dispone de dos entradas analógicas pensadas para la lectura de los ejes de un joystick analógico compatible con el puerto de juegos de PC (conector DB15). Las entradas POTX y POTY se conectan a cada uno de los ejes del joystick, o a potenciómetros de 100K ohms, y las entradas BUTTON1 y BUTTON2 a sus correspondientes botones de disparo.

Cada uno de estos comandos hace que el sintetizador responda inmediatamente con un byte que contiene en los bits 0 a 6 el valor del potenciómetro correspondiente, y en el bit 7 el estado del botón de disparo correspondiente.

Tabla 6 - Comandos de escape

COMANDO
DESCRIPCION
Esc V
Consulta el modelo y la versión del firmware del sintetizador.

Este comando sirve para detectar la presencia de un sintetizador de voz, y consultar el modelo y la versión del firmware. La secuencia comienza con el caracter ESC, ASCII 27 decimal, 1B hexadecimal, sigue con la letra V, y luego 5 caracteres NUL, ASCII 0 decimal/hexadecimal. Inmediatamente luego de recibida la letra V, el sintetizador enviará la primera letra del modelo del sintetizador, que en este caso sera H, luego enviará un byte de la secuencia de versión por cada caracter NUL que se le envíe.

La secuencia de envío y recepción se puede ver aquí:

-> HR4
Esc
V
NUL
NUL
NUL
NUL
NUL

<- HR4

Esc (*)
'H'
'R'
4
V1
V2
V3

* El sintetizador sólo devolverá el caracter ESC si tiene habilitado el eco de RS232 (deshabilitado por defecto).

La primera fila muestra la secuencia de 7 bytes que debe enviarse al sintetizador para este comando, y la segunda fila muestra las respuestas del sintetizador.

Veamos primero como es la secuencia de versión que envía el sintetizador, que está compuesta de 6 bytes. Los primeros 3 bytes determinan el modelo del sintetizador, en este caso HR4, y los otros 3 la versión del firmware.

Byte 1: 'H' (letra H, ASCII 72 decimal, 48 hexadecimal)
Byte 2: 'R' (letra R, ASCII 82 decimal, 52 hexadecimal)
Byte 3: 4 (valor binario indicando el número de sintetizador, en este caso 4)
Byte 4: Valor binario indicando el primer número de versión del firmware
Byte 5: Valor binario indicando el segundo número de versión del firmware
Byte 6: Valor binario indicando el tercer número de versión del firmware y su estado (alfa, beta, final)

La versión del firmware se especifica con 3 números, los dos primeros son directos, ya que corresponden a los números separados por un punto, por ejemplo para la versión 1.2, el byte 4 tendría el valor 1 y el byte 5 el valor 2.

El tercer número indica el estado del firmware y su versión en caso de ser alfa o beta.

Los valores se interpretan de esta manera:

0...127        ->    ALFA 1...ALFA 128
128...254    ->    BETA 1...BETA 127
255        ->    FINAL

Si el byte 6 tiene un valor entre 0 y 127, el firmware es alfa y se suma 1 para obtener el tercer número de versión.

Si el byte 6 tiene  un valor entre 128 y 254, el firmware es beta y se resta 127 para obtener el tercer número de versión.

Si el byte 6 es 255, el firmware es final.

También puede interpretarse como un valor entre 0 y 255, ya que 0 corresponde a alfa 1 y 255 a una versión final, por lo que puede usarse como un valor absoluto para comparar contra una versión mínima requerida.

Ahora volvamos a ver la secuencia:

-> HR4
Esc
V
NUL
NUL
NUL
NUL
NUL

<- HR4

Esc (*)
'H'
'R'
4
V1
V2
V3

El sintetizador responde con un byte inmediatamente despues de recibido un comando que exige respuesta. La secuencia esta pensada para que el controlador no necesite estar continuamente verificando la recepcion de datos, ya que cualquier byte que envia el sintetizador es una respuesta especifica e inmediata a otro byte enviado por el controlador. De esta manera, el controlador sabe exactamente cuando recibira datos desde el sintetizador, lo cual facilita la comunicación half-duplex a altas velocidades, en particular si el controlador no dispone de UART.

La secuencia ocurre de esta manera:

-> HR4
Esc
V






<- HR4

Esc (*)
'H'





El controlador envia el caracter ESC, seguido de la letra V, e inmediatamente despues recibe el byte 1, conteniendo la letra H. No hay limite de tiempo entre el envio de ESC y V, pero luego de V debe recibirse inmediatamente la respuesta del sintetizador.

-> HR4


NUL





<- HR4



'R'




El controlador envia el caracter NUL, e inmediatamente recibe el byte 2, conteniendo la letra R.

Este ultimo paso se repite 5 veces mas para completar la secuencia de version.

En los diagramas se muestra el envio y recepcion solapados, porque en un controlador con UART pueden ocurrir simultaneamente, sin embargo nada impide realizar la secuencia de este modo:

-> HR4
Esc
V

NUL

NUL


<- HR4


'H'

'R'

4



© 2006-2017 Jorge Castillo - Todos los derechos reservados
Las marcas, productos y logos que aparecen en este sitio pertenecen a sus respectivos propietarios