FLOSS Manuals

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

CSOUND Español

TRIGGERING INSTRUMENT INSTANCES INSTRUCCIONES DE INSTRUMENTOS DE TRIGGERING

 

Csound's Default System of Instrument Triggering Via Midi

Csounds Sistema predeterminado de activación de instrumentos vía Midi

Csound has a default system for instrument triggering via midi. Provided a midi keyboard has been connected and the appropriate command line flags for midi input have been set (see configuring midi for further information) or the appropriate settings have been made in QuteCsound's configuration menu, then midi notes received on midi channel 1 will trigger instrument 1, notes on channel 2 will trigger instrument 2 and so on. Instruments will turn on and off in sympathy with notes being pressed and released on the midi keyboard and Csound will correctly unravel polyphonic layering and turn on and off only the correct layer of the same instrument begin played. Midi activated notes can be thought of as 'held' notes, similar to notes activated in the score with a negative duration (p3). Midi activated notes will sustain indefinitely as long as the performance time will allow until a corresponding note off has been received - this is unless this infinite p3 duration is overwritten within the instrument itself by p3 begin explicitly defined.

Csound tiene un sistema por defecto para el disparo de instrumentos a través de midi. Siempre que se haya conectado un teclado midi y se hayan configurado los indicadores de línea de comandos apropiados para la entrada midi (consulte la configuración de midi para obtener más información) o los ajustes apropiados en el menú de configuración de QuteCsounds, las notas midi recibidas en el canal midi 1 activarán el instrumento 1, las notas en el canal 2 activarán el instrumento 2 y así sucesivamente. Los instrumentos se encenderán y apagarán en consonancia con las notas que se presionan y se sueltan en el teclado midi y Csound correctamente desenmarañar capas polifónicas y encender y apagar sólo la capa correcta del mismo instrumento comenzar a jugar. Las notas Midi activadas pueden considerarse como notas mantenidas, similares a las notas activadas en la partitura con una duración negativa (p3). Las notas Midi activadas se mantendrán indefinidamente siempre y cuando el tiempo de ejecución permita hasta que se reciba una nota correspondiente - esto es a menos que esta duración p3 infinita se sobrescriba dentro del propio instrumento p3 comienza explícitamente definido.

The following example confirms this default mapping of midi channels to instruments. You will need a midi keyboard that allows you to change the midi channel on which it is transmmitting. Besides a written confirmation to the console of which instrument is begin triggered, there is an audible confirmation in that instrument 1 plays single pulses, instrument 2 plays sets of two pulses and instrument 3 plays sets of three pulses. The example does not go beyond three instruments. If notes are received on midi channel 4 and above, because corresonding instruments do not exist, notes on any of these channels will be directed to instrument 1.

El ejemplo siguiente confirma esta asignación predeterminada de canales midi a instrumentos. Usted necesitará un teclado midi que le permite cambiar el canal midi en el que se transmite. Además de una confirmación escrita a la consola de cuyo instrumento se inicia el disparo, hay una confirmación audible de que el instrumento 1 reproduce pulsos individuales, el instrumento 2 reproduce conjuntos de dos pulsos y el instrumento 3 reproduce conjuntos de tres pulsos. El ejemplo no va más allá de tres instrumentos. Si se reciben notas en el canal midi 4 y superiores, debido a que no existen instrumentos correspondientes, las notas sobre cualquiera de estos canales se dirigirán al instrumento 1.

   EXAMPLE 07B01_MidiInstrTrigger.csd

<CsoundSynthesizer>
<CsOptions>
-Ma -odac -m0
;activates all midi devices, real time sound output, and suppress note printings
</CsOptions>

<CsInstruments>
sr = 44100
ksmps = 32
nchnls = 1
0dbfs = 1

gisine ftgen 0,0,2^12,10,1

  instr 1 ; 1 impulse (midi channel 1)
prints "instrument/midi channel: %d%n",p1 ; print instrument number to terminal
reset:                                    ; label 'reset'
     timout 0, 1, impulse                 ; jump to 'impulse' for 1 second
     reinit reset                         ; reninitialise pass from 'reset'
