FLOSS Manuals

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

CSOUND Español

CONFIGURACIÓN MIDI

Csound puede recibir eventos MIDI (tales como notas MIDI y Cambios de Control MIDI) desde una interfaz MIDI externa o desde otro programa a través de un cable MIDI virtual. Estos datos se pueden utilizar para controlar cualquier aspecto en la síntesis o en la ejecución.

La mayoría de los frontends utilizan su propio controlador MIDI. Vea los capítulos sobre CsoundQt, Cabbage y Blue en este manual, o eche un vistazo a la documentación incluida en cada uno de estos entornos. La siguiente descripción sólo es relevante cuando se utilizan los controladores MIDI propios de Csound, por ejemplo cuando se ejecuta Csound a través de la línea de comandos.

Csound recibe datos MIDI a través de los MIDI Realtime Modules. Estos son plugins especiales de Csound que permiten la entrada MIDI usando diferentes métodos de acuerdo a una plataforma específica. Se habilitan mediante la opción de línea de comando  -+rtmidi en la sección <CsOptions> del archivo .csd.

Existe un módulo universal "portmidi". PortMidi es un módulo multiplataforma para E/S MIDI y suele estar disponible en todas las plataformas. Para habilitar el módulo "portmidi", pase el siguiente argumento dentro de la sección de opciones:

-+rtmidi=portmidi

Después de seleccionar el módulo RT MIDI desde una interfaz gráfica o desde la línea de comandos, debe seleccionar los dispositivos MIDI para entrada y salida. Éstos se ajustan utilizando las opciones -M y -Q respectivamente, seguidos por el número de dispositivo. Por lo general, puede utilizar:

-M999

para obtener un error de ejecución que le brindará una lista de dispositivos disponibles.

Para el módulo PortMidi (y otros como ALSA), puede obviar el número para usar la dispositivo MIDI predeterminado, o bien usar el carácter 'a' para establecer una comunicación con todos los dispositivos disponibles (que en realidad es el caso más común). Esto incluso funcionará correctamente cuando no haya ningún dispositivo MIDI presente.

 -Ma

Por lo tanto, si desea una entrada MIDI usando el módulo portmidi, usando el dispositivo 2 para la entrada y el dispositivo 1 para la salida, su sección <CsOptions> debería contener:

-+rtmidi=portmidi -M2 -Q1

Hay un módulo especial RT MIDI virtual que permite la entrada MIDI desde un teclado virtual. Para habilitarlo, escriba:

  -+rtmidi=virtual -M0

Módulos Específicos según la Plataforma

Si el módulo "portmidi" no funciona correctamente, puede probar otros módulos específicos de acuerdo a su plataforma.

Linux

En sistemas Linux, también podría tener un módulo "alsa" para usar la interfaz MIDI alsa raw. Esta es diferente de la interfaz más común del secuenciador alsa y requerirá típicamente que el módulo snd-virmidi haya sido cargado previamente en el kernel.

OS X

En OS X existe un módulo "coremidi" disponible.

Windows

En Windows, podría encontrarse con el módulo MIDI "winmme".

Cómo usar un Teclado Midi

Una vez que haya configurado el hardware, estará listo para recibir información MIDI e interpretarla en Csound. De forma predeterminada, cuando se recibe una nota MIDI, se enciende el instrumento de Csound correspondiente al número de canal MIDI, por lo que si se recibe una nota en el canal 3, se encenderá el instrumento 3 y si se recibe en el canal 10, se encenderá el instrumento 10 y así sucesivamente.

Si desea cambiar este enrutamiento de los canales MIDI hacia los instrumentos, puede utilizar el opcode massign. Por ejemplo, esta sentencia le permite enrutar su canal MIDI 1 al instrumento 10:

 massign 1, 10

En el siguiente ejemplo, se define un instrumento simple, que reproduce una onda senoidal en el instrumento 1. No hay eventos en la partitura, por lo que no se producirá sonido a menos que se reciba una nota MIDI desde el canal 1.

   EXAMPLE 02C01_Midi_Keybd_in.csd

<CsoundSynthesizer>
<CsOptions>
-+rtmidi=portmidi -Ma -odac
</CsOptions>
<CsInstruments>
;Example by Andrés Cabrera

sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1

        massign   0, 1 ;assign all MIDI channels to instrument 1

instr 1
iCps    cpsmidi   ;get the frequency from the key pressed
iAmp    ampmidi   0dbfs * 0.3 ;get the amplitude
aOut    poscil    iAmp, iCps ;generate a sine tone
        outs      aOut, aOut ;write it to the output
endin

</CsInstruments>
<CsScore>
</CsScore>
</CsoundSynthesizer>

Cabe resaltar que Csound brinda potencialmente una polifonía ilimitada cuando se usa de esta manera: cada tecla pulsada inicia una nueva instancia del instrumento 1, y se puede tener cualquier número de instancias de un instrumento al mismo tiempo.

Cómo usar un Controlador MIDI

Para recibir eventos desde un controlador MIDI, puede utilizar opcodes como ctrl7. En el ejemplo siguiente, el instrumento 1 se enciende durante 60 segundos. Recibiŕa información acerca del mensaje de control MIDI #1(rueda de modulación) en el canal 1 y convertirá el rango MIDI (0-127) a un rango de entre 220 y 440. Este valor a su vez se utiliza posteriormente para ajustar la frecuencia de un oscilador senoidal simple.

    EXAMPLE 02C02_Midi_Ctl_in.csd

<CsoundSynthesizer>
<CsOptions>
-+rtmidi=virtual -M1 -odac
</CsOptions>
<CsInstruments>
;Example by Andrés Cabrera

sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1
; --- receive controller number 1 on channel 1 and scale from 220 to 440
kFreq ctrl7  1, 1, 220, 440
; --- use this value as varying frequency for a sine wave
aOut  poscil 0.2, kFreq
      outs   aOut, aOut
endin
</CsInstruments>
<CsScore>
i 1 0 60
</CsScore>
</CsoundSynthesizer>

Otros Tipos de Datos MIDI

Csound puede recibir otro tipo de datos MIDI, tales como pitch bend y aftertouch mediante el uso de opcodes específicos. Los datos MIDI genéricos se pueden recibir usando el opcode midiin. El ejemplo siguiente imprime a la consola los datos recibidos vía MIDI.

   EXAMPLE 02C03_Midi_all_in.csd

<CsoundSynthesizer>
<CsOptions>
-+rtmidi=portmidi -Ma -odac
</CsOptions>
<CsInstruments>
;Example by Andrés Cabrera

sr = 44100
ksmps = 32
nchnls = 2
0dbfs = 1

instr 1
kStatus, kChan, kData1, kData2 midiin

if kStatus != 0 then ;print if any new MIDI message has been received
    printk 0, kStatus
    printk 0, kChan
    printk 0, kData1
    printk 0, kData2
endif

endin

</CsInstruments>
<CsScore>
i1 0 3600
</CsScore>
</CsoundSynthesizer>

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

You should refresh this page.