| Hello,
I got a new computer and have started playing with Gabriel Maldonado's
version of Csound. Here are a couple examples of real-time instruments
which I found fun. I play these from a midi keyboard with an expression
pedal, mod wheel and CC knobs.
Good Luck,
Hans Mikelson
; Orchestra
;----------------------------------------------
; Real Time Midi Controlled Csound
; by Hans Mikelson March 1998
; Tested with Maldonado's Csound on a 300 MHz Pentium II
; I use the following one line batch file csm.bat:
; csound -Msbmidi -odevaudio -b512 -p2 %1.orc %1.sco
; Called as follows for rtime.orc & rtime.sco:
; csm rtime
;----------------------------------------------
sr=44100
kr=4410
ksmps=10
nchnls=2
;-----------------------------------------------------------
; Simple sine
;-----------------------------------------------------------
instr 1
iwave = 1 ; Sine
inn notnum ; Input Note Number
iamp veloc ; Velocity
iamp = iamp*150 ; Convert to Amp
ipch = int(inn/12)+frac(inn/12)*12/100 ; NN to pitch
ifqc = cpspch(ipch) ; Pitch to Freq
; Amp Rise, Dec, AtDec
kamp linenr iamp, .05, .05, .05 ; Declick envelope
aout oscil 1, ifqc, iwave ; Oscillator
outs aout*kamp, aout*kamp ; Output
endin
;---------------------------------------------
; Combo Organ
;---------------------------------------------
instr 2
ifund cpsmidi ; Get the frequency of note num
iamp ampmidi 5000 ; Get amplitude and scale 0-5000
ifund1 init ifund*.5 ; Lower an octave
inh1 init sr/2/ifund1 ; Find maximum frequency
idtim1 init 1/ifund1/2 ; Delay time 1/2 wavelength
ifund2 init ifund1*2 ; 2nd Harmonic
inh2 init sr/2/ifund2 ; Avoid aliasing
idtim2 init 1/ifund2/2 ; Delay 1/2 wavelength
ifund3 init ifund2*3 ; 3rd Harmonic
inh3 init sr/2/ifund3 ; Avoid aliasing
idtim3 init 1/ifund3/2 ; Delay 1/2 wavelength
ifund4 init ifund3*4 ; 4th Harmonic
inh4 init sr/2/ifund4 ; Avoid aliasing
idtim4 init 1/ifund4/2 ; Delay 1/2 wavelength
kfco midictrl 3 ; read filter cut-off
kfco = kfco*100+500 ; Adjust filter cut-off
; I usually use an expression pedal for freq cut-off.
; Pedal is assigned to CC#3.
; Amp Rise, Dec, AtDec
kamp linenr iamp, .01, .01, .01 ; Declick
kvibamp midictrl 1 ; Vibrato from Mod Wheel
kvib1 oscil .0002, 6, 1 ; Vibrato
kvib = (1+kvib1*kvibamp) ; Adjust depth
; I use 4 knobs assigned to midi CC#'s 2, 64, 7 and 3
;
kamp1 midictrl 2, 120 ; Read the controllers
kamp2 midictrl 64, 50 ; and initial settings.
kamp3 midictrl 7, 0
kamp4 midictrl 4, 0
kamp1 = kamp1/127 ; Normalize 0-1
kamp2 = kamp2/127
kamp3 = kamp3/127
kamp4 = kamp4/127
; Amp Frequency # Harm Wave
apuls1 buzz kamp1, ifund1*kvib, inh1, 1
apuls2 delay apuls1, idtim1 ; Delay 1/2 wavelength
apuls3 buzz kamp2, ifund2*kvib, inh2, 1
apuls4 delay apuls3, idtim2
apuls5 buzz kamp3, ifund3*kvib, inh3, 1
apuls6 delay apuls5, idtim3
apuls7 buzz kamp4, ifund4*kvib, inh4, 1
apuls8 delay apuls7, idtim4
; Integrate the signals. A pulse - delayed pulse gives a square wave.
; In this case there are four.
asquare integ apuls1+apuls3+apuls5+apuls7-apuls2-apuls4-apuls6-apuls8
aout tone asquare*kamp, kfco ; Low-pass filter & scale the result
outs aout, aout
endin
;---------------------------------------------
; Analog Synthesizer PWM
;---------------------------------------------
instr 3
ifund1 cpsmidi ; Get fqc from NN
iamp ampmidi 10000 ; Get amp 0-10000
inh1 init sr/2/ifund1 ; # harmonics
idtim1 init 500/ifund1 ; Delay time (vdelay is in msec.)
kfco midictrl 3 ; Filter cut-off (pedal)
kfco = kfco+10 ; Filter freq is not in Hz
; Amp Rise, Dec, AtDec
kamp linenr iamp, .01, .01, .01 ; Declick
kvibamp midictrl 1 ; Vibrato
kvib1 oscil .0002, 6, 1
kvib = (1+kvib1*kvibamp)
krez midictrl 2, 10 ; Resonance knob
krez = krez/10
kpwmrt midictrl 64, 120 ; PWM Rate knob
kpwmrt = kpwmrt*ifund1/5000
kpwmd midictrl 7, 50 ; PWM Depth knob
kpwm1 oscil kpwmd/260, kpwmrt, 1 ; PWM oscillator
kpwm1 = idtim1*(kpwm1+.5) ; Modulate high pitches faster
apuls1 buzz 1, ifund1*kvib, inh1, 1 ; Sound sorce
apuls2 vdelay apuls1, kpwm1, idtim1 ; Vary pulse width
asquare integ apuls1-apuls2 ; Square wave
aout lpres asquare*kamp, kfco, krez ; Resonant filter
outs aout, aout
endin
;---------------------------------------------
; Analog Synthesizer Saw
;---------------------------------------------
instr 4
ifund1 cpsmidi ; Get frequency
ifund1 = ifund1*.5 ; Lower an octave
iamp ampmidi 4000 ; Get amp 0-4000
inh1 init sr/2/ifund1 ; Max fqc below Nyquist
kfco midictrl 3 ; Filter cut-off fqc (pedal)
kfco = kfco*1.5+5
krez midictrl 2, 10 ; Resonance knob
krez = krez/5
kdetun1 midictrl 64 ; Detune Osc 2 knob
kdetun1 = (1-kdetun1/5000)
kdetun2 midictrl 7
kdetun2 = (1-kdetun2/5000) ; Detune Osc 3 knob
; Amp Rise, Dec, AtDec
kamp linenr iamp, .01, .01, .01 ; Declick
kvibamp midictrl 1 ; Vibrato Mod Wheel
kvib1 oscil .0002, 6, 1 ; Vibraot Oscilator
kvib = (1+kvib1*kvibamp)
kfenv linseg 1, .1, 2, .2, .7, .01, .7 ; Filter Accent envelope
apuls1 buzz 1, ifund1*kvib, inh1, 1 ; Fundamental
apuls2 buzz 1, ifund1*kvib*kdetun1, inh1, 1 ; Detune 1 Osc
apuls3 buzz 1, ifund1*kvib*kdetun2, inh1, 1 ; Detune 2 Osc
asaw integ apuls1+apuls2+apuls3
aout lpres (asaw-1.5)*kamp, kfco*kfenv, krez ; Center wave and filter
outs aout, aout
endin
; SCORE
;----------------------------------------------
; Real Time Midi Controlled Csound
; Tested with Maldonado's Csound
;----------------------------------------------
f0 60 ; Runs for 60 seconds
f1 0 65536 10 1 ; Sine
f27 0 128 5 1 128 8 ; Amp scale (not used)
|