ampmidicurve

ampmidicurve — Maps an input MIDI velocity number to an output gain factor with a maximum value of 1, modifying the output gain by a dynamic range and a shaping exponent.

Description

Plugin opcode in ampmidid.

Maps an input MIDI velocity number to an output gain factor with a maximum value of 1, modifying the output gain by a dynamic range and a shaping exponent. The minimum output gain is 1 minus the dynamic range. A shaping exponent of 1 gives a linear response; increasing the exponent produces an increasingly depressed knee in the gain response curve.

Syntax

igain ampmidicurve ivelocity, idynamicrange, iexponent
kgain ampmidicurve kvelocity, kdynamicrange, kexponent

Initialization

imidivelocity -- MIDI velocity number, ranging from 0 through 127.

idynamicrange -- Intended dynamic range of gain, from 0 through 1.

iexponent -- Exponent applied to shape the gain response curve, 1 or greater.

Performance

kmidivelocity -- MIDI velocity number, ranging from 0 through 127.

kdynamicrange -- Intended dynamic range of gain, from 0 through 1.

kexponent -- Exponent applied to shape the gain response curve, 1 or greater.

Maps an input MIDI velocity number to an output gain factor with a maximum value of 1, modifying the output gain by a dynamic range and a shaping exponent. The minimum output gain is 1 minus the dynamic range. A shaping exponent of 1 gives a linear response; increasing the exponent produces an increasingly depressed knee in the gain response curve, according to the equation: y = d * (x/127)^h + 1 - d, where y = the gain, x = the input MIDI velocity (from 0 through 127), d = the dynamic range (from p through 1), and h = the shaping exponent (1 or greater). This opcode was suggested by Mauro Giubileo.

Examples

Here is an example of the ampmidicurve opcode. It uses the file ampmidicurve.csd.

Example 54. Example of the ampmidicurve opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
;;;RT audio out, note=p4 and velocity=p5
-odac --midi-key=4 --midi-velocity-amp=5
;-iadc    ;;;uncomment -iadc if RT audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o ampmidid.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

massign 0, 1	;assign all midi to instr. 1

instr 1

isine ftgenonce 0, 0, 4096, 10, 1 ;sine wave

  ihz = cpsmidinn(p4)
  ivelocity = p5
  ; MIDI velocity to signal amplitude.
  iamplitude = ampdb(ivelocity)
  ; Gain with compressed dynamic range, soft knee.
  igain ampmidicurve ivelocity, .92, 3
  print ivelocity, iamplitude, igain
  a1   oscili 1, ihz, isine
  aenv madsr 0.05, 0.1, 0.5, 0.2
  asig = a1 * aenv * igain
  outs asig, asig

endin

</CsInstruments>
<CsScore>
;       note velocity
i 1 0 2  61  100
i 1 + 2  65  10
e
</CsScore>
</CsoundSynthesizer>


See Also

aftouch, cpsmidi, cpsmidib, midictrl, notnum, octmidi, octmidib, pchbend, pchmidi, pchmidib, veloc

Credits

Author: Michael Gogins
2019