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.
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.
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
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í.
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 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!
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.
There has been error in communication with Booktype server. Not sure right now where is the problem.
You should refresh this page.