;-------------------------------------- Title --------------------------------------; ; Description: ; ; - Template for a Csound real-time project supporting 16 MIDI controllers. ; ; Programmer: ; ; Programmer: Jens Groh ; ; Version: ; ; Date: ; ;-----------------------------------------------------------------------------------; ;-------------------------------- MIDI controllers ---------------------------------; ; ; ;-----------------------------------------------------------------------------------; ; DirectCsound parameters for real-time MIDI performance: ; normal realtime operation: -m0 -d -+X1 -+K -+Q -b126 ; once MIDI in/out ports are known (example: in=0 and out=1), you can write: ; -m0 -d -+X1 -+K0 -+Q1 -b126 ; once development is done, suppress all messages with: ; -m0 -d -+X1 -+K0 -+Q1 -b126 -+O ; with additional file output (be sure to limit performance time (see below)!): ; -m0 -d -+X1 -+K0 -+Q1 -b126 -+O -oCSND_OUT.WAV -W ; allow MIDI real-time playing for 24 hours: f 0 86400 ; stop after 30 seconds (example) when writing file: ;f 0 30 e ;--------- global constants --------------------------------------------------------; sr = 22050 kr = 350 ksmps = 63 nchnls = 2 ; sampling rate related constants: gisr2 = sr * 0.5 giisr = 1.0 / sr giikr = 1.0 / kr giiks = 1.0 / ksmps giisr2 = 2.0 / sr ; other useful constants: gipi = 3.1415926536 ; a sinewave table: gisin ftgen 0,0,65536,10,1.0 ;--------- midi channels -----------------------------------------------------------; ; assign midi channels to instruments: (uncomment and edit lines for appropriate instruments) ; (channel->instrument) massign 1, 1 ; massign 2, 2 ; massign 3, 3 ; massign 4, 4 ; massign 5, 5 ; massign 6, 6 ; massign 7, 7 ; massign 8, 8 ; massign 9, 9 ; massign 10, 10 ; massign 11, 11 ; massign 12, 12 ; massign 13, 13 ; massign 14, 14 ; massign 15, 15 ; massign 16, 16 ;--------- midi controllers --------------------------------------------------------; ; the controller receiver midi channel: (edit if necessary) gicch = 1 ; the midi controller numbers: (insert your preferred CC numbers here) gicn01 = 1 gicn02 = 2 gicn03 = 3 gicn04 = 4 gicn05 = 5 gicn06 = 6 gicn07 = 7 gicn08 = 8 gicn09 = 9 gicn10 = 10 gicn11 = 11 gicn12 = 12 gicn13 = 13 gicn14 = 14 gicn15 = 15 gicn16 = 16 ; the controller initial midi values (0...127): (edit if necessary) gicinim01 = 64 gicinim02 = 64 gicinim03 = 64 gicinim04 = 64 gicinim05 = 64 gicinim06 = 64 gicinim07 = 64 gicinim08 = 64 gicinim09 = 64 gicinim10 = 64 gicinim11 = 64 gicinim12 = 64 gicinim13 = 64 gicinim14 = 64 gicinim15 = 64 gicinim16 = 64 ; the controller minimum values (for midi value 0): (edit if necessary) giclo01 = -1.0 giclo02 = -1.0 giclo03 = -1.0 giclo04 = -1.0 giclo05 = -1.0 giclo06 = -1.0 giclo07 = -1.0 giclo08 = -1.0 giclo09 = -1.0 giclo10 = -1.0 giclo11 = -1.0 giclo12 = -1.0 giclo13 = -1.0 giclo14 = -1.0 giclo15 = -1.0 giclo16 = -1.0 ; the controller maximum values (for midi value 127): (edit if necessary) gichi01 = 63.0 / 64.0 gichi02 = 63.0 / 64.0 gichi03 = 63.0 / 64.0 gichi04 = 63.0 / 64.0 gichi05 = 63.0 / 64.0 gichi06 = 63.0 / 64.0 gichi07 = 63.0 / 64.0 gichi08 = 63.0 / 64.0 gichi09 = 63.0 / 64.0 gichi10 = 63.0 / 64.0 gichi11 = 63.0 / 64.0 gichi12 = 63.0 / 64.0 gichi13 = 63.0 / 64.0 gichi14 = 63.0 / 64.0 gichi15 = 63.0 / 64.0 gichi16 = 63.0 / 64.0 ; the controller time constant: (edit if necessary) gicfc = 2.5 ; prepare midi controllers: (these are the variables for use as instrument control) gkc01 init (giclo01 * (127 - gicinim01) + gichi01 * gicinim01) / 127.0 gkc02 init (giclo02 * (127 - gicinim02) + gichi02 * gicinim02) / 127.0 gkc03 init (giclo03 * (127 - gicinim03) + gichi03 * gicinim03) / 127.0 gkc04 init (giclo04 * (127 - gicinim04) + gichi04 * gicinim04) / 127.0 gkc05 init (giclo05 * (127 - gicinim05) + gichi05 * gicinim05) / 127.0 gkc06 init (giclo06 * (127 - gicinim06) + gichi06 * gicinim06) / 127.0 gkc07 init (giclo07 * (127 - gicinim07) + gichi07 * gicinim07) / 127.0 gkc08 init (giclo08 * (127 - gicinim08) + gichi08 * gicinim08) / 127.0 gkc09 init (giclo09 * (127 - gicinim09) + gichi09 * gicinim09) / 127.0 gkc10 init (giclo10 * (127 - gicinim10) + gichi10 * gicinim10) / 127.0 gkc11 init (giclo11 * (127 - gicinim11) + gichi11 * gicinim11) / 127.0 gkc12 init (giclo12 * (127 - gicinim12) + gichi12 * gicinim12) / 127.0 gkc13 init (giclo13 * (127 - gicinim13) + gichi13 * gicinim13) / 127.0 gkc14 init (giclo14 * (127 - gicinim14) + gichi14 * gicinim14) / 127.0 gkc15 init (giclo15 * (127 - gicinim15) + gichi15 * gicinim15) / 127.0 gkc16 init (giclo16 * (127 - gicinim16) + gichi16 * gicinim16) / 127.0 ctrlinit gicch, gicn01, gicinim01 ctrlinit gicch, gicn02, gicinim02 ctrlinit gicch, gicn03, gicinim03 ctrlinit gicch, gicn04, gicinim04 ctrlinit gicch, gicn05, gicinim05 ctrlinit gicch, gicn06, gicinim06 ctrlinit gicch, gicn07, gicinim07 ctrlinit gicch, gicn08, gicinim08 ctrlinit gicch, gicn09, gicinim09 ctrlinit gicch, gicn10, gicinim10 ctrlinit gicch, gicn11, gicinim11 ctrlinit gicch, gicn12, gicinim12 ctrlinit gicch, gicn13, gicinim13 ctrlinit gicch, gicn14, gicinim14 ctrlinit gicch, gicn15, gicinim15 ctrlinit gicch, gicn16, gicinim16 turnon 100 ;--------- global instruments ------------------------------------------------------; ; initialize mixer: gabus1 init 0.0 gabus2 init 0.0 ; start effect instrument: turnon 99 instr 1 ;--------- a midi instrument -----------------------------------------------; ifreq cpsmidi ; pitch, from note number iampl ampmidi 1.0 ; volume, from note-on velocity kxyz = gkc01 ; a midi controlled variable ; generate a note-off de-clicking envelope: xtratim giikr krls release arlsenv interp 1.0 - krls aoutl init 0.0 aoutr init 0.0 ; (...your code...) ; output: gabus1 = gabus1 + aoutl * arlsenv gabus2 = gabus2 + aoutr * arlsenv endin instr 17 ;-------- a non-midi instrument -------------------------------------------; idur = p3 ; duration ifreq = p4 ; pitch iampl = p5 ; volume aoutl init 0.0 aoutr init 0.0 ; (...your code...) ; output: gabus1 = gabus1 + aoutl gabus2 = gabus2 + aoutr endin instr 99 ;-------- global effect instrument ----------------------------------------; ; input: aoutl = gabus1 aoutr = gabus2 ; (...your code...) ; output: outs aoutl,aoutr ; initialize mixer: gabus1 = 0.0 gabus2 = 0.0 endin instr 100 ;------- global midi controller receiver ---------------------------------; ic01, ic02, ic03, ic04, ic05, ic06, ic07, ic08, ic09, ic10, ic11, ic12, ic13, ic14, ic15, ic16 slider16 gicch, gicn01, giclo01, gichi01, 0, gicn02, giclo02, gichi02, 0, gicn03, giclo03, gichi03, 0, gicn04, giclo04, gichi04, 0, gicn05, giclo05, gichi05, 0, gicn06, giclo06, gichi06, 0, gicn07, giclo07, gichi07, 0, gicn08, giclo08, gichi08, 0, gicn09, giclo09, gichi09, 0, gicn10, giclo10, gichi10, 0, gicn11, giclo11, gichi11, 0, gicn12, giclo12, gichi12, 0, gicn13, giclo13, gichi13, 0, gicn14, giclo14, gichi14, 0, gicn15, giclo15, gichi15, 0, gicn16, giclo16, gichi16, 0 gkc01,gkc02,gkc03,gkc04,gkc05,gkc06,gkc07,gkc08,gkc09,gkc10,gkc11,gkc12,gkc13,gkc14,gkc15,gkc16 slider16f gicch, gicn01, giclo01, gichi01, ic01, 0, gicfc, gicn02, giclo02, gichi02, ic02, 0, gicfc, gicn03, giclo03, gichi03, ic03, 0, gicfc, gicn04, giclo04, gichi04, ic04, 0, gicfc, gicn05, giclo05, gichi05, ic05, 0, gicfc, gicn06, giclo06, gichi06, ic06, 0, gicfc, gicn07, giclo07, gichi07, ic07, 0, gicfc, gicn08, giclo08, gichi08, ic08, 0, gicfc, gicn09, giclo09, gichi09, ic09, 0, gicfc, gicn10, giclo10, gichi10, ic10, 0, gicfc, gicn11, giclo11, gichi11, ic11, 0, gicfc, gicn12, giclo12, gichi12, ic12, 0, gicfc, gicn13, giclo13, gichi13, ic13, 0, gicfc, gicn14, giclo14, gichi14, ic14, 0, gicfc, gicn15, giclo15, gichi15, ic15, 0, gicfc, gicn16, giclo16, gichi16, ic16, 0, gicfc endin ;-----------------------------------------------------------------------------------;