|
MICROSINT HR4 >
LENGUAJE DE CONTROL |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 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.
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).
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
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.
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
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. 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
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.
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
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
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
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í:
* 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) 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 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:
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:
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.
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:
|
© 2006-2017
Jorge Castillo - Todos
los derechos reservados
Las marcas,
productos y logos que aparecen en este sitio pertenecen
a sus respectivos propietarios
|