# módulos &arts;

## Introducción

Este capítulo describe todos los módulos estándar de &arts;. Una de las características más potentes de &arts;, es que los módulos se pueden conectar juntos en estructuras para implementar nuevas funciones como efectos e instrumentos.

Los módulos se dividen en dos categorías. Los módulos de síntesis se usan para implementar las «tuberías» que manipulan las transmisiones de datos multimedia para añadir nuevos efectos, instrumentos, mezcladores y aplicaciones. Los módulos visuales le permiten proporcionar una interfaz gráfica de usuario para controlar las estructuras de sonido que se construyen con los módulos de síntesis.

## Referencia de módulos de síntesis

### Aritmética + Mezclas

#### Synth_ADD

Synth_ADD

Añade dos señales.

#### Synth_MUL

Synth_MUL

Multiplica una señal por un factor. Puede usarlo para reducir señales (0 < factor < 1), aumentarlas (factor > 1) o invertirlas (factor < 0). Fíjese que el factor debe ser una señal y no una constante (⪚ una envoltura o una señal real).

#### Synth_DIV

Synth_DIV

Divide una señal por un factor. Puede utilizarlo para dividir una señal por otra. O cambia valor1 a 1 y obtendrá un valor recíproco de valor2 como valor de salida. Tenga cuidado de que valor2 nunca alcance 0 o tendrá problemas con las divisiones por cero.

#### Synth_MULTI_ADD

Synth_MULTI_ADD

Añade un número arbitrario de señales. Si necesita sumar las ondas producidas por cuatro osciladores diferentes, puede por ejemplo, conectar todas sus salidas a un módulo Synt_MULTI_ADD. Ésto es más eficiente que usar tres módulos Synth_ADD.

#### Synth_XFADE

Synth_XFADE

Cruza dos señales. Si el porcentaje de entrada es -1, sólo se escucha la señal izquierda y si es 1, sólo se escucha la señal derecha. Cuando es 0, ambas señales se escuchan con el mismo volumen.

Permite asegurar que su señal permanezca en un rango bien definido. Si tiene dos señales entre -1 y 1 antes del fundido cruzado mantendrán el mismo rango después de él.

#### Synth_AUTOPANNER

Es el opuesto al fundido. Toma una señal mono y la divide en una señal estéreo: Se utiliza para envolver la señal de entrada entre las salidas izquierda y derecha. Esto hace mezclas más animadas. Una aplicación estándar podría ser una guitarra o un sonido brusco.

Conecte un LFO, a una onda sinusoidal o de diente de sierra, por ejemplo, 'inlfo', y seleccione una frecuencia ente 0,1 y 5Hz para obtener un efecto tradicional o más para los efectos especiales.

### Buses

#### Synth_BUS_UPLINK

Synth_BUS_UPLINK

Un enlace de subida para un bus. Proporciona las señales izquierda y derecha, y el nombre del bus en el que los datos deberían ir en el puerto del «bus». La señal combinada de todos los enlaces de subida con este nombre aparecerán en cada enlace de bajada de este «bus».

#### Synth_BUS_DOWNLINK

Synth_BUS_DOWNLINK

Obtiene (la suma de) todos los datos y los coloca en un determinado bus (con el nombre que especificó en el puerto del «bus»).

### Retrasos

#### Synth_DELAY

Retrasa la señal entrante durante una cantidad de tiempo. La especificación del tiempo debe estar entre 0 y maxdelay para un retraso entre 0 y maxdelay segundos.

Este tipo de retraso no se utilizará en estructuras de retroalimentación. Esto es debido a que se trata de una variable de retraso. Puede modificar su longitud mientras se está ejecutando, e incluso asignarle un valor inferior a 0. Pero como en una estructura de retroalimentación la propia salida se necesita para calcular las siguientes muestras, un retraso cuyo valor caiga a cero puede producir una situación de parada.

Utilice CDELAY en esta configuración, quizá combinando una pequeña constante de retraso (de 0,001 segundos) con un retraso flexible.

También puede combinar CDELAY y un DELAY para conseguir un retraso de tamaño variable con un valor mínimo en un bucle de retroalimentación. Asegúrese de incluir un CDELAY.

