ampmidicurve
Prev | Orchestra Opcodes and Operators | Next

## 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 58. 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

Prev | Up | Next
ampmidi | Home | ampmidid