falco/cabbages/waggonbau.csd

322 lines
8.4 KiB
Plaintext

; WAGGONBAU
;
; simple sampler for industrial style drums
;
; (s) Severák 2019
; licensed with MIT license
<Cabbage>
form caption("WaggonBAU") size(400, 180), colour(58, 110, 182), pluginid("wagb")
keyboard bounds(4, 72, 381, 95)
filebutton bounds(6, 4, 40, 40) text("C", "C") channel("C_path") identchannel("C_button") populate("*.wav") fontcolour:0(128, 128, 128, 255)
filebutton bounds(48, 4, 40, 40) text("D", "D") channel("D_path") identchannel("D_button") populate("*.wav","") fontcolour:0(128,128,128, 255)
filebutton bounds(90, 4, 40, 40) text("E", "E") channel("E_path") identchannel("E_button") populate("*.wav","") fontcolour:0(128,128,128, 255)
filebutton bounds(218, 4, 40, 40) text("F", "F") channel("F_path") identchannel("F_button") populate("*.wav","") fontcolour:0(128,128,128, 255)
filebutton bounds(260, 4, 40, 40) text("G", "G") channel("G_path") identchannel("G_button") populate("*.wav","") fontcolour:0(128,128,128, 255)
filebutton bounds(302, 4, 40, 40) text("A", "A") channel("A_path") identchannel("A_button") populate("*.wav","") fontcolour:0(128,128,128, 255)
filebutton bounds(344, 4, 40, 40) text("H", "H") channel("H_path") identchannel("H_button") populate("*.wav","") fontcolour:0(128,128,128, 255)
label bounds(134, 4, 80, 16) text("Waggon")
label bounds(134, 20, 80, 23) text("BAU")
label bounds(4, 50, 379, 16) text("SET sample for each note and play it via keyboard")
</Cabbage>
<CsoundSynthesizer>
<CsOptions>
-n -d -+rtmidi=NULL -M0 -m0d --midi-key-cps=4 --midi-velocity-amp=5
</CsOptions>
<CsInstruments>
; Initialize the global variables.
ksmps = 32
nchnls = 2
0dbfs = 1
giSampleC init 0
giSampleD init 0
giSampleE init 0
giSampleF init 0
giSampleG init 0
giSampleA init 0
giSampleH init 0
massign 0,0 ;disable triggering of all instruments on all channels
; always on
instr MIDI_IN
kSampleC = giSampleC
kSampleD = giSampleD
kSampleE = giSampleE
kSampleF = giSampleF
kSampleG = giSampleG
kSampleA = giSampleA
kSampleH = giSampleH
kstatus, kchan, kdata1, kdata2 midiin
if changed(kstatus, kchan, kdata1, kdata2)==1 then
if kstatus==144 then
knote = kdata1 % 12
; 0 2 4 ; 5 7 9 11
if knote == 0 && kSampleC > 0 then
event "i", "PLAY_SAMPLE_C", 0, 1, kdata2
endif
if knote == 2 && kSampleD > 0 then
event "i", "PLAY_SAMPLE_D", 0, 1, kdata2
endif
if knote == 4 && kSampleE > 0 then
event "i", "PLAY_SAMPLE_E", 0, 1, kdata2
endif
if knote == 5 && kSampleF > 0 then
event "i", "PLAY_SAMPLE_F", 0, 1, kdata2
endif
if knote == 7 && kSampleG > 0 then
event "i", "PLAY_SAMPLE_G", 0, 1, kdata2
endif
if knote == 9 && kSampleA > 0 then
event "i", "PLAY_SAMPLE_A", 0, 1, kdata2
endif
if knote == 11 && kSampleH > 0 then
event "i", "PLAY_SAMPLE_H", 0, 1, kdata2
endif
;printks "this will trigger note %d\n", 0, kdata1%12
endif
endif
endin
instr GUI
SampleCPath chnget "C_path"
if changed:k(SampleCPath) == 1 then
event "i", "LOAD_SAMPLE_C", 0, 0
endif
SampleDPath chnget "D_path"
if changed:k(SampleDPath) == 1 then
event "i", "LOAD_SAMPLE_D", 0, 0
endif
SampleEPath chnget "E_path"
if changed:k(SampleEPath) == 1 then
event "i", "LOAD_SAMPLE_E", 0, 0
endif
SampleFPath chnget "F_path"
if changed:k(SampleFPath) == 1 then
event "i", "LOAD_SAMPLE_F", 0, 0
endif
SampleGPath chnget "G_path"
if changed:k(SampleGPath) == 1 then
event "i", "LOAD_SAMPLE_G", 0, 0
endif
SampleAPath chnget "A_path"
if changed:k(SampleAPath) == 1 then
event "i", "LOAD_SAMPLE_A", 0, 0
endif
SampleHPath chnget "H_path"
if changed:k(SampleHPath) == 1 then
event "i", "LOAD_SAMPLE_H", 0, 0
endif
endin
; loading & saving is triggered as needed
instr LOAD_SAMPLE_C
SampleCPath chnget "C_path"
if filevalid(SampleCPath) == 1 then
giSampleC ftgen 0,0,0,1,SampleCPath,0,0,0
chnset "fontcolour:0(255,255,0, 255)", "C_button"
endif
endin
instr PLAY_SAMPLE_C
; p4
kVol = p4 / 127
ichnls = ftchnls(giSampleC)
if (ichnls == 1) then
asigL loscil3 kVol, 1, giSampleC, 1
asigR = asigL
elseif (ichnls == 2) then
asigL, asigR loscil3 kVol, 1, giSampleC, 1
;safety precaution if not mono or stereo
else
asigL = 0
asigR = 0
endif
outs asigL, asigR
endin
instr LOAD_SAMPLE_D
SampleDPath chnget "D_path"
if filevalid(SampleDPath) == 1 then
giSampleD ftgen 0,0,0,1,SampleDPath,0,0,0
chnset "fontcolour:0(255,255,0, 255)", "D_button"
endif
endin
instr PLAY_SAMPLE_D
; p4
kVol = p4 / 127
ichnls = ftchnls(giSampleD)
if (ichnls == 1) then
asigL loscil3 kVol, 1, giSampleD, 1
asigR = asigL
elseif (ichnls == 2) then
asigL, asigR loscil3 kVol, 1, giSampleD, 1
;safety precaution if not mono or stereo
else
asigL = 0
asigR = 0
endif
outs asigL, asigR
endin
instr LOAD_SAMPLE_E
SampleEPath chnget "E_path"
if filevalid(SampleEPath) == 1 then
giSampleE ftgen 0,0,0,1,SampleEPath,0,0,0
chnset "fontcolour:0(255,255,0, 255)", "E_button"
endif
endin
instr PLAY_SAMPLE_E
; p4
kVol = p4 / 127
ichnls = ftchnls(giSampleE)
if (ichnls == 1) then
asigL loscil3 kVol, 1, giSampleE, 1
asigR = asigL
elseif (ichnls == 2) then
asigL, asigR loscil3 kVol, 1, giSampleE, 1
;safety precaution if not mono or stereo
else
asigL = 0
asigR = 0
endif
outs asigL, asigR
endin
instr LOAD_SAMPLE_F
SampleFPath chnget "F_path"
if filevalid(SampleFPath) == 1 then
giSampleF ftgen 0,0,0,1,SampleFPath,0,0,0
chnset "fontcolour:0(255,255,0, 255)", "F_button"
endif
endin
instr PLAY_SAMPLE_F
; p4
kVol = p4 / 127
ichnls = ftchnls(giSampleF)
if (ichnls == 1) then
asigL loscil3 kVol, 1, giSampleF, 1
asigR = asigL
elseif (ichnls == 2) then
asigL, asigR loscil3 kVol, 1, giSampleF, 1
;safety precaution if not mono or stereo
else
asigL = 0
asigR = 0
endif
outs asigL, asigR
endin
instr LOAD_SAMPLE_G
SampleGPath chnget "G_path"
if filevalid(SampleGPath) == 1 then
giSampleG ftgen 0,0,0,1,SampleGPath,0,0,0
chnset "fontcolour:0(255,255,0, 255)", "G_button"
endif
endin
instr PLAY_SAMPLE_G
; p4
kVol = p4 / 127
ichnls = ftchnls(giSampleG)
if (ichnls == 1) then
asigL loscil3 kVol, 1, giSampleG, 1
asigR = asigL
elseif (ichnls == 2) then
asigL, asigR loscil3 kVol, 1, giSampleG, 1
;safety precaution if not mono or stereo
else
asigL = 0
asigR = 0
endif
outs asigL, asigR
endin
instr LOAD_SAMPLE_A
SampleAPath chnget "A_path"
if filevalid(SampleAPath) == 1 then
giSampleA ftgen 0,0,0,1,SampleAPath,0,0,0
chnset "fontcolour:0(255,255,0, 255)", "A_button"
endif
endin
instr PLAY_SAMPLE_A
; p4
kVol = p4 / 127
ichnls = ftchnls(giSampleA)
if (ichnls == 1) then
asigL loscil3 kVol, 1, giSampleA, 1
asigR = asigL
elseif (ichnls == 2) then
asigL, asigR loscil3 kVol, 1, giSampleA, 1
;safety precaution if not mono or stereo
else
asigL = 0
asigR = 0
endif
outs asigL, asigR
endin
instr LOAD_SAMPLE_H
SampleHPath chnget "H_path"
if filevalid(SampleHPath) == 1 then
giSampleH ftgen 0,0,0,1,SampleHPath,0,0,0
chnset "fontcolour:0(255,255,0, 255)", "H_button"
endif
endin
instr PLAY_SAMPLE_H
; p4
kVol = p4 / 127
ichnls = ftchnls(giSampleH)
if (ichnls == 1) then
asigL loscil3 kVol, 1, giSampleH, 1
asigR = asigL
elseif (ichnls == 2) then
asigL, asigR loscil3 kVol, 1, giSampleH, 1
;safety precaution if not mono or stereo
else
asigL = 0
asigR = 0
endif
outs asigL, asigR
endin
</CsInstruments>
<CsScore>
;causes Csound to run for about 7000 years...
f0 z
; instr 1 listens
i "GUI" 0 z
; MIDI listens too
i "MIDI_IN" 0 z
</CsScore>
</CsoundSynthesizer>