#### Synth_CDELAY

Synth_CDELAY

Retrasa la señal de entrada durante una cantidad de tiempo. El tiempo especificado debe ser mayor que 0 para un retraso de 0 segundos o más. El retraso es constante durante los cálculos, lo que significa que no se puede modificar.

Esto ahorra tiempo de computación sino se hace ninguna interpolación, y es práctico para estructuras recursivas. Vea la descripción anterior (Synth_DELAY).

### Envoltorios

#### Synth_ENVELOPE_ADSR

Synth_ENVELOPE_ADSR

Es un envoltorio ADSR clásico lo que significa que puede especificar:

active

- Si la nota está siendo pulsada en ese momento por el usuario.

invalue

- La señal de entrada.

attack

- El tiempo que debe pasar entre que el usuario presiona una nota y la señal alcanza su máxima amplitud (en segundos).

decay

- El tiempo que debe pasar entre que la señal alcanza su máxima amplitud y regresa a algún valor constante (en segundos).

sustain

- El valor constante al que se mantiene la señal más tarde, hasta que el usuario suelte la nota.

release

- El tiempo que debe pasar entre que el usuario suelta una nota hasta que la señal es reducida hasta cero (en segundos).

Podrá escalar la señal en el valor de salida. Si el envoltorio ASDR ha finalizado, valdrá 1. Puede utilizar ésto para proporcionar una salida «hecho» para un instrumento (que hará que la estructura del instrumento sea borrada por el enrutador de objetos &MIDI; después de que la fase de inicio haya finalizado).

#### Synth_PSCALE

Synth_PSCALE

El módulo Synth_PSCALE escalará el flujo de audio que se dirige a través de él desde volumen 0 (silencio) a 1 (sonido original) volviendo a 0 (silencio), según la posición (la posición se obtiene desde Synth_SEQUENCE). La posición donde el pico debe ocurrir puede darse como pos.

Ejemplo: Estableciendo top a 0,1 significa que después de que se reproduzca el 10% de la nota, el volumen debe alcanzar el máximo y empezar a decaer después.

### Efectos

#### Synth_FREEVERB

Synth_FREEVERB

Es un efecto de reverberación. En la implementación actual, está pensado para pasar una señal estéreo a través del reverberador, y que él -añada- su efecto de reverberación a la señal.

Ésto significa que puede usarse dentro de un StereoEffectStack perfectamente.

La señal de entrada debe conectarse a (inleft, inright), y la señal de salida a (outleft, outright).

Los parámetros que puede configurar son:

roomsize

- El tamaño de la habitación que la reverberación simula (rango: 0..1, donde 1 es la habitación más grande posible).

damp

- Especifica un filtro que hace que la habitación simulada absorba las altas frecuencias (rango 0..1, donde 1 significa que la absorción de altas frecuencias es más agresiva).

wet

- La cantidad de señal de reverberación (esto es, la cantidad de señal que debería ser modificada por los filtros, resultando un sonido «mojado», esto es «sonido reverberado»).

dry

- La cantidad de señal pura pasada, resultando un eco (o combinado con un retraso) más que un efecto de reverberación (rango: 0..1).

width

- La cantidad de efecto estéreo que el algoritmo de reverberación añade al efecto de reverberación, haciendo que el sonido tenga un estéreo más amplio (rago:0..1).

mode

- [ PENDIENTE: Creo que si el modo es 1, la reverberación mantiene la imagen actual del sonido, mientras que 0 es la operación normal ]

#### Synth_TREMOLO

Synth_TREMOLO

El módulo trémolo modula la amplitud según una onda LFO. Normalmente usaría una onda sinusoidal, pero, ¿por qué limitarse?. Lo que obtiene es un efecto muy intenso que atraviesa muchos arreglos debido a su rango altamente dinámico. El efecto trémolo es aún uno de los efectos favoritos de los guitarristas, aunque ya no es tan popular como en los años 60.

[ PENDIENTE: actualmente está implementado como invalue + abs(inlfo) - quizá tendría más sentido implementarlo como invalue * (1+inlfo*profundidad), donde profundidad sería un parámetro entre 0..1 - a decidir después de &kde;2.1. Si tiene algún comentario, envíe un correo a la lista de &arts; ;).]

