Envolventes MIDI
En el tutorial anterior se generaron notas que se encendían y apagaban siguiendo aun controlador MIDI. Aquí crearemos un sonido más interesante que tiene un ataque largo y decae despues de que se suelte la nota MIDI.
También usaremos la información de velocity para determinar el volumen de la nota.
<CsoundSynthesizer>
<CsOptions> -+P -+K ;Las mismas banderas de antes. </CsOptions><CsInstruments>
sr=44100
kr=441
ksmps=100
nchnls=2
;Los encabezados usualesmassign 1,2
;Asigna el canal MIDI 1 al instrumento 2instr 2
icps cpsmidi
;Igual que antes, la variable icps contiene la frecuencia de la nota MIDIivel veloc
;El opcode veloc asigna el valor de velocity de la nota a la variable ivel. ;Los valores de velocity pueden estar entre 1 y 128, El rango estándar ;de 7 bits de MIDI.print icps
print ivel
;Estos dos 'print' mustran información de la nota tocada.kenv linsegr 0,0.5,10000* (ivel/128), 3, 0
;Este opcode genera una envolvente para cada nota, asignada a la variable kenv ;Note que para envolventes se tiende a usar variables de control (k) ;mientras que para audio se usan variables de audio (a). Esto se hace ;para evitar precisión innecesaria que cargará al procesador. ;El opcode linsegr genera una envolvente iniciando en 0, subiendo ;hasta una amplitud entre 0 y 10000 (dependiendo de ivel) en 0.5 segundos ;(un ataque largo). La nota se mantiene en ese nivel hasta que se suelta, ;y decae por 3 segundos. El valor final de la envolvente es nuevamente de 0.aout oscili 1, icps, 1
;El oscilador oscili funciona igual que oscil, excepto que realiza interpolación ;entre puntos de una tabla. Esto significa que el oscilador es más preciso, ;lo que da mayor calidad pero también requiere más trabajo del procesador. ;La tabla 1 es diferente en este caso. Mire la sección score abajo.outs aout*kenv , aout*kenv
;Envía la señal del oscilador a las salidas. Note que esta vez no multiplcamos ;por 10000 ya que el valor ya está incluído en el generador de envolventes.endin
;El final del instrumento</CsInstruments>
<CsScore>
f 1 0 4096 10 1 0.5 0.25 0.125 0.0625
;Genera una curva que se aproxima a una onda de serrucho, a partir ;de una suma de ondas sinusoidales.f 0 120
</CsScore>
</CsoundSynthesizer>
Este tutorial ya suena más com un sintetizador real. Experimente con diferentes valores o funciones GEN para la tabla 1.