FLOSS Manuals

 English |  Español |  Français |  Italiano |  Português |  Русский |  Shqip

CSOUND Español

AUDIO EN VIVO

Al igual que en la configuración MIDI, las interfaces de Csound estándares como CsoundQt, Cabbage y Blue poseen su propia manera de configurar el audio. La siguiente descripción es útil para entender lo que sucede entre bastidores y debe ser tenido en cuenta sólo si se utiliza Csound a través de la línea de comandos.

Selección del Dispositivo de Audio

Csound se refiere a las diversas entradas y salidas de los dispositivos de sonido instalados en su computadora como una lista numerada. Si desea enviar o recibir audio a una conexión de audio específica, necesitará saber el número por el que Csound lo conoce. Si no está seguro de cuál es ese númenro, puede "engañar" a Csound para que le proporcione una lista de dispositivos disponibles al intentar ejecutar Csound usando un número de dispositivo que seguramente esté fuera de rango, tal como se demuestra en el siguiente ejemplo:

   EXAMPLE 02D01_GetDeviceList.csd

<CsoundSynthesizer>
<CsOptions>
-iadc999 -odac999
</CsOptions>
<CsInstruments>
;Example by Andrés Cabrera
instr 1
endin
</CsInstruments>
<CsScore>
</CsScore>
</CsoundSynthesizer>

Los dispositivos de entrada (-i) y de salida (-o) se listarán por separado.1 Especifique su dispositivo de entrada mediante el argumento -iadc y el número de su dispositivo de entrada y su dispositivo de salida con la opción -odac y el número de su dispositivo de salida. Por ejemplo, si selecciona uno de los dispositivos de la lista anterior, tanto para la entrada como para la salida, puede incluir algo como

-iadc2 -odac3

en la sección <CsOptions> de su archivo .csd.

Si no especifica ningún número de dispositivo, Csound utilizará el dispositivo predeterminado provisto por su sistema. Por lo general, es suficiente con escribir:

 -iadc -odac

Si no tiene ninguna entrada en tiempo real (como por ejemplo, un micrófono), sólo necesita declarar -odac. Sin esta opción, Csound no producirá ningun tipo de salida de audio en tiempo real, sino que escribirá el resultado de la compilación de su .csd en un archivo de audio.

Selección del Controlador de Audio

El módulo de salida RT (en inglés, iniciales de Tiempo Real) se puede ajustar mediante la declaración del argumento -+rtaudio. Si no usa esta opción, se utilizará el controlador PortAudio. Otros posibles controladores son jack y alsa (Linux), mme (Windows) y CoreAudio (Mac). Por lo tanto, la siguiente línea establece como controlador de audio el módulo mme en lugar de Port Audio:

-+rtaudio=mme

Ajuste del Rendimiento y la Latencia

El rendimiento en vivo y la latencia dependen principalmente de los tamaños de los búferes del software y del hardware. Ambos pueden ser establecidos en <CsOptions> usando la opción de configuración '-B' para el búfer de hardware y '-b' para el búfer de software.2  Por ejemplo, esta sentencia establece el tamaño del búfer del hardware en 512 muestras y el tamaño del búfer del software en 128 muestras:

-B512 -b128

El otro factor que afecta al rendimiento en vivo de Csounds es el valor ksmps que se establece en el encabezado de la sección <CsInstruments>. Con este valor, se define cuántas muestras se procesan cada ciclo de control de Csound.

Pruebe su rendimiento en tiempo real con -B512, -b128 y ksmps = 32.3 Con un búfer de software de 128 muestras, un búfer de hardware de 512 muestras y una tasa de muestreo de 44100Hz,  tendrá una latencia de alrededor de 12ms, que es suficiente para tocar un teclado en vivo. Si tiene problemas con la latencia o el rendimiento, modifique los valores tal como se describe aquí.

La Opción "--realtime"

Cuando tiene instrumentos que tienen secciones sustanciales que podrían bloquear la ejecución, por ejemplo, con código que carga búfers leyendo archivos o que crea tablas grandes, puede probar la opción --realtime.

Esta opción le dará prioridad al procesamiento de audio por sobre otras tareas que deban realizarse. Coloca todo el código de inicialización en un hilo separado y no bloquea el hilo de audio. Los instrumentos comienzan a ejecutarse sólo después de que se haya completado la inicialización. Esto puede tener un efecto secundario en la programación si los bufers de entrada y salida de audio no son lo suficientemente pequeños, ya que el hilo de procesamiento de audio puede adelantarse al de la inicialización, en el caso de que exista un retraso en la carga de los bufers.