#### Synth_FX_CFLANGER

Synth_FX_CFLANGER

Un flanger es un efecto de retraso de tiempo variable. Este módulo se proporciona para hacer más fácil el desarrollo de complejos efectos flanger, el cual contiene el núcleo de un flanger de un canal.

Contiene los siguientes puertos:

invalue

- La señal que desea procesar.

lfo

- Preferiblemente una onda sinusoidal que module el tiempo de retraso dentro del flanger (-1 .. 1).

mintime

- El valor mínimo para un retraso dentro de este efecto en milisegundos. Valores sugeridos: intente utilizar valores como 1 ms. Por favor, utilice valores < 1.000 ms.

maxtime

- El valor máximo para un retraso dentro de este efecto en milisegundos. Valores sugeridos: intente utilizar valores como 5 ms. Por favor, utilice valores < 1.000 ms.

outvalue

- La señal de salida. Es importante que mezcle esto con la señal original para obtener el efecto deseado.

Puede usar esto como base para un efecto de coro.

### Filtros

#### Synth_PITCH_SHIFT

Synth_PITCH_SHIFT

El efecto pitch shifting (desplazamiento del tono) cambia la frecuencia de la señal de entrada sin afectar a la velocidad. Una aplicación para esto es, por ejemplo, cambiar el tono de su voz mientras lo graba (y reproduce) en tiempo real.

El parámetro speed es la velocidad relativa con la que la señal se reproducirá. Por lo que una speed de dos haría el sonido dos veces más alto (&ie;, una frecuencia de entrada de 440 Hz daría como resultado una señal de salida de 880 Hz).

El parámetro frequency se usa internamente para cambiar entre diferentes granos de la señal. Es ajustable, y dependiendo de su elección, el desplazamiento del tono sonará más o menos realista para usar según su caso. Un buen valor para empezar es con algo como 5 ó 10.

#### Synth_SHELVE_CUTOFF

Synth_SHELVE_CUTOFF

Elimina todas las frecuencias por encima de la frecuencia de corte.

#### Synth_BRICKWALL_LIMITER

Synth_BRICKWALL_LIMITER

Este módulo recorta una señal para que se ajuste al rango [-1, 1]. No hace nada para evitar la distorsión que se produce cuando se recortan señales altas. Puede usar ésto como un efecto (por ejemplo, para crear una onda sinusoidal ligeramente cortada). Sin embargo, probablemente sea una buena idea enviar posteriormente la señal a través un filtro de paso bajo, si lo usa, para hacer que suene menos agresivo.

#### Synth_STD_EQUALIZER

Synth_STD_EQUALIZER

Este es un interesante bloque de ecualizador parametrizado. Sus parámetros son:

invalue, outvalue

- La señal que se filtrará por el ecualizador.

low

- Cómo se deben cambiar las bajas frecuencias. El valor es en dB, mientras 0 significa no cambiar las bajas frecuencias, -6 significaría reducirlas 6 dB, y +6 significaría aumentarlas 6 dB.

mid

- Cómo debe cambiar el ecualizador las frecuencias medias, en dB (mirar abajo).

high

- Cómo debe cambiar el ecualizador las frecuencias altas, en dB (mirar abajo).

frequency

- Es la frecuencia central del ecualizador en Hz, las frecuencias medias están alrededor de ese espectro, y las bajas y altas frecuencias por debajo y encima. Fíjese que esa frecuencia no puede ser mayor que la mitad que el ratio de muestreo, normalmente en los 22.050 Hz, y tampoco menor que 1 Hz.

q

- Esto influye en la extensión del espectro central. Debería ser un número positivo > 0. Un valor de uno es razonable, valores más altos de q corresponden a valores más estrechos de espectro de frecuencias intermedias. Valores inferiores a uno se corresponden a un espectro amplio.

#### Synth_RC

Synth_RC

