ampmidid
Prev | Orchestra Opcodes and Operators | Next

## ampmidid

ampmidid — Musically map MIDI velocity to peak amplitude within a specified dynamic range in decibels.

## Description

Musically map MIDI velocity to peak amplitude within a specified dynamic range in decibels.

## Syntax

    iamplitude ampmidid ivelocity, idecibels

    kamplitude ampmidid kvelocity, idecibels

## Initialization

iamplitude -- Amplitude.

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

idecibels -- Desired dynamic range in decibels.

## Performance

kamplitude -- Amplitude.

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

Musically map MIDI velocity to peak amplitude within a specified dynamic range in decibels: a = (m * v + b) ^ 2, where a = amplitude, v = MIDI velocity, r = 10 ^ (R / 20), b = 127 / (126 * sqrt( r )) - 1 / 126, m = (1 - b) / 127, and R = specified dynamic range in decibels. See Roger Dannenberg, "The Interpretation of MIDI Velocity," in Georg Essl and Ichiro Fujinaga (Eds.), Proceedings of the 2006 International Computer Music Conference, November 6-11, 2006 (San Francisco: The International Computer Music Association), pp. 193-196.

## Examples

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

Example 55. Example of the ampmidid 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

    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
      idb ampmidid ivelocity, 20	;map to dynamic range of 20 dB.
      idb = idb + 60		;limit range to 60 to 80 decibels
      iamplitude = ampdb(idb)	;loudness in dB to signal amplitude

    a1   oscili iamplitude, ihz, isine
    aenv madsr 0.05, 0.1, 0.5, 0.2
    asig = a1 * aenv
         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
2006

Prev | Up | Next
ampmidi | Home | areson