Csound Csound-dev Csound-tekno Search About

Real Time Csound orc/sco's

Date1998-03-19 03:18
FromHans Mikelson
SubjectReal Time Csound orc/sco's
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)