impulse:                                  ; label 'impulse'
aenv expon     1, 0.3, 0.0001             ; a short percussive envelope
aSig poscil    aenv, 500, gisine          ; audio oscillator
     out       aSig                       ; audio to output
  endin

  instr 2 ; 2 impulses (midi channel 2)
prints "instrument/midi channel: %d%n",p1
reset:
     timout 0, 1, impulse
     reinit reset
impulse:
aenv expon     1, 0.3, 0.0001
aSig poscil    aenv, 500, gisine
a2   delay     aSig, 0.15                 ; short delay adds another impulse
     out       aSig+a2                    ; mix two impulses at output
  endin

  instr 3 ; 3 impulses (midi channel 3)
prints "instrument/midi channel: %d%n",p1
reset:
     timout 0, 1, impulse
     reinit reset
impulse:
aenv expon     1, 0.3, 0.0001
aSig poscil    aenv, 500, gisine
a2   delay     aSig, 0.15                 ; delay adds a 2nd impulse
a3   delay     a2, 0.15                   ; delay adds a 3rd impulse
     out       aSig+a2+a3                 ; mix the three impulses at output
  endin

</CsInstruments>
<CsScore>
f 0 300
e
</CsScore>
<CsoundSynthesizer>

Using massign to Map MIDI Channels to Instruments

Utilizar massign para asignar canales MIDI a los instrumentos

We can use the massign opcode, which is used just after the header statement, to explicitly map midi channels to specific instruments and thereby overrule Csound's default mappings. massign takes two input arguments, the first defines the midi channel to be redirected and the second defines which instrument it should be directed to. The following example is identical to the previous one except that the massign statements near the top of the orchestra jumbles up the default mappings. Midi notes on channel 1 will be mapped to instrument 3, notes on channel 2 to instrument 1 and notes on channel 3 to instrument 2. Undefined channel mappings will be mapped according to the default arrangement and once again midi notes on channels for which an instrument does not exist will be mapped to instrument 1.

Podemos utilizar el opcode massign, que se utiliza justo después de la instrucción de encabezado, para asignar explícitamente canales MIDI a instrumentos específicos y por lo tanto anular las asignaciones por defecto Csounds. Massign toma dos argumentos de entrada, el primero define el canal midi a ser redirigido y el segundo define a qué instrumento debe dirigirse. El siguiente ejemplo es idéntico al anterior, excepto que las sentencias massign situadas cerca de la parte superior de la orquesta desordenan las asignaciones predeterminadas. Las notas de Midi en el canal 1 se asignarán al instrumento 3, las notas del canal 2 al instrumento 1 y las notas del canal 3 al instrumento 2. Las asignaciones de canales no definidos se asignarán de acuerdo con la configuración predeterminada y una vez más las notas midi en los canales para los que un instrumento No existe será mapeada al instrumento 1.

 

   EXAMPLE 07B02_massign.csd

<CsoundSynthesizer>
<CsOptions>
-Ma -odac -m0
; activate all midi devices, real time sound output, and suppress note printing
</CsOptions>

<CsInstruments>
; Example by Iain McCurdy

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

gisine ftgen 0,0,2^12,10,1

massign 1,3  ; channel 1 notes directed to instr 3
massign 2,1  ; channel 2 notes directed to instr 1
massign 3,2  ; channel 3 notes directed to instr 2

  instr 1 ; 1 impulse (midi channel 1)
iChn midichn                                  ; discern what midi channel
prints "channel:%d%tinstrument: %d%n",iChn,p1 ; print instr num and midi channel
reset:                                        ; label 'reset'
     timout 0, 1, impulse                     ; jump to 'impulse' for 1 second
     reinit reset                             ; reninitialize pass from 'reset'
impulse:                                      ; label 'impulse'
aenv expon     1, 0.3, 0.0001                 ; a short percussive envelope
aSig poscil    aenv, 500, gisine              ; audio oscillator
     out       aSig                           ; send audio to output
  endin

  instr 2 ; 2 impulses (midi channel 2)
