Proyecto Sintetizador Documentacion Version 1.0 - Miércoles 01 Julio 2009
Volver al indice

Introducción a la biblioteca JSyn

1. Introducción
JSyn es una biblioteca que fue diseñada especialmente para el manejo de señales de audio en Java. Las clases se pueden representar en general, como bloques con puertos asociados. Un aspecto importante es que esta biblioteca permite hacer uso de las clases compiladas pero no de los codigos en si, por lo tanto el desarrollo se debe hacer en base a la documentación disponible en su página web, entre la cual hay varios artículos como una documentación al estilo API. También hay un tutorial y una guia para el programador.

2. Clases
Por ejemplo una clase implementada en esta biblioteca y utilizada en el proyecto es la clase SawToothOscillator, es decir un oscilador con una forma de onda tipo diente de sierra. Esta clase tiene una serie atributos y métodos que pueden ser vistos en su documentación. Además tiene unos objetos que conviene mejor verlos como puertos que a su vez pueden ser clasificados como de entrada, de salida y de control. En la clase SawToothOscillator existen 4 puertos: amplitud, frecuencia, fase y salida. Los tres primeros corresponden a puertos de control en los cuales se pueden ajustar los parametros tipicos de un oscilador. El último puerto corresponde a la salida del módulo. En este caso no se tiene puerto de entrada, pero clases como Filter_LowPass, que implementa un filtro pasa bajos, si lo tiene.

3. Programación y sintaxis
Para hacer uso de la biblioteca se debe tener en cuenta algunas cosas:

·Para compilar un programa que usa esta biblioteca de códigos se debe incluir el archivo jsyn.jar al proyecto y se debe agregar el archivo JSynV144.dll al directorio windows\system32\ del sistema operativo o su equivalente en unix. Más información en la guía de instalación.

·Antes de cualquier implementación se debe ejecutar el siguiente comando. Esto se hace para inicializar el sistema:
>> Synth.startEngine(0);

·La creación de instancias de objetos se hace de la forma ya conocida con new:
>> myLfoSin = new SineOscillator();
donde myLfoSin es un objeto del tipo SineOscillator.

·Existe un método llamado connect() que asocia el puerto de un objeto con el puerto de otro. Por ejemplo se puede conectar la salida de un oscilador a la entrada de un filtro:
>> myLfoSqr.output.connect(myLfoFilterLP.input);
donde myLfoSqr es un objeto del tipo SquareOscillator y myLfoFilterLP en uno del tipo Filter_LowPass.

·Una vez creados todos los módulos se hace un llamado al método start() para partir la ejecuición de los módulos:
>> myLfoSqr.start();

·La modificación de parámetros se hace mediante métodos como set(). A continuación un par de ejemplos:
>> myOscFilterLP.Q.set(val);
>> myOscFilterLP.frequency.set(val);

En la primera línea de código se establece el valor del parámetro Q del filtro pasa bajos "myOscFilterLP" y en la segunda línea se modifica la frecuencia de corte del mismo filtro.

·Si se requiere, se puede hacer uso del método stop() y así detener la ejecución del módulo en cuestión:
>> myLfoSqr.stop();
En la implementación de nuestro proyecto no fue necesario esto ya que no se necesitaba detener los módulos.

·Asi como se inicializa el sistema se debe ejecutar la siguiente línea de codigo al terminar el programa:
>> Synth.stopEngine();

4. Más información
Para conocer más detalles de la programación de clases de esta biblioteca recomendamos la lectura del tutorial y/o la guia para el programador.


Volver al indice