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 53. 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