iChn midichn
prints "channel:%d%tinstrument: %d%n",iChn,p1
reset:
     timout 0, 1, impulse
     reinit reset
impulse:
aenv expon     1, 0.3, 0.0001
aSig poscil    aenv, 500, gisine
a2   delay     aSig, 0.15                      ; delay generates a 2nd impulse
     out       aSig+a2                         ; mix two impulses at the output
  endin

  instr 3 ; 3 impulses (midi channel 3)
iChn midichn
prints "channel:%d%tinstrument: %d%n",iChn,p1
reset:
     timout 0, 1, impulse
     reinit reset
impulse:
aenv expon     1, 0.3, 0.0001
aSig poscil    aenv, 500, gisine
a2   delay     aSig, 0.15                      ; delay generates a 2nd impulse
a3   delay     a2, 0.15                        ; delay generates a 3rd impulse
     out       aSig+a2+a3                      ; mix three impulses at output
  endin

</CsInstruments>

<CsScore>
f 0 300
e
</CsScore>
<CsoundSynthesizer>

massign also has a couple of additional functions that may come in useful. A channel number of zero is interpreted as meaning 'any'. The following instruction will map notes on any and all channels to instrument 1.

 

Massign también tiene un par de funciones adicionales que pueden venir en útil. Un número de canal de cero se interpreta como significando cualquiera. La siguiente instrucción asignará notas a cualquiera y todos los canales al instrumento 1.

massign 0,1

An instrument number of zero is interpreted as meaning 'none' so the following instruction will instruct Csound to ignore triggering for notes received on all channels.

Un número de instrumento de cero se interpreta como significando ninguno por lo que la instrucción siguiente instruirá a Csound para que ignore el disparo de las notas recibidas en todos los canales.

massign 0,0

The above feature is useful when we want to scan midi data from an already active instrument using the midiin opcode, as we did in EXAMPLE 0701.csd.

La característica anterior es útil cuando queremos escanear datos midi desde un instrumento ya activo usando el opcode midiin, como lo hicimos en EXAMPLE 0701.csd.

Using Multiple Triggering

Uso de múltiples desencadenantes

Csound's event/event_i opcode (see the Triggering Instrument Events chapter) makes it possible to trigger any other instrument from a midi-triggered one. As you can assign a fractional number to an instrument, you can distinguish the single instances from each other. Below is an example of using fractional instrument numbers.

Csounds event / event_i opcode (ver el capítulo \Csounds event/event_i opcode) hace posible activar cualquier otro instrumento de un midi-activado. Como puede asignar un número fraccionario a un instrumento, puede distinguir las instancias individuales entre sí. A continuación se muestra un ejemplo de uso de números de instrumentos fraccionarios. Números de instrumentos fraccionarios.

   EXAMPLE 07B03_MidiTriggerChain.csd

<CsoundSynthesizer>
<CsOptions>
-Ma
</CsOptions>
<CsInstruments>
;Example by Joachim Heintz, using code of Victor Lazzarini
sr = 44100
ksmps = 32
nchnls = 1
0dbfs = 1

          massign   0, 1 ;assign all incoming midi to instr 1
instr 1 ;global midi instrument, calling instr 2.cc.nnn 
;(c=channel, n=note number) inote notnum    ;get midi note number ichn midichn   ;get midi channel instrnum = 2 + ichn/100 + inote/100000 ;make fractional instr number ; -- call with indefinite duration   event_i "i", instrnum, 0, -1, ichn, inote kend release   ;get a "1" if instrument is turned off if kend == 1 then event "i", -instrnum, 0, 1 ;then turn this instance off  endif endin instr 2 ichn = int(frac(p1)*100) inote = round(frac(frac(p1)*100)*1000) prints "instr %f: ichn = %f, inote = %f%n", p1, ichn, inote printks "instr %f playing!%n", 1, p1 endin </CsInstruments> <CsScore> f 0 36000 e </CsScore> </CsoundSynthesizer>