Dado que esta opción está intrínsecamente ligada a un rendimiento de audio de baja latencia y en tiempo real, y también para reducir el efecto sobre la programación de las otras tareas, se recomienda un valor pequeño tanto para ksmps como para los tamaños de búfer, por ejemplo ksmps = 16, 32 o 64, -b32 ó 64, y -B256 ó 512.

¡Csound Puede Producir Rangos Dinámicos Extremos!

Csound puede producir rangos dinámicos extremobs, así que vigile cuidadosamente el nivel que está enviando a la salida. El número que describe el nivel de 0 dB, se puede establecer en Csound asignando un valor a 0dbfs dentro del encabezado de <CsInstruments>. No hay limitación, si establece 0dbfs = 1 y envía un valor de 32000, ¡esto puede dañar sus oídos y altavoces!

Usando La Entrada y La Salida de Audio en Vivo

Para procesar audio desde una fuente externa (por ejemplo, un micrófono), utilice el opcode inch para acceder a cualquiera de las entradas de su dispositivo de entrada de audio. Para la salida, outch le ofrece toda la flexibilidad necesaria. El siguiente ejemplo toma una entrada de audio en vivo y transforma su sonido usando la modulación en anillo. La Consola de Csound debería mostrar el cambio en el nivel de amplitud de entrada cinco veces por segundo.

   EXAMPLE 02D02_LiveInput.csd

<CsoundSynthesizer>
<CsOptions>
;CHANGE YOUR INPUT AND OUTPUT DEVICE NUMBER HERE IF NECESSARY!
-iadc -odac -B512 -b128
</CsOptions>
<CsInstruments>
;Example by Joachim Heintz
sr = 44100 ;set sample rate to 44100 Hz
ksmps = 32 ;number of samples per control cycle
nchnls = 2 ;use two audio channels
0dbfs = 1 ;set maximum level as 1

instr 1
aIn       inch      1   ;take input from channel 1
kInLev    downsamp  aIn ;convert audio input to control signal
          printk    .2, abs(kInLev)
;make modulator frequency oscillate 200 to 1000 Hz
kModFreq  poscil    400, 1/2
kModFreq  =         kModFreq+600
aMod      poscil    1, kModFreq ;modulator signal
aRM       =         aIn * aMod ;ring modulation
          outch     1, aRM, 2, aRM ;output to channel 1 and 2
endin
</CsInstruments>
<CsScore>
i 1 0 3600
</CsScore>
</CsoundSynthesizer>

El audio en directo se utiliza con frecuencia con dispositivos de tiempo real como widgets gráficos o MIDI. Encontrará varios ejemplos en las colecciones de ejemplos de su interfaz preferida.

  1. Es posible que tenga que correr -iadc999 y luego -odac999 por separado.^
  2. Como explica Victor Lazzarini (en un correo a Joachim Heintz del 19 de marzo de 2013), el rol de -b y -B varía entre los Módulos de Audio:
    "1. Para PortAudio, -B se usa sólo para sugerir una latencia al controlador, mientras que -b es usado para configurar el tamaño real del búfer.
    2. Para Coreaudio, -B es usado como tamaño del búfer circular interno, y -b para el tamaño real del búfer de E/S.
    3. Para Jack, -B es usado para determinar el número de bufers usado conjuntamente con -b, num = (N + M + 1) / M. -b es el tamaño de cada búfer.
    4. Para alsa, -B es el tamaño del búfer y -b es el tamaño del período (un búfer se dividen en períodos).
    5. Para pulseaudio, -b es el tamaño real del búfer que se le pasa al dispositivo, -B no se usa.
    Es otras palabras, -B no es tan importante en 1), no se usa 5), pero tiene importancia en 2), 3) y 4), en donde es funcionalmente similar." ^
  3. Es preferible usar potencias-de-dos para ksmps (lo que equivale al "block size" en PureData o al "vector size" en Max). Tan sólo con valores para ksmps como 1, 2, 4, 8, 16 ... estará tomando ventaja del audio "full dúplex", que provee el mejor audio en tiempo real. Asegúrese que su ksmps divida el tamaño del búfer sin resto en la división. Luego, para -b 128, puede utilizar ksmps = 128, 64, 32, 16, 8, 4, 2 o 1.^

There has been error in communication with Booktype server. Not sure right now where is the problem.

You should refresh this page.