1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
<CsoundSynthesizer>
<CsOptions>
-odac -d -M 0
</CsOptions>
<CsInstruments>
nchnls=2
ksmps = 64
ichn = 1
lp1: massign ichn, 0
loop_le ichn, 1, 16, lp1
pgmassign 0, 0
gisf sfload "sf_GMbank.sf2"
sfpassign 0, gisf
/* this instrument parses MIDI input
to trigger the GM soundfont synthesis
instrument (instr 10
*/
instr 1
idkit = 317 /* drum-kit preset was 317*/
tableiw idkit, 9, 1
irel = 0.5 /* release envelope */
ipg = 1
ivol = 2
ipan = 3
nxt:
kst, kch, kd1, kd2 midiin
if (kst != 0) then
kch = kch - 1
if (kst == 144 && kd2 != 0) then ; note on
kpg table kch, ipg
/* instrument identifier is 10.[chn][note] */
kinst = 10 + kd1/100000 + kch/100
if kch == 9 then
/* exclusive identifiers */
if kpg == idkit+7 then
krel = 2 /* add extra release time for orch perc*/
else
krel = 0.5
endif
if (kd1 == 29 || kd1 == 30) then ; EXC7
kinst = 10.97
elseif (kd1 == 42 || kd1 == 44 || kd1 == 46 || kd1 == 49) then ; EXC1
kinst = 10.91
elseif (kd1 == 71 || kd1 == 72) then ; EXC2
kinst = 10.92
elseif (kd1 == 73 || kd1 == 74) then ; EXC3
kinst = 10.93
elseif (kd1 == 78 || kd1 == 79) then ; EXC4
kinst = 10.94
elseif (kd1 == 80 || kd1 == 81) then ; EXC5
kinst = 10.95
elseif (kd1 == 86 || kd1 == 87) then ; EXC6
kinst = 10.96
endif
else
krel = 0.5
endif
event "i", kinst, 0, -1, kd1, kd2, kpg, kch,krel
elseif (kst == 128 || (kst == 144 && kd2 == 0)) then ; note off
kpg table kch, ipg
kinst = 10 + kd1/100000 + kch/100
if kch == 9 then
if (kd1 == 29 || kd1 == 30) then ; EXC7
kinst = 10.97
elseif (kd1 == 42 || kd1 == 44 || kd1 == 46 || kd1 == 49) then ; EXC1
kinst = 10.91
elseif (kd1 == 71 || kd1 == 72) then ; EXC2
kinst = 10.92
elseif (kd1 == 73 || kd1 == 74) then ; EXC3
kinst = 10.93
elseif (kd1 == 78 || kd1 == 79) then ; EXC4
kinst = 10.94
elseif (kd1 == 80 || kd1 == 81) then ; EXC5
kinst = 10.95
elseif (kd1 == 86 || kd1 == 87) then ; EXC6
kinst = 10.96
endif
else
kpg = 0
endif
event "i", -kinst, 0, 1
elseif (kst == 192) then /* program change msgs */
if kch == 9 then
kpg = idkit
if kd1 == 8 then
kpg = idkit+1
elseif kd1 == 16 then
kpg = idkit+2
elseif kd1 == 24 then
kpg = idkit+3
elseif kd1 == 25 then
kpg = idkit+4
elseif kd1 == 32 then
kpg = idkit+5
elseif kd1 == 40 then
kpg = idkit+6
elseif kd1 == 48 then
kpg = idkit+7
endif
else
kpg = kd1
endif
tablew kpg, kch, ipg
elseif (kst == 176 && kd1 == 11) then /* volume msgs */
tablew kd2, kch, ivol
elseif (kst == 176 && kd1 == 7) then /* pan msgs */
tablew kd2, kch, ipan
endif
kgoto nxt
endif
endin
/* this is the GM soundfont synthesizer instrument */
instr 10
kenv linenr 10,0.001,p8,0.001
iamp table p5, 5
a1, a2 sfplay p5, p4, iamp,1, p6, 0, 0, 2
kv table p7, 2
kvol tablei kv, 5
kpan table p7, 3
kpan = (kpan - 64)/128
outs 0.2*a1*kvol*(0.5-kpan/2)*kenv, 0.2*a2*kvol*(0.5+kpan/2)*kenv
endin
instr 11
endin
</CsInstruments>
<CsScore>
/* program preset (memory) table */
f1 0 16 -2 0 0 0 0 0 0 0 0 226 0 0 0 0 0 0 0
/* velocity (memory) table */
f2 0 16 -2 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127
/* pan (memory) table */
f3 0 16 -2 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64
f5 0 128 5 0.1 128 1 /* velocity mapping: less nuanced */
f6 0 128 5 0.01 128 1 /* velocity mapping: more nuanced */
i 1 0 360000
e
</CsScore>
</CsoundSynthesizer>
|