This example merely demonstrates a technique for passing information about MIDI channel and note number from the directly triggered instrument to a sub-instrument. A practical application for this would be for creating keygroups - triggering different instruments by playing in different regions of the keyboard. In this case you could change just the line:

Este ejemplo demuestra simplemente una técnica para pasar información sobre el canal MIDI y el número de nota desde el instrumento directamente disparado a un sub-instrumento. Una aplicación práctica para esto sería la creación de grupos clave: activar diferentes instrumentos jugando en diferentes regiones del teclado. En este caso, puede cambiar sólo la línea:

instrnum = 2 + ichn/100 + inote/100000

to this:

 if inote < 48 then

instrnum  =         2
 elseif inote < 72 then
instrnum  =         3
 else
instrnum  =         4
 endif
instrnum  =         instrnum + ichn/100 + inote/100000

In this case for any key below C3 instrument 2 will be called, for any key between C3 and B4 instrument 3, and for any higher key instrument 4.

En este caso para cualquier tecla debajo de C3 se llamará el instrumento 2, para cualquier tecla entre el instrumento C3 y B4 3, y para cualquier instrumento de clave más alta 4.

Using this multiple triggering you are also able to trigger more than one instrument at the same time (which is not possible using the massign opcode). Here is an example using a user defined opcode (see the UDO chapter of this manual):

Utilizando este disparo múltiple, también puede activar más de un instrumento al mismo tiempo (lo que no es posible con el opcode de masaje). A continuación se muestra un ejemplo con un código de operación definido por el usuario (consulte el capítulo UDO de este manual):

   EXAMPLE 07B04_MidiMultiTrigg.csd

<CsoundSynthesizer>
<CsOptions>
-Ma
</CsOptions>
<CsInstruments>
;Example by Joachim Heintz, using code of Victor Lazzarini
sr = 44100
ksmps = 32
nchnls = 1
0dbfs = 1

          massign   0, 1 ;assign all incoming midi to instr 1
giInstrs  ftgen     0, 0, -5, -2, 2, 3, 4, 10, 100 ;instruments to be triggered

 opcode MidiTrig, 0, io
;triggers the first inum instruments in the function table ifn by a midi event,
; with fractional numbers containing channel and note number information

; -- if inum=0 or not given, all instrument numbers in ifn are triggered
ifn, inum  xin
inum      =         (inum == 0 ? ftlen(ifn) : inum)
inote     notnum
ichn      midichn
iturnon   =         0
turnon:
iinstrnum tab_i     iturnon, ifn
if iinstrnum > 0 then
ifracnum  =         iinstrnum + ichn/100 + inote/100000
         event_i   "i", ifracnum, 0, -1
endif
         loop_lt   iturnon, 1, inum, turnon
kend      release
if kend == 1 then
kturnoff  =         0
turnoff:
kinstrnum tab       kturnoff, ifn
 if kinstrnum > 0 then
kfracnum  =         kinstrnum + ichn/100 + inote/100000
         event     "i", -kfracnum, 0, 1
         loop_lt   kturnoff, 1, inum, turnoff
 endif
endif
 endop

 instr 1 ;global midi instrument
; -- trigger the first two instruments in the giInstrs table
         MidiTrig  giInstrs, 2
 endin

 instr 2
ichn      =         int(frac(p1)*100)
inote     =         round(frac(frac(p1)*100)*1000)
         prints    "instr %f: ichn = %f, inote = %f%n", p1, ichn, inote
         printks   "instr %f playing!%n", 1, p1
 endin

 instr 3
ichn      =         int(frac(p1)*100)
inote     =         round(frac(frac(p1)*100)*1000)
         prints    "instr %f: ichn = %f, inote = %f%n", p1, ichn, inote
         printks   "instr %f playing!%n", 1, p1
 endin

</CsInstruments>
<CsScore>
f 0 36000
e
</CsScore>
</CsoundSynthesizer>

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

You should refresh this page.