Un filtro por resonancia filtra todas las secuencias alrededor de un determinado pico. Ésto no es una forma práctica de especificar frecuencias intermedias (que no se cortará), ya que la entrada son dos constantes externas, f y b. El código es muy antiguo, de los primeros días de los sintetizadores, y probablemente será reemplazado por un filtro nuevo que tenga como parámetros la frecuencia y la resonancia.

Pruebe con algo como b=5, f=5 ó b=10, f=10 ó b=15, f=15.

#### Synth_MOOG_VCF

Synth_MOOG_VCF

Filtra todas las frecuencias por encima de la frecuencia de corte (es un filtro de 24db con 4 polos, lo que filtra -24db por octava por encima de la frecuencia de corte), pero ofrece un parámetro adicional para ajustar la resonancia del filtro, de forma que 0 significa sin resonancia y 4 auto-oscilación.

### MIDI + Secuenciado

#### Synth_MIDI_TEST

Synth_MIDI_TEST

Este módulo carga la estructura de un instrumento desde un archivo, y se registra a sí mismo como salida midi en el administrador &MIDI; de &arts;. Las notas enviadas a esta salida resultarán en voces del instrumento.

Es más fácil configurar ésto en &artscontrol; que hacerlo manualmente en &arts-builder;.

#### Synth_SEQUENCE

Reproducirá una secuencia de notas una y otra vez. Las notas se dan en notación de tracker, y se separan por punto y coma. Un ejemplo es `A-3;C-4;E-4;C-4`. La velocidad se da como segundos por nota, por lo que si quiere obtener 120 bpm, especifique algo como 0,5 segundos/nota, ya que 60 segundos/0,5 segundos por nota=120 bpm.

Puede dar a cada nota una longitud relativa a la velocidad usando dos puntos después de la nota y después poniendo la longitud. Un ejemplo es `A-3:2;C-4:0,5;D-4:0,5;E-4;`. Como puede ver, los programas de composición midi tienden a ser más confortables ;)

Synth_SEQUENCE proporciona información adicional sobre la nota que se está reproduciendo en ese momento, donde 0 significa que acaba de empezar y 1 que acabó. Esta información puede ser usada por Synth_PSCALE.

#### Synth_SEQUENCE_FREQ

Este módulo funciona como Synth_SEQUENCE con la única diferencia de que no escribe los nombres de las notas sino las frecuencias.

### Muestras

#### Synth_PLAY_WAV

Synth_PLAY_WAV

Reproducirá un archivo `wav`. Sólo estará presente si dispone de libaudiofile en su ordenador. El archivo wav empezará tan pronto como el módulo se cree.

Parará tan pronto como se termine, entonces finished se establecerá a 1. El parámetro speed puede usarse para reproducir el archivo más rápido o más lento, donde 1 es la velocidad normal (la grabada).

### E/S de sonido

#### Synth_PLAY

Synth_PLAY

Normalmente no necesitará este módulo, a menos que esté escribiendo aplicaciones independientes. Normalmente dentro de &artsd;, ya existe un módulo Synth_PLAY, y crear otro no funcionará.

El módulo Synth_PLAY sacará la señal de audio por la tarjeta de sonido. Los canales izquierdo y derecho deben contener la entrada normalizada para los canales. Si su entrada no está entre -1 y 1, obtendrá cortes.

Como ya se dijo, puede haber solo un módulo Synth_PLAY en uso, ya que este accede directamente a la tarjeta de sonido. Use buses si desea mezclar más de una transmisión antes de la reproducción. Use el módulo Synth_AMAN_PLAY para obtener algo como una salida de audio dentro de &artsd;.

Tenga en cuenta que Synth_PLAY también hace la sincronización de la estructura completa. Esto significa: no hay Synth_PLAY = no hay fuente de sincronización = no hay sonido. Por tanto, necesitará (exactamente) un objeto Synth_PLAY.

#### Synth_RECORD

Synth_RECORD

Normalmente no necesitará este módulo, a menos que vaya a escribir aplicaciones independientes. Normalmente dentro de artsd, ya existe un módulo Synth_RECORD, y crear otro no funcionará.

El módulo Synth_RECORD grabará una señal desde la tarjeta de sonido. Los canales derecho e izquierdo contendrán la entrada de los canales (entre -1 y 1).

Como ya se mencionó, solo se puede utilizar un módulo Synth_RECORD, ya que tiene acceso directo a su tarjeta de sonido. Utilice los buses si desea utilizar la grabación de la transmisión de audio en más de un lugar. Utilice el módulo Synth_AMAN_RECORD para obtener algo parecido a una entrada de artsd. Para que esto funcione, &artsd; debe ejecutarse con el full duplex activo (transmisión bidireccional).

#### Synth_AMAN_PLAY

Synth_AMAN_PLAY

El módulo Synth_AMAN_PLAY sacará su señal de audio. Es mejor (pero no necesario) que saque una señal normalizada (entre -1 y 1).

Este módulo usará el administrador de audio para asignar donde se reproducirá la señal. El administrador de audio puede controlarse a través de &artscontrol;. Para hacer más intuitivo su uso, es bueno dar a la señal que reproduce un nombre. Ésto puede hacerse a través de la opción title. Otra característica del administrador de audio es el ser capaz de recordar dónde reprodujo una señal la última vez. Para hacerlo necesita ser capaz de distinguir señales. Es por eso por lo que debe asignar un nombre único a autoRestoreID también.

#### Synth_AMAN_RECORD

Synth_AMAN_RECORD

El módulo Synth_AMAN_RECORD grabará una señal de audio desde una fuente externa (&ie;, un micrófono) en &artsd;. La señal será una señal normalizada (entre -1 y 1).

Este módulo usará el administrador de audio para asignar donde se reproducirá la señal. El administrador de audio puede controlarse a través de artscontrol. Para hacer más intuitivo su uso, es bueno dar a la señal que reproduce un nombre. Ésto puede hacerse a través de la opción title. Otra característica del administrador de audio es el ser capaz de recordar donde grabó una señal la última vez. Para hacerlo necesita ser capaz de distinguir señales. Es por eso por lo que debe asignar un nombre único a autoRestoreID también.

#### Synth_CAPTURE

Synth_CAPTURE

El módulo Synth_CAPTURE escribirá una señal de audio a un archivo wav en su disco duro. El archivo se llamará `/tmp/mcop-`nombreusuario`/capture.wav`

### Pruebas

#### Synth_NIL

Synth_NIL

No hace nada. Es útil solamente en situaciones de pruebas.

#### Synth_DEBUG

Synth_DEBUG

Puede utilizar esto para la depuración. Se imprimirá el valor de la señal de 'invalue' en intervalos regulares (por ejemplo, 1 por segundo), combinada con el comentario que haya establecido. De esta forma podrá encontrar si algunas señales se encuentran dentro de ciertos rangos, o si están en cualquiera.

#### Synth_MIDI_DEBUG

Synth_MIDI_DEBUG

Puede utilizar esto para depurar la forma en que los eventos &MIDI; están llegando a &arts;.

Cuando un MIDI_DEBUG está ejecutando &artsserver; imprimirá líneas como:

    201 100753.837585 on 0 42 127

    202 101323.128355 off 0 42

Mientras que la primera línea le dice que 100.753ms (esto es 100 segundos) después de que se inicie el MIDI_DEBUG, llegó un evento al canal 0. Este evento tiene la velocidad (volumen) de 127, la más alta posible. La siguiente línea muestra el evento de liberación del midi. [PENDIENTE: esto no funciona correctamente, hacerlo funcionar, y hacerlo a través del administrador &MIDI; ].

#### Synth_DATA

Synth_DATA

Crea una señal con un valor constante.

### Oscilación y modulación

#### Synth_FREQUENCY

Synth_FREQUENCY

Todos los osciladores en &arts; no precisan un frecuencia como entrada, pero sí de una posición en la onda. La posición debería estar entre 0 y 1, que se mapeará como un objeto Synth_WAVE_SIN estándar en el intervalo 0..2*pi. Para generar valores de oscilación para un frecuencia se utiliza el módulo Synth_FREQUENCY.

#### Synth_FM_SOURCE

Synth_FM_SOURCE

Esto se utiliza para modular la frecuencia. Coloque su frecuencia en la entrada de frecuencia y coloque otra señal en la entrada modulador. A continuación defina el nivel de modulación (modlevel) a algo similar a 0,3. La frecuencia se modulará con el modulador. Inténtelo. Funciona bien cuando sitúa una retroalimentación en él, lo que significa tener una combinación de señal de salida retrasada respecto a Synth_FM_SOURCE (necesitará colocarlo en algún oscilador de forma que tome el papel de Synth_FREQUENCY) y de alguna otra señal para obtener buenos resultados.

Funciona muy bien en combinación con osciladores Synth_WAVE_SIN.

### Formas de onda

#### Synth_WAVE_SIN

Synth_WAVE_SIN

Oscilador sinusoidal. Coloque una señal 'pos' de Synth_FREQUENCY o de Synth_FM_SOURCE en la entrada. Así obtendrá una onda sinusoidal como salida. La señal 'pos' especifica la posición en la onda, el rango 0..1 es mapeado internamente como 0..*pi.

#### Synth_WAVE_TRI

Synth_WAVE_TRI

Oscilador triangular. Coloque una señal 'pos' de Synth_FREQUENCY o de Synth_FM_SOURCE en la entrada. Así obtendrá una onda triangular como salida. La señal 'pos' especifica la posición en la onda, el rango 0..1 se mapeará internamente como 0..2*pi. Tenga cuidado. La señal de entrada debería estar en el rango 0..1 para que la señal de salida pueda producir buenos resultados.

#### Synth_NOISE

Synth_NOISE

Generador de ruido. Genera una señal aleatoria entre -1 y 1.

#### Synth_WAVE_SQUARE

Synth_WAVE_SQUARE

Oscilador de ondas cuadradas. Coloque una señal 'pos' de Synth_FREQUENCY o de Synth_FM_SOURCE en la entrada. Así obtendrá una onda cuadrada como salida. La señal 'pos' especifica la posición en la onda, el rango 0..1 se mapeará internamente como 0..2*pi. Tenga cuidado. La señal de entrada debería estar en el rango 0..1 para la señal de salida para producir buenos resultados.

#### Synth_WAVE_SOFTSAW

Synth_WAVE_SOFTSAW

Oscilador de ondas de diente de sierra. Similar al oscilador Synth_WAVE_TRI. Coloque una señal 'pos' de Synth_FREQUENCY o de Synth_FM_SOURCE en la entrada. Así obtendrá un onda de diente de sierra como salida. La señal 'pos' especifica la posición en la onda, el rango 0..1 se mapeará internamente como 0..2*pi. Tenga cuidado. La señal de entrada debería estar en el rango 0..1 para la señal de salida para producir buenos resultados.

#### Synth_WAVE_PULSE

Synth_WAVE_PULSE

Oscilador de pulso - este modulo es similar en la idea al oscilador rectangular (Synth_WAVE_RECT), pero proporciona un relación configurable del nivel alto/bajo a través del parámetro dutycycle. Coloque una señal 'pos' de Synth_FREQUENCY o de Synth_FM_SOURCE en la entrada. Así obtendrá un onda de pulso como salida. La señal 'pos' especifica la posición en la onda, el rango 0..1 se mapeará internamente como 0..2*pi. Tenga cuidado. La señal de entrada debería estar en el rango 0..1 para la señal de salida para producir buenos resultados.

### Varios

#### Synth_COMPRESSOR

Este módulo reduce el rango dinámico de la señal. Por ejemplo, los compresores son prácticos para compensar las variaciones de amplitud de intensidad cuando alguien habla por el micrófono.

Tan pronto como el nivel de entrada exceda un determinado nivel (el umbral) la señal se comprimirá. Simplemente multiplica todo lo que esté por el encima del umbral con el ratio, que debería ser un número entre 0 y 1. Finalmente la señal completa se multiplica por el factor de salida.

Los argumentos attack y release retrasa el inicio y el final de la compresión. Use esto si, por ejemplo, aún desea escuchar el ruidoso inicio de una base de tambores. El argumento es en milisegundos y un attack o release de 0ms es posible pero puede producir un ligero ruido.

## Referencia de módulos visuales

PENDIENTE para cuando los módulos visuales estén más «terminados».