├── README.md ├── .DS_Store ├── markovbeat ├── LCADw5Dsp ├── LCADw5Dsp.xtm.scm ├── separate beats ├── progression.xtm ├── fmsynth-piano-morph ├── synth-morph.xtm ├── kits ├── untitled.xtm ├── violins ├── ramp.scm.xtm ├── opengl_101.xtm ├── audiovisual.xtm ├── synth_setup.xtm ├── LCADw4Rhythm.xtm.scm ├── SMHMusicPolygons.xtm ├── circleOfCircles.xtm ├── LCADw4Rhythm ├── LCADweek2.xtm.scm ├── multimorph.xtm ├── morphandala.xtm ├── LCADweek1.xtm.scm ├── dspGraphics.xtm ├── circleOfCircles2.xtm ├── moreRhythm.xtm ├── morphing.xtm ├── LCADw4Harmony.xtm ├── LCADsetup5.xtm.scm ├── LCADweek3.xtm.scm ├── LCADsetup2.xtm.scm ├── LCADsetup.xtm.scm ├── LCADsetup3.xtm.scm ├── vnoise.glsl ├── LCADsetup4.xtm.scm └── LCADsetup6.xtm /README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonlevine/Live-Code-a-Day/HEAD/.DS_Store -------------------------------------------------------------------------------- /markovbeat: -------------------------------------------------------------------------------- 1 | (define drum 10) 2 | 3 | 4 | (define markov-beat 5 | (lambda (beat dur) 6 | (set! drums (random (cdr (assoc drums '((10 20) 7 | (20 46 10 20 20) 8 | (46 20)))))) 9 | 10 | (play drums drum 130 dur) 11 | 12 | (callback (*metro* (+ beat (* 0.5 dur))) 'markov-beat (+ beat dur) dur) 13 | )) 14 | 15 | (markov-beat (*metro* 'get-beat 1) 1/2) -------------------------------------------------------------------------------- /LCADw5Dsp: -------------------------------------------------------------------------------- 1 | (bind-func osc_c ; osc_c is the same as last time 2 | (lambda (phase) 3 | (lambda (amp freq) 4 | (let ((inc:SAMPLE (* 3.141592 (* 2.0 (/ freq 44100.0))))) 5 | (set! phase (+ phase inc)) 6 | (* amp (sin phase)))))) 7 | 8 | ; remember that the dsp closure is called for every sample 9 | ; also, for convenience, let's make a type signature for the 10 | ; DSP closure 11 | 12 | (bind-alias DSP [SAMPLE,SAMPLE,i64,i64,SAMPLE*]*) 13 | 14 | (bind-func dsp:DSP ; note the use of the type signature 'DSP' 15 | (let ((osc1 (osc_c 0.0)) 16 | (osc2 (osc_c 0.0)) 17 | (osc3 (osc_c 0.0))) 18 | (lambda (in time channel data) 19 | (cond ((= channel 1) 20 | (+ (osc1 0.5 220.0) 21 | (osc2 0.5 350.0))) 22 | ((= channel 0) 23 | (osc3 0.5 210.0)) 24 | (else 0.0))))) -------------------------------------------------------------------------------- /LCADw5Dsp.xtm.scm: -------------------------------------------------------------------------------- 1 | (bind-func osc_c ; osc_c is the same as last time 2 | (lambda (phase) 3 | (lambda (amp freq) 4 | (let ((inc:SAMPLE (* 3.141592 (* 2.0 (/ freq 44100.0))))) 5 | (set! phase (+ phase inc)) 6 | (* amp (sin phase)))))) 7 | 8 | ; remember that the dsp closure is called for every sample 9 | ; also, for convenience, let's make a type signature for the 10 | ; DSP closure 11 | 12 | (bind-alias DSP [SAMPLE,SAMPLE,i64,i64,SAMPLE*]*) 13 | 14 | (bind-func dsp:DSP ; note the use of the type signature 'DSP' 15 | (let ((osc1 (osc_c 0.0)) 16 | (osc2 (osc_c 0.0)) 17 | (osc3 (osc_c 0.0))) 18 | (lambda (in time channel data) 19 | (cond ((= channel 1) 20 | (+ (osc1 0.5 220.0) 21 | (osc2 0.5 350.0))) 22 | ((= channel 0) 23 | (osc3 0.5 210.0)) 24 | (else 0.0))))) -------------------------------------------------------------------------------- /separate beats: -------------------------------------------------------------------------------- 1 | (define *metro* (make-metro 140)) 2 | 3 | (define *subdiv* 1) 4 | (define *metre1* (make-metre '(8) 1/4 )) 5 | 6 | (define kick 7 | (lambda (beat dur) 8 | (if (= (modulo beat 16) 0) 9 | (play edrums 12 180 1)) 10 | 11 | ;(if (or (= (modulo beat 6) 4) (= (modulo beat 16) 5)) 12 | ;(play edrums (random 41 46) (random '(110 0 0 0)) 1) 13 | 14 | (callback (*metro* (+ beat (* 0.5 dur))) 'ki ck (+ beat dur) dur) 15 | )) 16 | 17 | (kick (*metro* 'get-beat 1) 1/4) 18 | 19 | (define hihats 20 | (lambda (beat dur) 21 | (play djembe (random 20 28) 0 1) 22 | 23 | 24 | (callback (*metro* (+ beat (* 0.5 dur) 0.1)) 'hihats (+ beat dur 0.3) dur) 25 | )) 26 | 27 | (hihats (*metro* 'get-beat 1) 0.26) 28 | 29 | (define perc 30 | (lambda (beat dur) 31 | (play conga (random 20 39) (random '(100)) 1/8) 32 | 33 | 34 | (callback (*metro* (+ beat (* 0.5 dur))) 'pe rc (+ beat dur 0.1) dur) 35 | )) 36 | 37 | (perc (*metro* 'get-beat 1) 1/4) -------------------------------------------------------------------------------- /progression.xtm: -------------------------------------------------------------------------------- 1 | (define progression 2 | (lambda (beat dur degree ) 3 | (let ((chord (pc:make-chord 48 77 5 (pc:diatonic 0 '^ degree)))) 4 | (if (*metre1* beat 1.0) 5 | (for-each (lambda (p) 6 | (play piano p 160 dur)) 7 | chord)) 8 | 9 | 10 | (play piano (pc:relative (car chord) (trir 0 7 1/3) (pc:chord->scale 0 degree)) 130 50000) 11 | ) 12 | 13 | ;(callback (*metro* (+ beat (* .5 dur))) 'progression (+ beat dur) dur 14 | (random (cdr (assoc degree '((i iv v iii vi) 15 | (ii v vii) 16 | (iii vi) 17 | (iv v ii vii i) 18 | (v i vi) 19 | (vii v i) 20 | (vi ii)))))))) 21 | 22 | (progression (*metro* 'get-beat 1) 1/2 'i) 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | (pc:make-chord 36 77 5 (pc:diatonic 0 '^ degree)) 31 | (pc:chord->scale 0 'iii) -------------------------------------------------------------------------------- /fmsynth-piano-morph: -------------------------------------------------------------------------------- 1 | (bind-func dsp:DSP 2 | (lambda (in time chan dat) 3 | (cond ((< chan 2.0) 4 | (+ 5 | (* 0.3 (strings in time chan dat)) 6 | (* (strings in time chan dat) (subbass in time chan dat)) 7 | (* 0.3 (subbass in time chan dat)) 8 | 9 | (* 0.1 (piano in time chan dat)) 10 | (* (piano in time chan dat) (fmsynth in time chan dat)) 11 | (* 0.1 (fmsynth in time chan dat)))) 12 | (else 0.0)))) 13 | 14 | (dsp:set! dsp) 15 | 16 | 17 | (define scale (pc:scale 0 'lydian)) 18 | 19 | (define piano-fmsynth-morph 20 | (lambda (beat dur) 21 | 22 | (play fmsynth (pc:relative (+ 36.0 root) (rampr 7 7 1) scale) (cosr 40 10 1/2) dur ) 23 | (play piano (pc:relative (+ 36.0 root) (rampr 7 7 1) scale) (sinr 140 20 1/2) dur) 24 | 25 | 26 | (callback (*metro* (+ beat (* 0.5 dur))) 'piano-fmsynth-morph (+ beat dur) dur) 27 | )) 28 | 29 | 30 | (piano-fmsynth-morph (*metro* 'get-beat 1) 1/4 ) 31 | 32 | (define sub-strings-morph 33 | (lambda (beat dur) 34 | 35 | (play subbass (pc:relative (+ 12.0 root) (cosr 7 5 1/8) scale) (cosr 110 10 1/8) dur) 36 | ;(play strings (pc:relative 24 (cosr 0 3 1/3) scale) (sinr 110 20 1/8) dur) 37 | 38 | 39 | (callback (*metro* (+ beat (* 0.5 dur))) 'sub-strings-morph (+ beat dur) dur) 40 | )) 41 | 42 | 43 | (sub-strings-morph (*metro* 'get-beat 1) 1 ) -------------------------------------------------------------------------------- /synth-morph.xtm: -------------------------------------------------------------------------------- 1 | 2 | (define synth-attack 3 | (lambda (beat dur) 4 | (let ((morph (* 1.0 (+ 0.5 (* 0.5 (sin (/ (now) 100000.0))))))) 5 | (play fmsynth 60 40 dur 1.0 (+ 5.0 (* 20.0 morph))) 6 | (play fmsynth 64 40 dur 1.0) 7 | (play fmsynth 67 40 dur 1.0) 8 | (play fmsynth 69 40 dur 1.0) 9 | (play fmsynth 72 40 dur 1.0)) 10 | (callback (*metro* (+ beat (* 0.5 dur))) 'synth-attack (+ beat dur) dur) 11 | )) 12 | 13 | (define synth-attack 14 | (lambda (beat dur) 15 | (let ((i 0) (n 5)) 16 | (dotimes (i n) 17 | (let ((morph (* 1.0 (+ 0.5 (* 0.5 (sin (/ (now) (+ (* i 100.0) 100000.0)))))))) 18 | (play fmsynth (pc:relative 60 (* i 2.0) (pc:scale 1 'aeolian)) 19 | 40 dur 1.0 (+ 5.0 (* 20.0 morph)))))) 20 | (callback (*metro* (+ beat (* 0.5 dur))) 'synth-attack (+ beat dur) dur) 21 | )) 22 | 23 | 24 | (synth-attack (*metro* 'get-beat 1) 1/4) 25 | 26 | 27 | (play-note (now) shimmer 60 40 44100) 28 | (play-note (now) shimmer 64 40 44100) 29 | (play-note (now) shimmer 67 40 44100) 30 | (play-note (now) shimmer 69 40 44100) 31 | (play-note (now) shimmer 72 40 44100) 32 | 33 | (play-note (now) sawbass 60 80 44100) 34 | (play-note (now) sawbass 64 80 44100) 35 | (play-note (now) sawbass 67 80 44100) 36 | (play-note (now) sawbass 69 80 44100) 37 | (play-note (now) sawbass 72 80 44100) 38 | 39 | (play-note (now) subbass 60 100 44100) 40 | (play-note (now) subbass 64 100 44100) 41 | (play-note (now) subbass 67 100 44100) 42 | (play-note (now) subbass 69 100 44100) 43 | (play-note (now) subbass 72 100 44100) -------------------------------------------------------------------------------- /kits: -------------------------------------------------------------------------------- 1 | (define *metro* (make-metro 130)) 2 | 3 | (define *subdiv* 1) 4 | (define *metre1* (make-metre '(3 3 3 3 2 2 8 16) 1/2 )) 5 | (define *metre1* (make-metre '(6 3 3 12) 1/2 )) 6 | 7 | (define kit 8 | (lambda (beat dur) 9 | 10 | (cond ((*metre1* beat 1.0) (play edrums 10 120 (* 1.0 dur))) 11 | ((*metre1* beat 2.0) (play edrums 46 (random '(100 0)) dur)) 12 | ((*metre1* beat 3.0) (play edrums (random 41 46) 90 dur)) 13 | ((*metre1* beat 5.0) (play drums 46 120 dur)) 14 | ;((*metre1* beat 6.0) (play edrums 14 100 dur)) 15 | ; ((*metre1* beat 9.0) (play drums 41 90 (* 3.0 dur))) 16 | ; ((*metre1* beat 12.0) (play 1/4 perc 15 100 dur)) 17 | ((*metre1* beat 13.0) (play drums 46 100 dur))) 18 | 19 | ; (if (< (modulo beat 6) 4) 20 | ; (play conga (random 10 17) (cosr 90 20 1/4) 1)) 21 | 22 | (play djembe (trir (cosr 29 5 1/24) 8 1) (cosr 90 20 1/12) 1/3) 23 | 24 | 25 | 26 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit (+ beat dur) 1/6) 27 | )) 28 | 29 | (kit (*metro* 'get-beat 1) 1/3) 30 | 31 | (define kit2 32 | (lambda (beat dur) 33 | 34 | (cond ((*metre1* beat 1.0) (play edrums 10 100 (* 3.0 dur))) 35 | ((*metre1* beat 2.0) (play edrums 11 100 dur)) 36 | ((*metre1* beat 4.0) (play fmsynth 24 50 dur)) 37 | ((*metre1* beat 6.0) (play drums 41 0 dur)) 38 | ((*metre1* beat 7.0) (play fmsynth 36 40 dur)) 39 | ((*metre1* beat 9.0) (play perc 13 80 (* 3.0 dur))) 40 | ; ((*metre1* beat 12.0) (play 1/4 perc 15 0 dur)) 41 | ((*metre1* beat 14.0) (play drums 31 60 dur))) 42 | 43 | 44 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit 2 (+ beat dur) dur) 45 | )) -------------------------------------------------------------------------------- /untitled.xtm: -------------------------------------------------------------------------------- 1 | 2 | (bind-val degree double 0.0) 3 | 4 | (bind-func ramp_degree 5 | (lambda (val:double) 6 | (set! degree val) 7 | (let ((vtk (- val 10)) (seconds 0.3)) 8 | (set-signal! degree vtk seconds)))) 9 | 10 | 11 | 12 | 13 | 14 | (ramp_degree 43.0) 15 | 16 | 17 | 18 | 19 | (define kit 20 | (lambda (beat dur) 21 | 22 | (cond ((*metre1* beat 1.0) (play edrums 12 150 dur)) 23 | ((*metre1* beat 2.0) (play conga 21 140 dur)) 24 | ((*metre1* beat 3.0) (play conga 23 130 dur)) 25 | ((*metre1* beat 4.0) (play conga 46 150 dur))) 26 | 27 | ; (cond ((*metre1* beat 1.0) (rampDegree 10.0)) 28 | ; ((*metre2* beat 1.0) (rampDegree 21.0)) 29 | ; ((*metre3* beat 3.0) (rampDegree 23.0)) 30 | ; ((*metre3* beat 4.0) (rampDegree 46.0))) 31 | (send_vals (*metre1* beat)) 32 | 33 | ; (play doumbek (cosr 20 10 dur) 140 dur) 34 | 35 | ; ) 36 | 37 | ;(play doumbek (rampr 20 10 1/8) 140 dur) 38 | 39 | 40 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit (+ beat dur) dur) 41 | )) 42 | 43 | 44 | (kit (*metro* 'get-beat 1) 1/4) 45 | 46 | 47 | 48 | 49 | 50 | (bind-func send_vals 51 | (lambda (beat:double) 52 | (cond ((= beat 1.0) (set! first_ring (+ first_ring 20.0))) 53 | ((= beat 2.0) (set! second_ring (- second_ring 29.02))) 54 | ((= beat 3.0) (set! third_ring (+ third_ring 48.03))) 55 | ((= beat 4.0) (set! fourth_ring (- fourth_ring 37.7))) 56 | ((= beat 5.0) (set! fifth_ring (+ fifth_ring 26.06)))) 57 | 58 | 59 | )) 60 | 61 | 62 | (first_ring) 63 | 64 | (define *subdiv* 1/4) 65 | (define *metre1* (make-metre '( 8) *subdiv*)) 66 | (define *metre2* (make-metre '( 3 2 1) *subdiv*)) 67 | (define *metre3* (make-metre '( 2 ) *subdiv*)) -------------------------------------------------------------------------------- /violins: -------------------------------------------------------------------------------- 1 | (define scale (pc:scale 0 'ionian)) 2 | 3 | (define root 1) 4 | (define pcr 5 | (lambda () 6 | (pc:relative 48 root scale))) 7 | 8 | 9 | (define *metro* (make-metro 100)) 10 | 11 | (define *metre1* (make-metre '( 3 ) 1)) 12 | (define *metre2* (make-metre '( 4 ) 1)) 13 | (define *metre3* (make-metre '( 4 4 3 3 2 ) 1/2)) 14 | 15 | (define progression 16 | (lambda (beat dur degree ) 17 | (if (*metre1* beat 1.0) 18 | (for-each (lambda (p) 19 | (play strings p 120 (* 3.0 dur))) 20 | (pc:make-chord 24 36 (random '(1)) (pc:diatonic 0 '- degree)))) 21 | 22 | (if (*metre2* beat 1.0) 23 | (for-each (lambda (p) 24 | (play strings p 120 (* 4.0 dur))) 25 | (pc:make-chord 36 48 (random '(1)) (pc:diatonic 0 '- degree)))) 26 | 27 | 28 | 29 | 30 | 31 | (callback (*metro* (+ beat (* .5 dur))) 'progression (+ beat dur) dur 32 | (random (cdr (assoc degree '((i iv v iii6 vi) 33 | (ii v vii) 34 | (iii6 vi) 35 | (iv v ii vii i) 36 | (v i vi) 37 | (vii v i) 38 | (vi ii)))))))) 39 | 40 | (progression (*metro* 'get-beat 1) 1 'i) 41 | 42 | (play-note (now) strings 48 120 44100) 43 | 44 | 45 | (define kit 46 | (lambda (beat dur) 47 | 48 | (cond ((*metre3* beat 1.0) (play edrums (random 14 18) 150 dur)) 49 | ((*metre3* beat 2.0) (play edrums 20 130 dur)) 50 | ((*metre3* beat 3.0) (play edrums 45 120 dur)) 51 | ((*metre3* beat 4.0) (play edrums 46 150 dur))) 52 | 53 | (play edrums 20 120 dur) 54 | 55 | (if (*metre3* beat 1.0) 56 | ) 57 | 58 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit (+ beat dur) 1/2) 59 | )) 60 | 61 | (kit (*metro* 'get-beat 1) 1/2) 62 | -------------------------------------------------------------------------------- /ramp.scm.xtm: -------------------------------------------------------------------------------- 1 | ;; define me first! 2 | (define-macro (set-signal! variable value seconds . rate) 3 | (let ((r (if (null? rate) 1/30 (car rate)))) 4 | (if (and (or (list? value) 5 | (defined? value)) 6 | (closure? (eval value))) 7 | `(let l1929 ((t (now)) 8 | (count (/ ,seconds ,r))) 9 | (if (equal? ,variable 'stop-signal) 10 | 'done 11 | (begin (set! ,variable (apply ,value (list ,variable))) 12 | (if (> count 1) 13 | (callback (+ t (* *samplerate* ,r)) l1929 (+ t (* *samplerate* ,r)) (- count 1)))))) 14 | `(let l1929 ((t (now)) 15 | (inc (/ (- ,value ,variable) (real->integer (/ ,seconds ,r)))) 16 | (count (real->integer (/ ,seconds ,r)))) 17 | (if (equal? ,variable 'stop-signal) 18 | 'done 19 | (begin (set! ,variable (+ ,variable inc)) 20 | (if (> count 1) 21 | (callback (+ t (* *samplerate* ,r)) l1929 (+ t (* *samplerate* ,r)) inc (- count 1))))))))) 22 | 23 | ;;; test example 24 | 25 | 26 | ;; define a global var 27 | (define *g1* 0.0) 28 | 29 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 30 | ;; pretty printing for global var 31 | (bind-func print_g1 32 | (lambda (x:double) 33 | (printf "%07.3f\r" x))) 34 | 35 | (define printg1 36 | (lambda (beat dur) 37 | (print_g1 *g1*) 38 | (ascii-print-color 0 2 8) 39 | (callback (*metro* (+ beat (* .5 dur))) 'printg1 (+ beat dur) dur)) 40 | ) 41 | 42 | (printg1 (*metro* 'get-beat 4) 1/8) 43 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 44 | 45 | ;; change global var at random times to random values 46 | (define changeg1 47 | (lambda () 48 | (let ((vtk (random 100)) 49 | (seconds (random 1 10))) 50 | (print "slide to" vtk "over" seconds "seconds\n") 51 | (set-signal! *g1* vtk seconds) 52 | (callback (+ (now) (* *samplerate* seconds)) 'changeg1) 53 | ))) 54 | 55 | 56 | (changeg1) -------------------------------------------------------------------------------- /opengl_101.xtm: -------------------------------------------------------------------------------- 1 | ;;; opengl_101.xtm -- Simplest possible OpenGL example 2 | 3 | ;; Author: Andrew Sorensen 4 | ;; Keywords: extempore 5 | 6 | ;;; Commentary: 7 | 8 | ;; 9 | 10 | ;;; Code: 11 | (define glctx (gl:make-ctx ":0.0" #f 0.0 0.0 1024.0 768.0)) 12 | 13 | ;; a trivial opengl draw loop 14 | (bind-func my-gl-loop 15 | (let ((size 0.01)) 16 | (lambda (degree) 17 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 18 | (glLoadIdentity) 19 | (glTranslated 0.0 -1.0 0.0) 20 | (let ((i:double 0.0)) 21 | (dotimes (i 1000.0) 22 | (glTranslated (/ i 2000.0) 0.0 0.0) 23 | (glColor3d (/ i 1500.0) 0.0 1.0) 24 | (glRotated degree (/ i 200000.0) 0.5 0.0) 25 | (glBegin GL_QUADS) 26 | (glVertex2d 0.0 0.0) 27 | (glVertex2d size 0.0) 28 | (glVertex2d size size) 29 | (glVertex2d 0.0 size) 30 | (glEnd)))))) 31 | 32 | ; standard impromptu callback 33 | (define opengl-test 34 | (lambda (degree) 35 | (my-gl-loop degree) 36 | (gl:swap-buffers glctx))) 37 | ;(callback (+ (now) 500) 'opengl-test (+ degree .005)))) 38 | 39 | (define meta-loop 40 | (lambda () 41 | (opengl-test *degree*) 42 | (callback (+ (now) 500) 'meta-loop))) 43 | 44 | (meta-loop) 45 | 46 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 47 | 48 | (define degree:double 0.1) 49 | (degree) 50 | (bind-func my-gl-loop2 51 | 52 | (lambda () 53 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 54 | (glLoadIdentity) 55 | (glTranslated 0.0 -1.0 0.0) 56 | (let ((i:double 0.0)) 57 | (dotimes (i 1000.0) 58 | (glTranslated (/ i 2000.0) 0.0 0.0) 59 | (glColor3d (/ i 1500.0) 0.0 1.0) 60 | (glRotated degree (/ i 200000.0) 0.5 0.0) 61 | (glBegin GL_QUADS) 62 | (glVertex2d 0.0 0.0) 63 | (glVertex2d 0.01 0.0) 64 | (glVertex2d 0.01 0.01) 65 | (glVertex2d 0.0 0.01) 66 | (glEnd))))) 67 | 68 | 69 | (define opengl-test 70 | (lambda () 71 | (my-gl-loop2) 72 | (gl:swap-buffers glctx) 73 | (callback (+ (now) 500) 'opengl-testx))) 74 | 75 | (opengl-test) 76 | 77 | ; 78 | -------------------------------------------------------------------------------- /audiovisual.xtm: -------------------------------------------------------------------------------- 1 | 2 | (define kit 3 | (lambda (beat dur) 4 | 5 | (cond ((*metre1* beat 1.0) (play edrums 12 150 dur)) 6 | ((*metre1* beat 2.0) (play conga 21 140 dur)) 7 | ((*metre1* beat 3.0) (play conga 23 130 dur)) 8 | ((*metre1* beat 4.0) (play conga 25 150 dur))) 9 | 10 | ; (cond ((*metre1* beat 1.0) (rampDegree 10.0)) 11 | ; ((*metre2* beat 1.0) (rampDegree 21.0)) 12 | ; ((*metre3* beat 3.0) (rampDegree 23.0)) 13 | ; ((*metre3* beat 4.0) (rampDegree 46.0))) 14 | (send_vals (*metre1* beat)) 15 | ;(set! beatNum (*metre1* beat)) 16 | ; (play doumbek (cosr 20 10 dur) 140 dur) 17 | 18 | ; ) 19 | 20 | ;(play doumbek (rampr 20 10 1/8) 140 dur) 21 | 22 | 23 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit (+ beat dur) dur) 24 | )) 25 | 26 | 27 | (kit (*metro* 'get-beat 1) 1/4) 28 | 29 | 30 | (bind-val beatNum double 3.0) 31 | 32 | 33 | (bind-func send_vals 34 | (lambda (beat:double) 35 | 36 | 37 | (cond ((= beat 1.0) (set! first_ring (+ first_ring 20.0))) 38 | ((= beat 2.0) (set! second_ring (- second_ring 40.02))) 39 | ((= beat 3.0) (set! third_ring (+ third_ring 80.03))) 40 | ((= beat 4.0) (set! fourth_ring (- fourth_ring 160.7))) 41 | ((= beat 5.0) (set! fifth_ring (+ fifth_ring 320.06)))) 42 | 43 | 44 | )) 45 | 46 | (bind-func send_vals 47 | (lambda (beat:double) 48 | (if (= beat 1.0) (set! beatNum (modulo (+ beatNum beat) 8))) 49 | (set! first_ring (- first_ring 10.0)) 50 | (set! second_ring (- second_ring 10.0)) 51 | (set! third_ring (- third_ring 10.0)) 52 | (set! fourth_ring (- fourth_ring 10.0)) 53 | (set! fifth_ring (- fifth_ring 10.0)) 54 | 55 | (cond ((= beat 1.0) (set! first_ring 200.0)) 56 | ((= beat 2.0) (set! second_ring 200.0)) 57 | ((= beat 3.0) (set! third_ring 200.0)) 58 | ((= beat 4.0) (set! fourth_ring 200.0)) 59 | ((= beat 5.0) (set! fifth_ring 500.0))) 60 | 61 | 62 | )) 63 | 64 | 65 | (first_ring) 66 | 67 | (define *subdiv* 1/4) 68 | (define *metre1* (make-metre '( 8) *subdiv*)) 69 | (define *metre2* (make-metre '( 3 2 1) *subdiv*)) 70 | (define *metre3* (make-metre '( 2 ) *subdiv*)) -------------------------------------------------------------------------------- /synth_setup.xtm: -------------------------------------------------------------------------------- 1 | ;;;; Much of the content in this file is taken from various Extempore 2 | ;;;; blog posts by Ben Swift which are indexed here: 3 | ;;;; http://benswift.me/extempore-docs/index.html 4 | ;;;; 5 | 6 | ;;; Load the needed libraries -- this will take several minutes 7 | ;;; 8 | (sys:set-default-timeout (* 2 13953200)) 9 | 10 | (sys:load "libs/core/instruments.xtm") 11 | (sys:load "libs/core/pc_ivl.xtm") 12 | 13 | ;;; Set up the constants we're going to need 14 | ;;; 15 | 16 | 17 | 18 | 19 | 20 | ;;; Add the samplers/instruments we're going to need to the dsp output 21 | ;;; callback 22 | ;;; 23 | (define-instrument subbass subbass_note_c subbass_fx) 24 | (define-instrument sawbass sawbass_note_c sawbass_fx) 25 | (define-instrument shimmer shimmer_pad_note_c shimmer_pad_fx) 26 | (define-instrument fmsynth fmsynth_note_c fmsynth_fx) 27 | 28 | 29 | (bind-func jasons_rms 30 | (let ((d:SAMPLE* (alloc FRAMES)) 31 | (t 0) 32 | (db:SAMPLE 0.0)) 33 | (lambda (x:SAMPLE) 34 | (pset! d (% t FRAMES) (* x x)) 35 | (set! t (+ t 1)) 36 | (if (= 0 (% t FRAMES)) 37 | (set! db (+ 3.0 (amp2db (sqrt (mean d FRAMES)))))) 38 | x))) 39 | 40 | (bind-func dsp:DSP 41 | (let ((rms (rms_st_c)) ;; stereo rms 42 | (left:SAMPLE 0.0) 43 | (right:SAMPLE 0.0)) 44 | (lambda (in time chan dat) 45 | ;; for convenience set left and right 46 | ;; once every 'FRAMES' 47 | (if (= 0 (% time FRAMES)) 48 | (begin (set! left (rms.left)) 49 | (set! right (rms.right)))) 50 | ;; rms passes signal straight through 51 | (rms chan 52 | (+ 53 | (fmsynth in time chan dat) 54 | (shimmer in time chan dat) 55 | (sawbass in time chan dat) 56 | (subbass in time chan dat)))))) 57 | 58 | 59 | ;(bind-func dsp:DSP 60 | ; (lambda (in time chan dat) 61 | ; (cond ((< chan 2.0) 62 | ; (+ (drums in time chan dat) 63 | ; (edrums in time chan dat) 64 | ; (conga in time chan dat) 65 | ; (djembe in time chan dat) 66 | ; (perc in time chan dat) 67 | ; (strings in time chan dat) 68 | ; (piano in time chan dat) 69 | ; (subbass in time chan dat) 70 | ; (fmsynth in time chan dat))) 71 | ; (else 0.0)))) 72 | 73 | (dsp:set! dsp) -------------------------------------------------------------------------------- /LCADw4Rhythm.xtm.scm: -------------------------------------------------------------------------------- 1 | ;;;;; drums 2 | ;; define me first! 3 | (define *metro* (make-metro 90)) 4 | 5 | (define *subdiv* 1/2) 6 | (define *metre1* (make-metre '( 4 2 3 1 3 ) *subdiv*)) 7 | (define *metre2* (make-metre '( 3 2 1) *subdiv*)) 8 | (define *metre3* (make-metre '( 3 3 1 2) *subdiv*)) 9 | (define *metre4* (make-metre '( 3 3 1 3 3 2) *subdiv*)) 10 | 11 | 12 | (define *degree* 0.0) 13 | (let ((vtk 0.0) (seconds 15)) 14 | (set-signal! *degree* vtk seconds)) 15 | 16 | (set-signal! *kickVel* 0 15) 17 | 18 | (define rampDegree 19 | (lambda (degree) 20 | (set! *degree* degree) 21 | (let ((vtk (- degree 10)) (seconds 0.3)) 22 | (set-signal! *degree* vtk seconds)))) 23 | 24 | 25 | (bind-val degree double 0.0) 26 | 27 | (bind-func ramp_degree 28 | (lambda (val:double) 29 | (set! degree 1.0) 30 | (let ((vtk (- val 10)) (seconds 0.3)) 31 | (set-signal! degree vtk seconds)))) 32 | 33 | 34 | (ramp_degree 43.0) 35 | 36 | (define kit 37 | (lambda (beat dur) 38 | 39 | (cond ((*metre1* beat 1.0) (play edrums (random 14 18) 150 dur)) 40 | ((*metre1* beat 2.0) (play perc 11 130 dur)) 41 | ((*metre1* beat 3.0) (play perc (random '(10 14)) 100 dur)) 42 | ((*metre1* beat 4.0) (play drums 46 150 dur))) 43 | 44 | (if (*metre4* beat 1.0) (play perc 16 100 dur)) 45 | 46 | (cond ((*metre1* beat 1.0) (set_curr_note -14)) 47 | ((*metre2* beat 1.0) (set_curr_note 11)) 48 | ((*metre3* beat 3.0) (set_curr_note 24)) 49 | ((*metre3* beat 4.0) (set_curr_note 96))) 50 | 51 | ;(play doumbek (cosr 20 10 dur) 140 dur) 52 | 53 | ; ) 54 | 55 | ;(play doumbek (rampr 20 10 1/8) 140 dur) 56 | (play edrums 20 (cosr 100 20 1/4) dur) 57 | 58 | 59 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit (+ beat dur) 1/4) 60 | )) 61 | 62 | 63 | (kit (*metro* 'get-beat 1) 1/4) 64 | 65 | 66 | 67 | 68 | (define kit2 69 | (lambda (beat dur) 70 | (cond ((*metre1* beat 1.0) (play djembe (random 10 11) (random '(140 0)) dur)) 71 | ((*metre2* beat 1.0) (play djembe (random 16 17) (random '(120 0)) dur)) 72 | ((*metre3* beat 1.0) (play djembe (random 22 13) (random '(120 0)) dur))) 73 | 74 | ; (play djembe (random 20 25) (random 80 130) 1/4) 75 | 76 | 77 | 78 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit2 (+ beat dur) dur) 79 | )) 80 | 81 | (kit2 (*metro* 'get-beat 1) 1/2) 82 | 83 | (play conga (random 10 15) 140 1) 84 | 85 | 86 | (define perc1 87 | (lambda (beat dur) 88 | (if (*metre3* beat 1.0) (play piano (random 50 54) (random '(100 130)) dur)) 89 | (if (*metre2* beat 1.0) (play piano (rampr 30 12 dur) (random '(130 110)) dur)) 90 | (if (*metre1* beat 1.0) (play piano (rampr 20 13 dur) (random '(100 130)) dur)) 91 | (if (*metre1* beat 2.0) (play piano (random 10 17) (random '(100 130)) dur)) 92 | 93 | (callback (*metro* (+ beat (* 0.5 dur))) 'perc1 (+ beat dur) dur) 94 | )) 95 | 96 | (perc1 (*metro* 'get-beat 1) 1/4) 97 | 98 | (define metre-change 99 | (lambda (beat) 100 | (if (= (modulo beat 20) 0) 101 | (set! *subdiv* (random '(1/2 1/6)))) 102 | 103 | (if (= (modulo beat 20) 5) 104 | (set! *subdiv* (random '(1/5 1/3)))) 105 | 106 | (if (= (modulo beat 20) 15) 107 | (set! *subdiv* 1/4)) 108 | 109 | (if (= (modulo beat 20) 17) 110 | (set! *subdiv* (random '(1/8 1)))) 111 | 112 | 113 | (if (= (modulo beat 40) 0) 114 | (set! *metre1* (make-metre '(2 1 2 2 1 2 1 1 2 2 1 1 2) *subdiv*)) 115 | (set! *metre2* (make-metre '( 1 1 1 2 ) *subdiv*)) 116 | (set! *metre3* (make-metre '( 6 6 4 4 ) *subdiv*))) 117 | 118 | (if (= (modulo beat 40) 20) 119 | (set! *metre3* (make-metre '(2 1 2 2 1 2 1 1 2 2 1 1 2) *subdiv*)) 120 | (set! *metre2* (make-metre '( 1 1 1 2 ) *subdiv*)) 121 | (set! *metre1* (make-metre '( 6 6 4 4 ) *subdiv*))) 122 | ; (println *subdiv*) 123 | (callback (*metro* (+ beat 0.5)) 'metre-change (+ beat 1)))) 124 | 125 | (metre-change (*metro* 'get-beat 1) 1) 126 | 127 | -------------------------------------------------------------------------------- /SMHMusicPolygons.xtm: -------------------------------------------------------------------------------- 1 | ;;; Code: 2 | (define glctx (gl:make-ctx ":0.0" #f 0.0 0.0 640.0 480.0)) 3 | 4 | (bind-func initgl 5 | (lambda () 6 | (glMatrixMode GL_PROJECTION) 7 | (glLoadIdentity) 8 | (glOrtho -4. 4. -3. 3. 0.0 10.) 9 | (glMatrixMode GL_MODELVIEW))) 10 | 11 | (initgl) 12 | 13 | ;beat array 14 | (bind-val beat_array |15,double|) 15 | 16 | (bind-func setBeat 17 | (lambda (beat:i64 val:double) 18 | (aset! beat_array beat val))) 19 | 20 | (bind-func getBeat 21 | (lambda (beat:i64) 22 | (aref beat_array beat))) 23 | 24 | (define fade-out 25 | (lambda () 26 | (let ((i:i64 1)) 27 | (dotimes (i 15) 28 | (if (> (getBeat i) 0.0) 29 | (setBeat i (* (getBeat i) 0.99)))) 30 | ) 31 | (callback (+ (now) 500) 'fade-out))) 32 | 33 | (fade-out) 34 | 35 | 36 | ;;animation functions 37 | (bind-func wave 38 | (lambda (wavelength:double amplitude:double) 39 | (* amplitude (cos (/ (i64tod (now)) wavelength))))) 40 | 41 | ;; my circle function 42 | (bind-func circle 43 | (lambda (radius res) 44 | (glBegin GL_TRIANGLE_FAN) 45 | (let ((i:double 0.0)) 46 | (dotimes (i res) 47 | (let ((radians (* (/ i res) 6.283))) 48 | (glVertex2d (* (sin radians) radius) 49 | (* (cos radians) radius)))) 50 | (glEnd)))) 51 | 52 | 53 | (bind-func mandala2 54 | (lambda () 55 | (let ((i:i64 1) (n:double 14.0)) 56 | (dotimes (i 15) 57 | (let ((val:double (aref beat_array i))) 58 | (glColor3d val (* val val) (/ 1.0 (i64tod i))) 59 | ;(glTranslated 0.0 (wave 4000.0 0.01) 0.0) 60 | (glPushMatrix) 61 | (glRotated (wave 160000.0 90.1) 1.0 0.0 1.0) 62 | ;(glTranslated 0.0 (wavcde 4000.0 (* (i64tod i) 0.1)) 0.0) 63 | (glTranslated 0.0 (* (i64tod i) 0.1) (* (i64tod i) -0.1)) 64 | 65 | (glRotated (* (i64tod i) (* 0.001 (i64tod (now)))) 0.0 0.0 1.0) 66 | 67 | (circle (* 0.7 (- 1.0 (/ (i64tod i) n))) (- n (i64tod i))) 68 | (glPopMatrix) 69 | ) 70 | ) 71 | ))) 72 | 73 | 74 | (bind-func my-gl-loop 75 | (lambda () 76 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 77 | (glLoadIdentity) 78 | ;(mandala) 79 | (let ((i:double 1.0)) 80 | (dotimes (i 6.0) 81 | (glPushMatrix) 82 | (glRotated (* i 60.0) 0.0 0.0 1.0) 83 | (glTranslated 0.0 1.5 0.0) 84 | (mandala) 85 | (glPopMatrix) 86 | )) 87 | 88 | ))) 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | ;; standard impromptu callback 97 | (define opengl-test 98 | (lambda () 99 | (my-gl-loop) 100 | (gl:swap-buffers glctx) 101 | (callback (+ (now) 500) 'opengl-test))) 102 | 103 | (opengl-test) 104 | 105 | 106 | ;music 107 | 108 | (define scale (pc:scale 0 'pentatonic)) 109 | 110 | (define *metro* (make-metro 140)) 111 | 112 | (define SHMusic 113 | (lambda (beat mod) 114 | (if (= (modulo beat mod) 0) 115 | (play djembe (+ 10 mod) 150 1)) 116 | 117 | (if (= (modulo beat mod) 1) 118 | (play conga (+ 10 mod) 150 1) 119 | ) 120 | 121 | 122 | 123 | (if (= (modulo beat mod) 0) 124 | (setBeat mod 1.0) 125 | (setBeat mod 0.0) 126 | ) 127 | 128 | 129 | 130 | (callback (*metro* (+ beat (* 0.5 1))) 'SHMusic (+ beat 1) mod))) 131 | 132 | 133 | (SHMusic (*metro* 'get-beat 1) 1) 134 | (SHMusic (*metro* 'get-beat 1) 2) 135 | (SHMusic (*metro* 'get-beat 1) 3) 136 | (SHMusic (*metro* 'get-beat 1) 4) 137 | (SHMusic (*metro* 'get-beat 1) 5) 138 | (SHMusic (*metro* 'get-beat 1) 6) 139 | (SHMusic (*metro* 'get-beat 1) 7) 140 | (SHMusic (*metro* 'get-beat 1) 8) 141 | (SHMusic (*metro* 'get-beat 1) 9) 142 | (SHMusic (*metro* 'get-beat 1) 10) 143 | (SHMusic (*metro* 'get-beat 1) 11) 144 | (SHMusic (*metro* 'get-beat 1) 12) 145 | (SHMusic (*metro* 'get-beat 1) 13) 146 | (SHMusic (*metro* 'get-beat 1) 14) 147 | 148 | 149 | (bind-func rampArray 150 | (lambda (index:i64 value:double) 151 | (setBeat index value) 152 | (let ((vtk 0.0) (seconds 0.3)) 153 | (set-signal! (aref beat_array) vtk seconds)) 154 | )) 155 | -------------------------------------------------------------------------------- /circleOfCircles.xtm: -------------------------------------------------------------------------------- 1 | (define glctx (gl:make-ctx ":0.0" #f 0.0 0.0 1280.0 800.0)) 2 | 3 | (bind-func initgl 4 | (lambda () 5 | (glMatrixMode GL_PROJECTION) 6 | (glLoadIdentity) 7 | (glOrtho -12.8 12.8 -8. 8. -10.0 10.) 8 | (glMatrixMode GL_MODELVIEW))) 9 | 10 | (initgl) 11 | 12 | ;;animation functions 13 | (bind-func wave 14 | (lambda (wavelength:double amplitude:double) 15 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (i64tod (now)) wavelength))))))) 16 | 17 | (bind-func wave 18 | (lambda (wavelength:double amplitude:double) 19 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (+ (i64tod (now)) (* 100.0 counter)) wavelength))))))) 20 | 21 | (bind-func wave 22 | (lambda (wavelength:double amplitude:double) 23 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (* 100.0 counter) wavelength))))))) 24 | 25 | (bind-func wave 26 | (lambda (wavelength:double amplitude:double) 27 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (* 100.0 first_ring) wavelength))))))) 28 | 29 | ;; my circle function 30 | (bind-func circle 31 | (lambda (radius res) 32 | (glBegin GL_TRIANGLE_FAN) 33 | (let ((i:double 0.0)) 34 | (dotimes (i res) 35 | (let ((radians (* (/ i res) 6.283))) 36 | (glVertex2d (* (sin radians) radius) 37 | (* (cos radians) radius)))) 38 | (glEnd)))) 39 | 40 | ;;ring 41 | (bind-func ring 42 | (lambda (size:double n:double trans:double rot:double) 43 | (let ((i:double 1.0)) 44 | (dotimes (i n) 45 | (glPushMatrix) 46 | (glRotated (+ (* i (/ 360.0 n)) rot) 0.0 1.0 (wave (+ 30000.0 (* 0.1 i)) 1.0)) ;(wave (+ 20000.0 (* 0.1 i)) 1.0) 47 | (glTranslated 0.0 (wave (+ 50000.0 (* 2.5 i)) 20.1) (+ trans size (* i (wave 70000.0 1.0)))); 48 | 49 | (glColor3d (wave (+ 20000.0 (* 1.5 i)) 1.0) (wave (+ 90000.0 (* 4.0 i)) 1.0) (wave (+ 50000.0 (* 1.0 i)) 1.0)) 50 | 51 | 52 | (circle size 4.0) 53 | 54 | (glPopMatrix))))) 55 | 56 | 57 | 58 | 59 | (bind-val first_ring double 0.0) 60 | (bind-val second_ring double 0.0) 61 | (bind-val third_ring double 0.0) 62 | (bind-val fourth_ring double 0.0) 63 | (bind-val fifth_ring double 0.0) 64 | 65 | ;;mandala 66 | (bind-func mandala 67 | (lambda (size:double) 68 | (glPushMatrix) 69 | (glScaled size size 1.0) 70 | 71 | ;(circle 2.0 (+ 2.0 (wave 120000.0 5.0))) 72 | (circle 4.0 (+ 2.0 beatNum)) 73 | 74 | ;(ring 0.75 7.0 1.0 first_ring) 75 | 76 | ;(ring 0.5 18.0 2.5 second_ring) 77 | 78 | ;(ring 0.25 45.0 3.5 third_ring) 79 | 80 | ;(ring 0.125 90.0 4.0 fourth_ring) 81 | 82 | ;(ring 0.0625 180.0 4.25 fifth_ring) 83 | 84 | (ring (* first_ring 0.75) 7.0 1.0 0.0) 85 | 86 | (ring (* second_ring 0.5) 18.0 2.5 0.0) 87 | 88 | (ring (* third_ring 0.25) 45.0 3.5 0.0) 89 | 90 | (ring (* fourth_ring 0.125) 90.0 4.0 0.0) 91 | 92 | (ring 0.0625 180.0 4.25 fifth_ring) 93 | 94 | (glPopMatrix) 95 | 96 | )) 97 | 98 | (bind-func circleOrMandala 99 | (lambda (size:double) 100 | (if (> size 0.75) (mandala size) (circle size 22.0)))) 101 | 102 | (bind-func mandala_ring 103 | (lambda (size:double n:double trans:double rot:double) 104 | (let ((i:double 1.0)) 105 | (dotimes (i n) 106 | (glPushMatrix) 107 | (glRotated (+ (* i (/ 360.0 n)) rot) 0.0 0.0 1.0) 108 | (glTranslated 0.0 (+ trans size) 0.0) 109 | 110 | ;(glColor3d (wave (+ 20000.0 (* 1.5 i)) 1.0) (wave (+ 90000.0 (* 4.0 i)) 1.0) (wave (+ 50000.0 (* 1.0 i)) 1.0)) 111 | ;(glScaled size size 1.0) 112 | ;(mandala2) 113 | (mandala size) 114 | 115 | (glPopMatrix))))) 116 | 117 | 118 | 119 | 120 | (wave 1000000 1.0) 121 | 122 | 123 | 124 | 125 | 126 | (bind-func my-gl-loop 127 | (lambda () 128 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 129 | (glLoadIdentity) 130 | (inc_counter) 131 | (dec_counter) 132 | (glPushMatrix) 133 | ;(let ((scale (- 0.5 (wave 100000.0 0.25)))) 134 | (glScaled 0.5 0.5 1.0) 135 | (mandala 1.0) 136 | (mandala_ring 0.75 7.0 7.0 first_ring) 137 | (mandala_ring 0.5 19.0 13.0 second_ring) 138 | (mandala_ring 0.25 44.0 16.5 third_ring) 139 | (mandala_ring 0.125 90.0 18.25 fourth_ring) 140 | (ring 0.0625 180.0 19.25 fourth_ring) 141 | (glPopMatrix) 142 | 143 | )) 144 | 145 | ;(glTranslated 1.0 0.0 0.0) 146 | ;(glScaled 1.0 1.0 1.5) 147 | 148 | 149 | ;; standard impromptu callback 150 | (define opengl-test 151 | (lambda () 152 | (my-gl-loop) 153 | (gl:swap-buffers glctx) 154 | (callback (+ (now) 500) 'opengl-test))) 155 | 156 | (opengl-test) 157 | -------------------------------------------------------------------------------- /LCADw4Rhythm: -------------------------------------------------------------------------------- 1 | ;;;;; drums 2 | ;; define me first! 3 | 4 | (define *metro* (make-metro 120)) 5 | (define *metre1* (make-metre '( 3 2 ) 0.25)) 6 | (define *metre2* (make-metre '( 4 3 ) 0.25)) 7 | 8 | (define *kickVel* 0.0) 9 | (let ((vtk 0) (seconds 15)) 10 | (set-signal! *kickVel* vtk seconds)) 11 | 12 | (define *hhVel* 0.0) 13 | (let ((vtk 60) (seconds 15)) 14 | (set-signal! *hhVel* vtk seconds)) 15 | 16 | (define *rideVel* 80.0) 17 | (let ((vtk 120) (seconds 15)) 18 | (set-signal! *rideVel* vtk seconds)) 19 | 20 | (define kick 21 | (lambda (beat dur) 22 | (if (*metre1* beat 1.0) 23 | (play edrums 18 160 dur)) 24 | 25 | ; (if (= (modulo beat 8) 0) 26 | ; (play edrums 10 140 dur)) 27 | (callback (*metro* (+ beat (* .5 dur))) 'kick (+ beat dur) dur) 28 | )) 29 | 30 | (kick (*metro* 'get-beat 1) 1/2) 31 | 32 | 33 | 34 | (define snare 35 | (lambda (beat dur) 36 | (if (*metre1* beat 3.0) 37 | (play edrums (random '(46)) 120 1/4)) 38 | (callback (*metro* (+ beat (* .5 dur))) 'snare (+ beat dur) dur) 39 | )) 40 | 41 | (snare (*metro* 'get-beat 1) 1/2) 42 | 43 | (define snare2 44 | (lambda (beat dur) 45 | (if (*metre2* beat 3.0) 46 | (play edrums (random '(40 41)) 120 1/4)) 47 | (callback (*metro* (+ beat (* .5 dur))) 'snare2 (+ beat dur) dur) 48 | )) 49 | 50 | (snare2 (*metro* 'get-beat 1) 1/2) 51 | 52 | (define snare2 53 | (lambda (beat dur) 54 | (if (and (> (modulo beat 4) 1/2) (< (modulo beat 4) 5/2) (= (modulo beat 1/2) 1/4)) 55 | (play edrums (random '(41 43 44)) (wave 60 80 5/4) 1)) 56 | (callback (*metro* (+ beat (* .5 dur))) 'snare2 (+ beat dur) 1/4) 57 | )) 58 | 59 | (snare2 (*metro* 'get-beat 1) 1/8) 60 | 61 | (define hihats 62 | (lambda (beat dur) 63 | (if (*metre1* beat 2.0) 64 | (play djembe (rampr 20 4 1/2) 120 dur)) 65 | (callback (*metro* (+ beat (* .5 dur))) 'hihats (+ beat dur) dur) 66 | )) 67 | 68 | (hihats (*metro* 'get-beat 1) 1/2) 69 | 70 | (define hihats2 71 | (lambda (beat dur) 72 | (if (*metre2* beat 2.0) 73 | (play conga (rampr 12 4 1/2) (cosr 100 20 3/2) dur)) 74 | (callback (*metro* (+ beat (* .5 dur))) 'hihats2 (+ beat dur) dur) 75 | )) 76 | 77 | (hihats2 (*metro* 'get-beat 1) 1/4) 78 | 79 | 80 | (define ride 81 | (lambda (beat dur) 82 | (if (> (random) 0.5) 83 | (play drums (rampr 10 5 (random '(1/4 1/7 1/2))) (random '(80 100)) (random '(1/4 1/6))) 84 | (play edrums (cosr 8 7 (random '(1/4 1/2 1/3))) (random '(80 100)) 1/4)) 85 | (callback (*metro* (+ beat (* .5 dur))) 'ride (+ beat dur) dur) 86 | )) 87 | 88 | (ride (*metro* 'get-beat 1) 1/4) 89 | (hihats (*metro* 'get-beat 1) 1/8) 90 | 91 | (define hihats2 92 | (lambda (beat dur) 93 | (play edrums (random 21 21 22 23) (cosr 100 20 1) dur) 94 | (callback (*metro* (+ beat (* .5 dur))) 'hihats2 (+ beat dur) dur) 95 | )) 96 | 97 | (hihats2 (*metro* 'get-beat 1) 1/4) 98 | 99 | 100 | 101 | (define toms 102 | (lambda (beat dur) 103 | (if (= (modulo beat 1) 0) 104 | (set! dur (random '(4/5 1/5)))) 105 | (play drums (random '(11 16)) (random '(0 0 0 50 0)) dur) 106 | (callback (*metro* (+ beat (* .5 dur))) 'toms (+ beat dur) dur) 107 | )) 108 | 109 | 110 | (toms (*metro* 'get-beat 1) 1) 111 | 112 | 113 | ;;percussion 114 | 115 | 116 | 117 | (define perc1 118 | (lambda (beat dur) 119 | (if (< (modulo beat 10) 9) 120 | (play djembe (wave 12 17 5/2) (random '(0 0 100)) dur)) 121 | (callback (*metro* (+ beat (* .5 dur))) 'perc1 (+ beat dur) dur) 122 | )) 123 | 124 | 125 | (perc1 (*metro* 'get-beat 1) 1/2) 126 | 127 | 128 | 129 | (define perc2 130 | (lambda (beat dur) 131 | (if (or (= (modulo beat 5/2) 0) (= (modulo beat 2) 1) (= (modulo beat 3/2) 1/2)) 132 | (play djembe (random '(12 13 14 15)) (wave 60 100 (random '(3/4 5/2)) dur))) 133 | (callback (*metro* (+ beat (* .5 dur))) 'perc2 (+ beat dur) dur) 134 | )) 135 | 136 | 137 | (perc2 (*metro* 'get-beat 1) 1/2) 138 | 139 | (define bells 140 | (lambda (beat dur) 141 | (play drums (if (< (modulo beat 5) 2) 37 36) 50 dur) 142 | (callback (*metro* (+ beat (* .5 dur))) 'bells (+ beat dur) dur) 143 | )) 144 | 145 | 146 | (bells (*metro* 'get-beat 1) 1) 147 | 148 | (define guimbard 149 | (lambda (beat dur) 150 | (if (or (= (modulo beat 7) 0) (= (modulo beat 4) 1/2) (= (modulo beat 16) 7/4)) 151 | (play jawharp (random 10 17) (wave 70 90 2) dur)) 152 | ;(play jawharp (random 20) (wave 0 90 3) dur)) 153 | (callback (*metro* (+ beat (* .5 dur))) 'guimbard (+ beat dur) dur) 154 | )) 155 | 156 | 157 | (guimbard (*metro* 'get-beat 1) 1/4) -------------------------------------------------------------------------------- /LCADweek2.xtm.scm: -------------------------------------------------------------------------------- 1 | ;;;week2 2 | 3 | (define scale (pc:scale 7 'ionian)) 4 | 5 | (define wave 6 | (lambda (min max wavelength) 7 | (let ((freq (/ 1 wavelength)) (range (- max min))) 8 | (let ((cosNorm (+ 0.5 (* 0.5 (cos (* (now) freq)))))) 9 | (+ min (* cosNorm range)) 10 | )))) 11 | 12 | (define root 0) 13 | (define pcr 14 | (lambda () 15 | (pc:relative 48 root scale))) 16 | 17 | ;;;;;;;;; harmony 18 | 19 | (define key-change 20 | (lambda (beat) 21 | (if (= (modulo beat 16) 0) 22 | (set! scale (pc:scale 0 'lydian))) 23 | 24 | (if (= (modulo beat 16) 8) 25 | (set! scale (pc:scale 0 'wholetone))) 26 | 27 | (callback (*metro* (+ beat (* .5 1))) 'key-change (+ beat 1)) 28 | )) 29 | 30 | (key-change (*metro* 'get-beat 1) 1) 31 | 32 | (define chords 33 | (lambda (beat dur) 34 | 35 | (if (= (modulo beat 4) 0) 36 | (set! root (random (cdr (assoc root '((0 2) (2 4) (4 6) (6 0)) ))))) 37 | 38 | (if (= (modulo beat 4) 0) 39 | (for-each (lambda (p) 40 | (play fmsynth p 12 4)) 41 | (pc:make-chord (pcr) (+ (pcr) 24) 4 scale))) 42 | 43 | (callback (*metro* (+ beat (* .5 dur))) 'chords (+ beat dur) dur) 44 | )) 45 | 46 | (chords (*metro* 'get-beat 1) 1) 47 | 48 | (define bassline 49 | (lambda (beat dur) 50 | (if (or (= (modulo beat 8) 0) (= (modulo beat 8) 3/4) (= (modulo beat 8) 6/4)) 51 | (play fuzzbass (pc:relative ( - (pcr) 24) (/ (modulo beat 8) 1/4) scale) 5 dur)) 52 | 53 | (if (= (modulo beat 8) 4) 54 | (play fuzzbass ( - (pcr) 24) 5 4)) 55 | (callback (*metro* (+ beat (* .5 dur))) 'bassline (+ beat dur) dur) 56 | )) 57 | 58 | (bassline (*metro* 'get-beat 1) 1/4) 59 | 60 | (define melody 61 | (lambda (beat dur octave) 62 | (if (< (modulo beat 4) 2) 63 | (play piano 64 | (pc:relative (+ (pcr) (* octave 12)) (* (random '(-1 1 3/2 2)) (modulo (/ (modulo beat 8) dur) 4)) scale) 65 | (random '(0 120)) (random '(1/4 1 1/2)))) 66 | (callback (*metro* (+ beat (* .6 dur))) 'melody (+ beat dur) dur octave ) 67 | )) 68 | 69 | (melody (*metro* 'get-beat 1) 1/8 1) 70 | 71 | 72 | ;;;;; drums 73 | 74 | 75 | 76 | (define kick 77 | (lambda (beat dur) 78 | (if (or (= (modulo beat 2) 0) (= (modulo beat (random 1 3)) 3/8) (= (modulo beat (random 2 7)) 6/8)) 79 | (play drums 10 (random 90 110) dur)) 80 | ;(callback (*metro* (+ beat (* .5 dur))) 'kick (+ beat dur) dur) 81 | )) 82 | 83 | 84 | (kick (*metro* 'get-beat 1) 1/8) 85 | 86 | (define snare 87 | (lambda (beat dur) 88 | (if (= (modulo beat 1) 1/8) 89 | (play drums (random '(36 46)) 120 1)) 90 | ;(callback (*metro* (+ beat (* .5 dur))) 'snare (+ beat dur) dur) 91 | )) 92 | 93 | (snare (*metro* 'get-beat 1) 1/8) 94 | 95 | (define hihats 96 | (lambda (beat dur) 97 | (play drums (random '(24)) (wave 60 80 3/2) dur) 98 | ;(callback (*metro* (+ beat (* .5 dur))) 'hihats (+ beat dur) dur) 99 | )) 100 | 101 | (hihats (*metro* 'get-beat 1) 1/4) 102 | 103 | (define ride 104 | (lambda (beat dur) 105 | (play drums (random '(30 30 30 31)) (random '(0 50 70)) 2) 106 | ;(callback (*metro* (+ beat (* .5 dur))) 'ride (+ beat dur) dur) 107 | )) 108 | 109 | (ride (*metro* 'get-beat 1) 1/4) 110 | 111 | (define toms 112 | (lambda (beat dur) 113 | (if (< (modulo beat (random 5)) 4) 114 | (play drums (wave 12 16 1) (wave 0 80 5/6) 1)) 115 | ;(callback (*metro* (+ beat (* .5 dur))) 'toms (+ beat dur) dur) 116 | )) 117 | 118 | 119 | (toms (*metro* 'get-beat 1) 1/6) 120 | 121 | 122 | ;;percussion 123 | 124 | (define perc1 125 | (lambda (beat dur) 126 | (if (< (modulo beat 7) 3) 127 | (play conga (random 12 20) (random '(0 80 100)) dur)) 128 | ;(callback (*metro* (+ beat (* .5 dur))) 'perc1 (+ beat dur) dur) 129 | )) 130 | 131 | 132 | (perc1 (*metro* 'get-beat 1) 1/4) 133 | 134 | 135 | 136 | (define perc2 137 | (lambda (beat dur) 138 | (if (or (= (modulo beat 1) 0) (= (modulo beat 2) 1) (= (modulo beat 3) 2)) 139 | (play drums (random '(12 13 14 15 16 17)) 60 dur)) 140 | (callback (*metro* (+ beat (* .5 dur))) 'perc2 (+ beat dur) dur) 141 | )) 142 | 143 | 144 | (perc2 (*metro* 'get-beat 1) 1) 145 | 146 | (define bells 147 | (lambda (beat dur) 148 | ; (play drums (if (< (modulo beat 3) 2) 36 41) 80 dur) 149 | (callback (*metro* (+ beat (* .5 dur))) 'bells (+ beat dur) dur) 150 | )) 151 | 152 | 153 | (bells (*metro* 'get-beat 1) 1) 154 | 155 | (define guimbard 156 | (lambda (beat dur) 157 | (if (or (= (modulo beat 8) 0) (= (modulo beat 4) 1/2) (= (modulo beat 16) 7/4)) 158 | ;(play jawharp (random 10 17) (wave 70 90 2) dur) 159 | (play jawharp (random 17 21) (wave 70 90 3) dur)) 160 | ; (callback (*metro* (+ beat (* .5 dur))) 'guimbard (+ beat dur) dur) 161 | )) 162 | 163 | 164 | (guimbard (*metro* 'get-beat 1) 1/4) 165 | 166 | 167 | (scale) 168 | 169 | 170 | -------------------------------------------------------------------------------- /multimorph.xtm: -------------------------------------------------------------------------------- 1 | (define glctx (gl:make-ctx ":0.0" #f 0.0 0.0 1280.0 800.0)) 2 | 3 | (bind-func initgl 4 | (lambda () 5 | (glMatrixMode GL_PROJECTION) 6 | (glLoadIdentity) 7 | (glOrtho -12.8 12.8 -8.0 8.0 -10.0 10.0) 8 | (glMatrixMode GL_MODELVIEW))) 9 | 10 | (initgl) 11 | 12 | (bind-func u1 13 | (lambda (j:double n:double) 14 | (* j (/ (/ TWOPI n) 2.0)))) 15 | 16 | 17 | (bind-func v1 18 | (lambda (i:double n:double) 19 | (* i (/ PI n)))) 20 | 21 | (bind-func x1 22 | (lambda (u:double v:double) 23 | (cos (* 4.0 u)))) 24 | 25 | (bind-func y1 26 | (lambda (u:double v:double) 27 | (sin u)))) 28 | 29 | (bind-func z1 30 | (lambda (u:double v:double) 31 | v)) 32 | 33 | 34 | 35 | (bind-func u2 36 | (lambda (j:double n:double) 37 | (* j (/ TWOPI n)))) 38 | 39 | (bind-func v2 40 | (lambda (i:double n:double) 41 | (* i (/ PI n)))) 42 | 43 | (bind-func x2 44 | (lambda (u:double v:double) 45 | (* (sin v) (cos u)))) 46 | 47 | (bind-func y2 48 | (lambda (u:double v:double) 49 | (sin (* u 2.0)))) 50 | 51 | (bind-func z2 52 | (lambda (u:double v:double) 53 | v)) 54 | 55 | 56 | (bind-func u3 57 | (lambda (j:double n:double) 58 | (* j (/ TWOPI n)))) 59 | 60 | (bind-func v3 61 | (lambda (i:double n:double) 62 | (* i (/ PI n)))) 63 | 64 | (bind-func x3 65 | (lambda (u:double v:double) 66 | (* (sin v) (cos u)))) 67 | 68 | (bind-func y3 69 | (lambda (u:double v:double) 70 | (* (sin v) (sin (* 2.0 u))))) 71 | 72 | (bind-func z3 73 | (lambda (u:double v:double) 74 | v)) 75 | 76 | 77 | 78 | (bind-func u4 79 | (lambda (j:double n:double) 80 | (* j (/ TWOPI n)))) 81 | 82 | (bind-func v4 83 | (lambda (i:double n:double) 84 | (* i (/ PI n)))) 85 | 86 | (bind-func x4 87 | (lambda (u:double v:double) 88 | (* (sin (* v 2.0)) (cos (* 1.0 u))))) 89 | 90 | (bind-func y4 91 | (lambda (u:double v:double) 92 | (* 2.0 (* (sin v) (sin u))))) 93 | 94 | (bind-func z4 95 | (lambda (u:double v:double) 96 | (+ 0.0 (* 2.0 (cos (* 6.8 v)))))) 97 | 98 | 99 | (bind-func cylinder-sphere 100 | (lambda (morph-rate:double) 101 | 102 | (let ((i:double 0.0) (j:double 0.0) 103 | (n:double 25.0) 104 | (u 0.0) (v 0.0) (x 0.0) (y 0.0) (z 0.0) 105 | (morph (* 3.0 (+ 0.5 (* 0.5 (sin (/ (i64tod (now)) morph-rate)))))) 106 | (morph2 (- morph 1.0)) 107 | (morph3 (- morph 2.0))) 108 | (dotimes (i (+ n 1.0)) 109 | (glColor3d (/ i n) (/ morph 4.0) (* ) 110 | (glBegin GL_TRIANGLE_FAN) 111 | (dotimes (j (+ n 1.0)) 112 | (cond ((< morph 1.0) 113 | (set! u (+ (* (u2 j n) morph) (* (- 1.0 morph) (u1 j n)))) 114 | (set! v (+ (* (v2 i n) morph) (* (- 1.0 morph) (v1 i n)))) 115 | (set! x (+ (* (x2 u v) morph) (* (- 1.0 morph) (x1 u v)))) 116 | (set! y (+ (* (y2 u v) morph) (* (- 1.0 morph) (y1 u v)))) 117 | (set! z (+ (* (z2 u v) morph) (* (- 1.0 morph) (z1 u v))))) 118 | ((and (>= morph 1.0) (< morph 2.0)) 119 | (set! u (+ (* (u3 j n) morph2) (* (- 1.0 morph2) (u2 j n)))) 120 | (set! v (+ (* (v3 i n) morph2) (* (- 1.0 morph2) (v2 i n)))) 121 | (set! x (+ (* (x3 u v) morph2) (* (- 1.0 morph2) (x2 u v)))) 122 | (set! y (+ (* (y3 u v) morph2) (* (- 1.0 morph2) (y2 u v)))) 123 | (set! z (+ (* (z3 u v) morph2) (* (- 1.0 morph2) (z2 u v))))) 124 | ((and (>= morph 2.0) (< morph 3.0)) 125 | (set! u (+ (* (u4 j n) morph3) (* (- 1.0 morph3) (u3 j n)))) 126 | (set! v (+ (* (v4 i n) morph3) (* (- 1.0 morph3) (v3 i n)))) 127 | (set! x (+ (* (x4 u v) morph3) (* (- 1.0 morph3) (x3 u v)))) 128 | (set! y (+ (* (y4 u v) morph3) (* (- 1.0 morph3) (y3 u v)))) 129 | (set! z (+ (* (z4 u v) morph3) (* (- 1.0 morph3) (z3 u v))))) 130 | 131 | ) 132 | 133 | (glVertex3d x y z)) 134 | (glEnd) 135 | )) 136 | )) 137 | 138 | ;;(glColor3d (/ i n) 0.3 0.2) 139 | ;;(glVertex3d x y z) 140 | 141 | 142 | (bind-func my-gl-loop 143 | (lambda () 144 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 145 | (glLoadIdentity) 146 | ;(glRotated (i64tod (modulo (/ (now) 1000) 360)) 0.5 0.1 0.3) 147 | 148 | (let ((i:double 0.0) (n:double 5.0)) 149 | (dotimes (i n) 150 | (glPushMatrix) 151 | (glTranslated (- (* 5.0 i) 10.0) -1.0 1.0) 152 | (glScaled 2.5 2.5 2.5) 153 | (glRotated 260.0 1.0 0.0 0.0) 154 | (cylinder-sphere (+ (* i (wave 100.0 500.0 4.0)) 100000.0)) 155 | (glPopMatrix))) 156 | )) 157 | 158 | 159 | 160 | 161 | 162 | ;; standard impromptu callback 163 | (define opengl-test 164 | (lambda () 165 | (my-gl-loop) 166 | (gl:swap-buffers glctx) 167 | (callback (+ (now) 500) 'opengl-test))) 168 | 169 | (opengl-test) -------------------------------------------------------------------------------- /morphandala.xtm: -------------------------------------------------------------------------------- 1 | (define glctx (gl:make-ctx ":0.0" #f 0.0 0.0 1280.0 800.0)) 2 | 3 | (bind-func initgl 4 | (lambda () 5 | (glMatrixMode GL_PROJECTION) 6 | (glLoadIdentity) 7 | (glOrtho -12.8 12.8 -8. 8. -10.0 10.) 8 | (glMatrixMode GL_MODELVIEW))) 9 | 10 | (initgl) 11 | 12 | ;;animation functions 13 | (bind-func wave 14 | (lambda (wavelength:double amplitude:double) 15 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (i64tod (now)) wavelength))))))) 16 | 17 | (bind-func wave 18 | (lambda (wavelength:double amplitude:double) 19 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (+ (i64tod (now)) (* 100.0 counter)) wavelength))))))) 20 | 21 | (bind-func wave 22 | (lambda (wavelength:double amplitude:double) 23 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (* 100.0 counter) wavelength))))))) 24 | 25 | (bind-func wave 26 | (lambda (wavelength:double amplitude:double) 27 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (* 100.0 first_ring) wavelength))))))) 28 | 29 | ;; my circle function 30 | (bind-func circle 31 | (lambda (radius res) 32 | (glBegin GL_TRIANGLE_FAN) 33 | (let ((i:double 0.0)) 34 | (dotimes (i res) 35 | (let ((radians (* (/ i res) 6.283))) 36 | (glVertex2d (* (sin radians) radius) 37 | (* (cos radians) radius)))) 38 | (glEnd)))) 39 | 40 | ;;ring 41 | (bind-func ring 42 | (lambda (size:double n:double trans:double rot:double) 43 | (let ((i:double 1.0)) 44 | (dotimes (i n) 45 | (glPushMatrix) 46 | (glRotated (+ (* i (/ 360.0 n)) rot) 0.0 0.0 1.0) ;(wave (+ 20000.0 (* 0.1 i)) 1.0) 47 | (glTranslated 0.0 (+ trans size) 0.0); 48 | 49 | (glColor3d (wave (+ 20000.0 (* 1.5 i)) 1.0) (wave (+ 90000.0 (* 4.0 i)) 1.0) (wave (+ 50000.0 (* 1.0 i)) 1.0)) 50 | 51 | (glScaled size size size) 52 | (cylinder-sphere (+ (* i 10.0) 100000.0)) 53 | ;(circle size 22.0) 54 | 55 | (glPopMatrix))))) 56 | 57 | 58 | 59 | 60 | (bind-val first_ring double 0.0) 61 | (bind-val second_ring double 0.0) 62 | (bind-val third_ring double 0.0) 63 | (bind-val fourth_ring double 0.0) 64 | (bind-val fifth_ring double 0.0) 65 | 66 | ;;mandala 67 | (bind-func mandala 68 | (lambda (size:double) 69 | (glPushMatrix) 70 | (glScaled size size 1.0) 71 | 72 | 73 | ;(circle 1.0 22.0) 74 | (cylinder-sphere 100000.0) 75 | 76 | ;(ring 0.75 7.0 1.0 first_ring) 77 | 78 | ;(ring 0.5 18.0 2.5 second_ring) 79 | 80 | ;(ring 0.25 45.0 3.5 third_ring) 81 | 82 | ;(ring 0.125 90.0 4.0 fourth_ring) 83 | 84 | ;(ring 0.0625 180.0 4.25 fifth_ring) 85 | 86 | (ring 0.75 7.0 1.0 0.0) 87 | 88 | (ring 0.5 18.0 2.5 0.0) 89 | 90 | (ring 0.25 45.0 3.5 0.0) 91 | 92 | ;(ring 0.125 90.0 4.0 0.0) 93 | 94 | ;(ring 0.0625 180.0 4.25 fifth_ring) 95 | 96 | (glPopMatrix) 97 | 98 | )) 99 | 100 | (bind-func circleOrMandala 101 | (lambda (size:double) 102 | (if (> size 0.75) (mandala size) (circle size 22.0)))) 103 | 104 | (bind-func mandala_ring 105 | (lambda (size:double n:double trans:double rot:double) 106 | (let ((i:double 1.0)) 107 | (dotimes (i n) 108 | (glPushMatrix) 109 | (glRotated (+ (* i (/ 360.0 n)) rot) 0.0 0.0 1.0) 110 | (glTranslated 0.0 (+ trans size) 0.0) 111 | 112 | ;(glColor3d (wave (+ 20000.0 (* 1.5 i)) 1.0) (wave (+ 90000.0 (* 4.0 i)) 1.0) (wave (+ 50000.0 (* 1.0 i)) 1.0)) 113 | ;(glScaled size size 1.0) 114 | ;(mandala2) 115 | (mandala size) 116 | 117 | (glPopMatrix))))) 118 | 119 | 120 | 121 | 122 | (wave 1000000 1.0) 123 | 124 | 125 | 126 | 127 | 128 | (bind-func my-gl-loop 129 | (lambda () 130 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 131 | (glLoadIdentity) 132 | (inc_counter) 133 | (dec_counter) 134 | (glPushMatrix) 135 | ;(let ((scale (- 0.5 (wave 100000.0 0.25)))) 136 | (glScaled 0.5 0.5 1.0) 137 | (mandala 1.0) 138 | (mandala_ring 0.75 7.0 7.0 first_ring) 139 | (mandala_ring 0.5 19.0 13.0 second_ring) 140 | (mandala_ring 0.25 44.0 16.5 third_ring) 141 | (mandala_ring 0.125 90.0 18.25 fourth_ring) 142 | (ring 0.0625 180.0 19.25 fourth_ring) 143 | (glPopMatrix) 144 | 145 | )) 146 | 147 | (bind-func my-gl-loop 148 | (lambda () 149 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 150 | (glLoadIdentity) 151 | (glEnable GL_DEPTH_TEST) 152 | 153 | (glPushMatrix) 154 | (glRotated 315.0 1.0 0.0 0.0) 155 | (glRotated (/ (i64tod (now)) 10000.0) 0.0 0.0 1.0) 156 | 157 | ;(glRotated (/ (i64tod (now)) 10000.0) 1.0 0.0 0.0) 158 | ;(glRotated (/ (i64tod (now)) 10000.0) 0.0 1.0 0.0) 159 | 160 | (mandala 2.0) 161 | 162 | (glPopMatrix) 163 | 164 | )) 165 | 166 | ;(glTranslated 1.0 0.0 0.0) 167 | ;(glScaled 1.0 1.0 1.5) 168 | 169 | 170 | ;; standard impromptu callback 171 | (define opengl-test 172 | (lambda () 173 | (my-gl-loop) 174 | (gl:swap-buffers glctx) 175 | (callback (+ (now) 500) 'opengl-test))) 176 | 177 | (opengl-test) 178 | -------------------------------------------------------------------------------- /LCADweek1.xtm.scm: -------------------------------------------------------------------------------- 1 | ;hey whats up? my name is JASON. I'm trying something NEW tonight. soooooooooo. ON WITH IT 2 | 3 | (define scale (pc:scale 0 'dorian)) 4 | 5 | (define wave 6 | (lambda (min max wavelength) 7 | (let ((freq (/ 1 wavelength)) (range (- max min))) 8 | (let ((cosNorm (+ 0.5 (* 0.5 (cos (* (now) freq)))))) 9 | (+ min (* cosNorm range)) 10 | )))) 11 | 12 | (define root 60) 13 | 14 | 15 | (define kick 16 | (lambda (beat dur) 17 | (if (or (= (modulo beat 4) 0) (= (modulo beat 4) 3/4) (= (modulo beat 4) 6/4)) 18 | (play drums 10 130 dur)) 19 | (callback (*metro* (+ beat (* .5 dur))) 'kick (+ beat dur) dur) 20 | )) 21 | 22 | 23 | (kick (*metro* 'get-beat 1) 1) 24 | 25 | (define perc1 26 | (lambda (beat dur) 27 | (if (> (modulo beat 8) 3) 28 | (play conga (wave 10 17 5/2) (wave 20 130 5/4) dur)) 29 | (callback (*metro* (+ beat (* .5 dur))) 'perc1 (+ beat dur) dur) 30 | )) 31 | 32 | 33 | (perc1 (*metro* 'get-beat 1) 1/3) 34 | 35 | (define toms 36 | (lambda (beat dur) 37 | (if (< (modulo beat 8) 7) 38 | (play drums (wave 12 16 4) (wave 50 80 5/4) dur)) 39 | (callback (*metro* (+ beat (* .5 dur))) 'toms (+ beat dur) dur) 40 | )) 41 | 42 | 43 | (toms (*metro* 'get-beat 1) 1/3) 44 | 45 | 46 | (define perc2 47 | (lambda (beat dur) 48 | (if (or (= (modulo beat 1) 0) (= (modulo beat 2) 1) (= (modulo beat 3) 2)) 49 | (play drums (random '(12 13 14 15 16 17)) 60 dur)) 50 | (callback (*metro* (+ beat (* .5 dur))) 'perc2 (+ beat dur) dur) 51 | )) 52 | 53 | 54 | (perc2 (*metro* 'get-beat 1) 1) 55 | 56 | (define guimbard 57 | (lambda (beat dur) 58 | (if (or (= (modulo beat 6) 0) (= (modulo beat 6/2) 1/2) (= (modulo beat 6/2) 7/4)) 59 | (play jawharp (random 10 17) (wave 70 90 2) dur) 60 | (play jawharp (random 17 21) (wave 70 90 3) dur)) 61 | (callback (*metro* (+ beat (* .5 dur))) 'guimbard (+ beat dur) dur) 62 | )) 63 | 64 | 65 | (guimbard (*metro* 'get-beat 1) 1/4) 66 | 67 | 68 | (define guimbard2 69 | (lambda (beat dur) 70 | (play jawharp (wave 20 22 5) (wave 0 80 3) dur) 71 | ; (callback (*metro* (+ beat (* .5 dur))) 'guimbard2 (+ beat dur) dur) 72 | )) 73 | 74 | 75 | (guimbard2 (*metro* 'get-beat 1) 1/4) 76 | 77 | (define bells 78 | (lambda (beat dur) 79 | (play drums (if (< (modulo beat 8) 2) 40 36) (wave 70 90 4/5) dur) 80 | (callback (*metro* (+ beat (* .5 dur))) 'bells (+ beat dur) dur) 81 | )) 82 | 83 | 84 | (bells (*metro* 'get-beat 1) 1) 85 | 86 | 87 | (define snare 88 | (lambda (beat dur) 89 | (if (= (modulo beat 4) 2) 90 | (play drums (random '( 43 )) 120 dur)) 91 | (callback (*metro* (+ beat (* .5 dur))) 'snare (+ beat dur) dur) 92 | )) 93 | 94 | (snare (*metro* 'get-beat 1) 1) 95 | 96 | (define hihats 97 | (lambda (beat dur) 98 | (play drums 25 (wave 30 60 (/ dur 4)) dur) 99 | (callback (*metro* (+ beat (* .5 dur))) 'hihats (+ beat dur) dur) 100 | )) 101 | 102 | (hihats (*metro* 'get-beat 1) 1/2) 103 | 104 | (define snareRolls 105 | (lambda (beat dur) 106 | (play drums (random '(37 38 39)) (wave 80 120 8/3) dur) 107 | ; (callback (*metro* (+ beat (* .5 dur))) 'snareRolls (+ beat dur) 1/2) 108 | )) 109 | 110 | (snareRolls (*metro* 'get-beat 1) 1/4) 111 | (hihats (*metro* 'get-beat 1) 1) 112 | 113 | 114 | (define melody 115 | (lambda (beat dur octave) 116 | (play fmsynth (pc:relative (+ root (* (- octave 4) 12)) (+ (wave 0 12 8) (wave 0 3 2)) scale) (wave 5 40 4/4) dur) 117 | ;(play piano (pc:relative (* octave 12) (wave 0 12 octave) scale) (wave 90 125 3) dur) 118 | (callback (*metro* (+ beat (* .6 dur))) 'melody (+ beat (+ 0.5 dur)) dur octave ) 119 | )) 120 | 121 | (melody (*metro* 'get-beat 1) 1/8 6) 122 | 123 | 124 | (define bassline 125 | (lambda (beat dur) 126 | (play fuzzbass (+ root (random '(-24 -24 -17))) 5 dur) 127 | (callback (*metro* (+ beat (* .5 dur))) 'bassline (+ beat dur) (random '(2 1 1/2))) 128 | )) 129 | 130 | (bassline (*metro* 'get-beat 1) 1) 131 | 132 | (define harmony 133 | (lambda (beat dur octave) 134 | ;(play piano (pc:relative (+ (* octave 12)) (wave 0 7 7) scale) (wave 0 170 1) (* 2 dur)) 135 | ;(play piano (pc:relative (+ (* octave 12)) (wave 2 9 6) scale) (wave 0 150 2) dur) 136 | ;(play piano (pc:relative (+ (* octave 12)) (wave 4 11 5) scale) (wave 0 150 3) dur) 137 | ;(play piano (pc:relative (+ (* octave 12)) (wave 6 13 4) scale) (wave 0 150 4) dur) 138 | ;(play piano (pc:relative (+ (* octave 12)) (wave 8 15 3) scale) (wave 0 150 5) dur) 139 | ;(callback (*metro* (+ beat (* .5 dur))) 'harmony (+ beat dur) dur octave ) 140 | )) 141 | 142 | (harmony (*metro* 'get-beat 1) 1/4 5) 143 | 144 | 145 | (define chords 146 | (lambda (beat dur) 147 | (set! root (random (cdr (assoc root '((60 58) 148 | (58 67) 149 | (67 63 62) 150 | (63 60 69) 151 | (62 60 67) 152 | (69 67 60)))))) 153 | (for-each (lambda (p) 154 | (play piano p 140 dur)) 155 | (pc:make-chord root (+ root 12) 3 scale)) 156 | (callback (*metro* (+ beat (* .5 dur))) 'chords (+ beat dur) dur) 157 | )) 158 | 159 | (chords (*metro* 'get-beat 1) 2) 160 | 161 | (snare (*metro* 'get-beat 1) ) 162 | (kick 35 1) 163 | 164 | (kick (*metro* 'get-beat 1) 1/4) 165 | (snare (*metro* 'get-beat 1) 1) 166 | 167 | 168 | 169 | 170 | (wave 1 10 1) 171 | -------------------------------------------------------------------------------- /dspGraphics.xtm: -------------------------------------------------------------------------------- 1 | ; 2 | (bind-val SPI SAMPLE 3.1415926535897932384626433832795028841971693993751058209749) 3 | (bind-val STWOPI SAMPLE 6.2831853071795864769252867665590057683943387987502116419498) 4 | (bind-val SE SAMPLE 2.7182818284590452353602874713526624977572470936999595749669) 5 | 6 | (bind-val SR SAMPLE (integer->real *au:samplerate*)) 7 | (bind-val CHANNELS i64 *au:channels*) 8 | (bind-val IN_CHANNELS i64 *au:in-channels*) 9 | (bind-val FRAMES i64 *au:block-size*) 10 | 11 | (bind-func osc_c 12 | (lambda (phase) 13 | (lambda (amp freq) 14 | (let ((inc (* STWOPI (/ freq SR)))) 15 | (set! phase (+ phase inc)) 16 | (if (> phase SPI) (set! phase (- phase STWOPI))) 17 | (* amp (sin phase)))))) 18 | 19 | 20 | (bind-val amp_array |30,SAMPLE|*) 21 | 22 | (bind-func dsp:DSP 23 | (let ((osc_array:|30,[SAMPLE,SAMPLE,SAMPLE]*|* (alloc)) 24 | (freq_array:|30,SAMPLE|* (alloc)) 25 | (i 0)) 26 | ; initialise the arrays 27 | (dotimes (i 30) 28 | (aset! osc_array i (osc_c 0.0)) 29 | (aset! amp_array i (* 0.2 (+ 0.5 (* 0.5 (cos (* (i64tof i) (/ (i64tof (now)) 2000000.0))))))) 30 | (aset! freq_array i (* 50.0 (i64tof i)))) 31 | ; this is the dsp closure 32 | (lambda (in time chan data) 33 | (cond ((= chan 0) ; left channel 34 | (let ((suml 0.0)) 35 | (dotimes (i 15) ; sum over the first 15 oscs 36 | (set! suml (+ suml ((aref osc_array i) 37 | (aref amp_array i) 38 | (aref freq_array i))))) 39 | (/ suml 15.0))) ; normalise over all oscs 40 | ((= chan 1) ; left channel 41 | (let ((sumr 0.0)) 42 | (dotimes (i 15 15) ; sum over the first 15 oscs 43 | (set! sumr (+ sumr ((aref osc_array i) 44 | (aref amp_array i) 45 | (aref freq_array i))))) 46 | (/ sumr 15.0))) 47 | (else 0.0))))) ; any remaining channels 48 | 49 | (dsp:set! dsp) 50 | 51 | (bind-val green double 0.0) 52 | (set! green 0.5) 53 | 54 | (bind-val beat_array |8,double|*) 55 | ;;; Code: 56 | (define glctx (gl:make-ctx ":0.0" #f 0.0 0.0 400.0 400.0)) 57 | 58 | ;; my circle function 59 | (bind-func circle 60 | (lambda (radius res) 61 | (glBegin GL_TRIANGLE_FAN) 62 | (let ((i:double 0.0)) 63 | (dotimes (i res) 64 | (let ((radians (* (/ i res) 6.283))) 65 | (glVertex2d (* (sin radians) radius) 66 | (* (cos radians) radius)))) 67 | (glEnd)))) 68 | 69 | ;; a trivial opengl draw loop 70 | (bind-func my-gl-loop 71 | (lambda () 72 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 73 | (glLoadIdentity) 74 | (let ((wavelength:double 100000.0)) 75 | (let ((i:double 1.0) (n:double 20.0)) 76 | (dotimes (i n) 77 | (let ((g:double 78 | (+ 0.5 (* 0.5 (cos (* i (/ (i64tod (now)) wavelength))))))) 79 | (glColor3d (/ 1.0 i) g (- 1.0 (/ 1.0 i))) 80 | ;(glRotated (* 90.0 g) (- 1.0 g) g 1.0) 81 | (circle (* n (/ i n)) i)) 82 | 83 | )) 84 | (let ((i 1)) 85 | (dotimes (i 15) 86 | (aset! amp_array i 87 | (* 0.6 (+ 0.5 (* 0.5 (cos (* (i64tof i) (/ (i64tof (now)) (dtof wavelength)))))))))) 88 | )) 89 | ) 90 | 91 | ;; a trivial opengl draw loop 92 | (bind-func my-gl-loop 93 | (lambda () 94 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 95 | (glLoadIdentity) 96 | (let ((wavelength:double 100000.0)) 97 | (let ((i:i64 1) (n:double 20.0)) 98 | (dotimes (i 20) 99 | (glColor3d (/ 1.0 (i64tod i)) (aref beat_array i) (- 1.0 (/ 1.0 (i64tod i)))) 100 | ;(glRotated (* 90.0 g) (- 1.0 g) g 1.0) 101 | (circle (* (- n (i64tod i)) (/ 1.0 n)) (i64tod i))) 102 | 103 | )) 104 | )) 105 | ) 106 | 107 | 108 | (bind-func initgl 109 | (lambda () 110 | (glMatrixMode GL_PROJECTION) 111 | (glLoadIdentity) 112 | (glOrtho -1. 1. -1. 1. 0.0 10.) 113 | (glMatrixMode GL_MODELVIEW))) 114 | 115 | (initgl) 116 | 117 | ;; standard impromptu callback 118 | (define opengl-test 119 | (lambda () 120 | (my-gl-loop) 121 | (gl:swap-buffers glctx) 122 | (callback (+ (now) 500) 'opengl-test))) 123 | 124 | (opengl-test) 125 | 126 | 127 | 128 | (define scale (pc:scale 0 'ionian)) 129 | 130 | 131 | (bind-func setBeat 132 | (lambda (beat:i64 val:double) 133 | (aset! beat_array beat val))) 134 | 135 | (setBeat 7 1.0) 136 | 137 | (define *metro* (make-metro 140)) 138 | 139 | (define SHMusic 140 | (lambda (beat mod) 141 | (if (= (modulo beat mod) 0) 142 | (play piano (pc:relative 60 (* 2 mod) scale) 130 1)) 143 | 144 | (if (= (modulo beat mod) 0) 145 | (setBeat mod 1.0) 146 | (setBeat mod 0.0)) 147 | 148 | 149 | 150 | (callback (*metro* (+ beat (* 0.5 1))) 'SHMusic (+ beat 1) mod))) 151 | 152 | 153 | (SHMusic (*metro* 'get-beat 1) 1) 154 | (SHMusic (*metro* 'get-beat 1) 2) 155 | (SHMusic (*metro* 'get-beat 1) 3) 156 | (SHMusic (*metro* 'get-beat 1) 4) 157 | (SHMusic (*metro* 'get-beat 1) 5) 158 | (SHMusic (*metro* 'get-beat 1) 6) 159 | (SHMusic (*metro* 'get-beat 1) 7) 160 | (SHMusic (*metro* 'get-beat 1) 8) 161 | 162 | (bind-func rampGreenX 163 | (lambda (value:double) 164 | (set! green value) 165 | ;(let ((vtk 0.0) (seconds 0.3)) 166 | ;(set-signal! green vtk seconds)) 167 | )) 168 | 169 | (rampGreen 0.7) 170 | -------------------------------------------------------------------------------- /circleOfCircles2.xtm: -------------------------------------------------------------------------------- 1 | (define glctx (gl:make-ctx ":0.0" #f 0.0 0.0 1280.0 800.0)) 2 | 3 | (bind-func initgl 4 | (lambda () 5 | (glMatrixMode GL_PROJECTION) 6 | (glLoadIdentity) 7 | (glOrtho -12.8 12.8 -8. 8. -10.0 10.) 8 | (glMatrixMode GL_MODELVIEW))) 9 | 10 | (initgl) 11 | 12 | (bind-val counter double 0.0) 13 | (bind-func inc_counter 14 | (lambda () 15 | (set! counter (+ counter (ftod (dsp.left)))))) 16 | 17 | (bind-func dec_counter 18 | (lambda () 19 | (set! counter (- counter 20.0)))) 20 | 21 | 22 | ;;animation functions 23 | (bind-func wave 24 | (lambda (wavelength:double amplitude:double) 25 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (i64tod (now)) wavelength))))))) 26 | 27 | (bind-func wave 28 | (lambda (wavelength:double amplitude:double) 29 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (* 1000.0 (ftod (dsp.left))) wavelength))))))) 30 | 31 | (bind-func wave 32 | (lambda (wavelength:double amplitude:double) 33 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (+ (i64tod (now)) (* 100.0 counter)) wavelength))))))) 34 | 35 | (bind-func wave 36 | (lambda (wavelength:double amplitude:double) 37 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (* 100.0 counter) wavelength))))))) 38 | 39 | (bind-func wave 40 | (lambda (wavelength:double amplitude:double) 41 | (* amplitude (+ 0.5 (* 0.5 (cos (/ (* 100.0 first_ring) wavelength))))))) 42 | 43 | (bind-func color_wave 44 | (lambda (wavelength:double) 45 | (let ((gray:double (wave (- wavelength (wave wavelength 10.0)) 1.0))) 46 | (glColor3d gray 0.1 (* 0.5 gray))))) 47 | 48 | ;; my circle function 49 | (bind-func circle 50 | (lambda (radius res) 51 | (glBegin GL_TRIANGLE_FAN) 52 | (let ((i:double 0.0)) 53 | (dotimes (i res) 54 | (let ((radians (* (/ i res) 6.283))) 55 | (glVertex2d (* (sin radians) radius) 56 | (* (cos radians) radius)))) 57 | (glEnd)))) 58 | 59 | (bind-func circle 60 | (lambda (radius res) 61 | (glBegin GL_LINE_LOOP) 62 | (let ((i:double 0.0)) 63 | (dotimes (i res) 64 | (let ((radians (* (/ i res) 6.283))) 65 | (glVertex2d (* (sin radians) (+ radius (wave (+ i 10000.0 ) 0.4))) 66 | (* (cos radians) (+ radius (wave (+ i 10000.0 ) 0.4)))))) 67 | (glEnd)))) 68 | 69 | 70 | ;;ring 71 | (bind-func ring 72 | (lambda (size:double n:double trans:double rot:double col:double) 73 | (let ((i:double 1.0)) 74 | (dotimes (i n) 75 | (glPushMatrix) 76 | (glRotated (* i (/ 360.0 n)) 0.0 0.0 1.0) 77 | (glTranslated 0.0 (+ trans size (wave (+ (* i col) 1000.0 ) 1.0)) 0.0) 78 | ;(color_wave (+ i rot 30000.0)) 79 | (glPushMatrix) 80 | ;(glRotated (wave (+ (* (wave 2000000.0 1.0) 1000.0) 100000.0 i) 360.0) (wave (+ 120000.0 i) 1.0) 1.0 0.0) 81 | (glColor3d 0.0 (wave (+ (* i col) 10000.0 ) 0.5) 0.2) 82 | (circle size 3.0) 83 | (glPopMatrix) 84 | (glPopMatrix))))) 85 | 86 | 87 | 88 | 89 | (bind-val first_ring double 7.0) 90 | (bind-val second_ring double 25.0) 91 | (bind-val third_ring double 70.0) 92 | (bind-val fourth_ring double 160.0) 93 | (bind-val fifth_ring double 340.0) 94 | 95 | (set! first_ring 70.0) 96 | (set! second_ring 250.0) 97 | (set! third_ring 700.0) 98 | (set! fourth_ring 1600.0) 99 | (set! fifth_ring 3400.0) 100 | 101 | ;;mandala 102 | (bind-func mandala 103 | (lambda (size:double id:double) 104 | (glPushMatrix) 105 | (glScaled size size 1.0) 106 | 107 | ;(color_wave 30000.0) 108 | (glColor3d 1.0 (wave 100000.0 0.5) 0.2) 109 | (glPushMatrix) 110 | (glRotated (wave 100000.0 360.0) 0.0 0.0 1.0) 111 | (circle 1.0 7.0) 112 | (glPopMatrix) 113 | 114 | ;(glColor3d 0.8 (wave 110000.0 0.6) 0.4) 115 | (ring 0.75 7.0 1.0 7.0 (+ 2.0 id)) 116 | 117 | ;(glColor3d 0.7 (wave 120000.0 0.7) 0.3) 118 | (ring 0.5 18.0 2.5 25.0 (+ 4.0 id)) 119 | 120 | ;(glColor3d 0.6 (wave 130000.0 0.8) 0.2) 121 | (ring 0.25 45.0 3.5 70.0 (+ 6.0 id)) 122 | 123 | ;(glColor3d 0.5 (wave 140000.0 0.9) 0.1) 124 | (ring 0.125 90.0 4.0 160.0 (+ 8.0 id)) 125 | 126 | ;(glColor3d 0.4 (wave 150000.0 1.0) 0.0) 127 | (ring 0.0625 180.0 4.25 340.0 (+ 10.0 id)) 128 | 129 | 130 | (glPopMatrix) 131 | 132 | )) 133 | 134 | (bind-func circleOrMandala 135 | (lambda (size:double) 136 | (if (> size 0.75) (mandala size) (circle size 22.0)))) 137 | 138 | (bind-func mandala_ring 139 | (lambda (size:double n:double trans:double rot:double) 140 | (let ((i:double 1.0)) 141 | (dotimes (i n) 142 | (glPushMatrix) 143 | (glRotated (+ (* i (/ 360.0 n)) rot) 0.0 0.0 1.0) 144 | (glTranslated 0.0 (+ trans size (wave (+ i 10000.0 ) 1.0)) 0.0) 145 | 146 | ;(glColor3d (wave (+ 20000.0 (* 1.5 i)) 1.0) (wave (+ 90000.0 (* 4.0 i)) 1.0) (wave (+ 50000.0 (* 1.0 i)) 1.0)) 147 | ;(glScaled size size 1.0) 148 | ;(mandala2) 149 | (mandala size i) 150 | 151 | (glPopMatrix))))) 152 | 153 | 154 | 155 | 156 | (wave 1000000 1.0) 157 | 158 | 159 | 160 | 161 | 162 | (bind-func my-gl-loop 163 | (lambda () 164 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 165 | (glLoadIdentity) 166 | (inc_counter) 167 | ;(dec_counter) 168 | (glPushMatrix) 169 | (glScaled 0.5 0.5 1.0) 170 | (mandala 1.0 0.0) 171 | (mandala_ring 0.75 7.0 7.0 first_ring) 172 | (mandala_ring 0.5 19.0 13.0 second_ring) 173 | (mandala_ring 0.25 44.0 16.5 third_ring) 174 | (mandala_ring 0.125 90.0 18.25 fourth_ring) 175 | ; (mandala_ring 0.0625 180.0 19.25 fourth_ring) 176 | (glPopMatrix) 177 | 178 | 179 | )) 180 | 181 | 182 | 183 | ;(glTranslated 1.0 0.0 0.0) 184 | ;(glScaled 1.0 1.0 1.5) 185 | 186 | 187 | ;; standard impromptu callback 188 | (define opengl-test 189 | (lambda () 190 | (my-gl-loop) 191 | (gl:swap-buffers glctx) 192 | (callback (+ (now) 500) 'opengl-test))) 193 | 194 | (opengl-test) 195 | -------------------------------------------------------------------------------- /moreRhythm.xtm: -------------------------------------------------------------------------------- 1 | ;;;;; drums 2 | ;; define me first! 3 | (define *metro* (make-metro 130)) 4 | 5 | (define *subdiv* 1) 6 | (define *metre1* (make-metre '( 16) 1/4 )) 7 | (define *metre2* (make-metre '( 16 8 4 2 1 1) 1/2 )) 8 | (define *metre3* (make-metre '( 16 8 3 2 1 1) 1/4)) 9 | (define *metre4* (make-metre '( 3 3 2) *subdiv*)) 10 | 11 | (define edrums-fmsynth 12 | (lambda (beat note vel dur) 13 | (play edrums note vel dur) 14 | (play djembe note vel dur))) 15 | 16 | (define piano-conga 17 | (lambda (beat note vel dur) 18 | 19 | (play fmsynth (pcr) vel dur) 20 | (play conga (+ (modulo note 15) 10) vel dur))) 21 | 22 | (define strings-djembe 23 | (lambda (beat note vel dur) 24 | (play strings note vel dur) 25 | (play strings (+ note 7) vel dur) 26 | (play piano note vel dur) 27 | (play piano (- note 24) vel dur))) 28 | 29 | (edrums-fmsynth 46 140 1/4) 30 | 31 | (define *degree* 0.0) 32 | (let ((vtk 0.0) (seconds 15)) 33 | (set-signal! *degree* vtk seconds)) 34 | 35 | (set-signal! *kickVel* 0 15) 36 | 37 | (define rampDegree 38 | (lambda (degree) 39 | (set! *degree* degree) 40 | (let ((vtk (- degree 10)) (seconds 0.3)) 41 | (set-signal! *degree* vtk seconds)))) 42 | 43 | 44 | (bind-val degree double 0.0) 45 | 46 | (bind-func ramp_degree 47 | (lambda (val:double) 48 | (set! degree 1.0) 49 | (let ((vtk (- val 10)) (seconds 0.3)) 50 | (set-signal! degree vtk seconds)))) 51 | 52 | 53 | (ramp_degree 43.0) 54 | 55 | (root) 56 | 57 | (define kit 58 | (lambda (beat dur) 59 | 60 | (cond ((*metre1* beat 1.0) (play edrums 10 100 (* 3.0 dur))) 61 | ((*metre1* beat 2.0) (play edrums 11 100 dur)) 62 | ((*metre1* beat 4.0) (play edrums 23 120 dur)) 63 | ((*metre1* beat 5.0) (play perc 14 0 dur)) 64 | ((*metre1* beat 7.0) (play perc 11 0 dur)) 65 | ((*metre1* beat 9.0) (play perc 13 0 (* 3.0 dur))) 66 | ((*metre1* beat 12.0) (play 1/4 perc 15 0 dur)) 67 | ((*metre1* beat 13.0) (play perc 16 0 dur))) 68 | 69 | 70 | 71 | 72 | ; (cond ((*metre1* beat 1.0) (set_curr_note -14)) 73 | ; ((*metre2* beat 1.0) (set_curr_note 11)) 74 | ; ((*metre3* beat 3.0) (set_curr_note 24)) 75 | ; ((*metre3* beat 4.0) (set_curr_note 96))) 76 | 77 | ; (if (< (random) 0.5) 78 | ; (piano-conga beat (random 25) (cosr 160 30 1/2) dur) 79 | ; (strings-djembe beat (pc:relative (pcr) (random 2 11) scale) (cosr 170 10 1/3) dur) 80 | ; ) 81 | 82 | 83 | (if ( = (modulo (*metre1* beat) 3) 0) 84 | (play perc 15 110 dur) 85 | (play drums (random 20 21 20 20 ) (cosr 110 20 (random '(5/2 1/4))) dur)) 86 | 87 | 88 | 89 | 90 | 91 | (if ( > (modulo (*metre1* beat) 6) 2) 92 | (play conga (trir 12 3 1/3) (random '(130 0 0)) dur )) 93 | 94 | (if ( > (modulo (*metre1* beat) 6) 0) 95 | (play djembe (cosr 3 (random 3 4) 1/3) (random '(110 120 0)) dur )) 96 | 97 | 98 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit (+ beat dur) 1/4) 99 | )) 100 | 101 | 102 | (kit (*metro* 'get-beat 1) 1/4) 103 | 104 | 105 | (define kit2 106 | (lambda (beat dur) 107 | 108 | (cond ((*metre2* beat 1.0) (play drums 10 120 (* 3.0 dur))) 109 | ((*metre2* beat 2.0) (play drums 21 110 dur)) 110 | ((*metre2* beat 4.0) (play drums 10 120 dur)) 111 | ((*metre2* beat 5.0) (play drums 42 120 dur)) 112 | ((*metre2* beat 7.0) (play drums 10 110 dur)) 113 | ((*metre2* beat 9.0) (play drums 11 110 (* 3.0 dur))) 114 | ((*metre2* beat 12.0) (play 1/3 drums 41 110 dur)) 115 | ((*metre2* beat 13.0) (play drums 46 110 dur))) 116 | 117 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit2 (+ beat dur) dur) 118 | )) 119 | 120 | 121 | (kit2 (*metro* 'get-beat 1) 1/2) 122 | 123 | (define kit3 124 | (lambda (beat dur) 125 | 126 | (cond ((*metre3* beat 1.0) (play conga 10 110 (* 3.0 dur))) 127 | ((*metre3* beat 2.0) (play conga 21 90 dur)) 128 | ((*metre3* beat 4.0) (play conga 10 110 dur)) 129 | ((*metre3* beat 5.0) (play conga 42 110 dur)) 130 | ((*metre3* beat 7.0) (play conga 10 90 dur)) 131 | ((*metre3* beat 9.0) (play conga 11 90 (* 3.0 dur))) 132 | ((*metre3* beat 12.0) (play 1/3 conga 41 90 dur)) 133 | ((*metre3* beat 13.0) (play conga 46 110 dur))) 134 | 135 | (callback (*metro* (+ beat (* 0.5 dur))) 'kit3 (+ beat dur) dur) 136 | )) 137 | 138 | 139 | (kit3 (*metro* 'get-beat 1) 1/4) 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | (define violin 150 | (lambda (beat dur) 151 | 152 | (play fmsynth 67 20 dur 0.5 10.0) 153 | (play fmsynth 51 20 dur 0.9 18.0) 154 | (play fmsynth 48 20 dur 0.7 15.0) 155 | 156 | (play strings 60 120 dur) 157 | (play strings 72 120 dur) 158 | (play strings 48 120 dur) 159 | 160 | 161 | (callback (*metro* (+ beat (* 0.5 dur))) 'v iolin (+ beat dur) 8) 162 | )) 163 | 164 | 165 | (violin (*metro* 'get-beat 1) 8 ) 166 | 167 | 168 | 169 | 170 | (define metre-change 171 | (lambda (beat) 172 | (if (= (modulo beat 20) 0) 173 | (set! *subdiv* (random '(1/2 1/6)))) 174 | 175 | (if (= (modulo beat 20) 5) 176 | (set! *subdiv* (random '(1/5 1/3)))) 177 | 178 | (if (= (modulo beat 20) 15) 179 | (set! *subdiv* 1/4)) 180 | 181 | (if (= (modulo beat 20) 17) 182 | (set! *subdiv* (random '(1/8 1)))) 183 | 184 | 185 | (if (= (modulo beat 40) 0) 186 | (set! *metre1* (make-metre '(2 1 2 2 1 2 1 1 2 2 1 1 2) *subdiv*)) 187 | (set! *metre2* (make-metre '( 1 1 1 2 ) *subdiv*)) 188 | (set! *metre3* (make-metre '( 6 6 4 4 ) *subdiv*))) 189 | 190 | (if (= (modulo beat 40) 20) 191 | (set! *metre3* (make-metre '(2 1 2 2 1 2 1 1 2 2 1 1 2) *subdiv*)) 192 | (set! *metre2* (make-metre '( 1 1 1 2 ) *subdiv*)) 193 | (set! *metre1* (make-metre '( 6 6 4 4 ) *subdiv*))) 194 | ; (println *subdiv*) 195 | (callback (*metro* (+ beat 0.5)) 'metre-change (+ beat 1)))) 196 | 197 | (metre-change (*metro* 'get-beat 1) 1) 198 | 199 | -------------------------------------------------------------------------------- /morphing.xtm: -------------------------------------------------------------------------------- 1 | (define glctx (gl:make-ctx ":0.0" #f 0.0 0.0 640.0 480.0)) 2 | 3 | (bind-func initgl 4 | (lambda () 5 | (glMatrixMode GL_PROJECTION) 6 | (glLoadIdentity) 7 | (glOrtho -6.4 6.4 -4.8 4.8 -5.0 5.0) 8 | (glMatrixMode GL_MODELVIEW))) 9 | 10 | (initgl) 11 | 12 | (bind-func my-gl-loop 13 | (lambda () 14 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 15 | (glLoadIdentity) 16 | 17 | (glPushMatrix) 18 | ;(glRotated (i64tod (modulo (/ (now) 500) 360)) 0.5 0.1 1.0) 19 | 20 | (glBegin GL_LINES) 21 | (let ((i:double 0.0) (n:double 30.0)) 22 | (dotimes (i (+ n 1)) 23 | (let ((j:double 0.0)) 24 | (dotimes (j (+ n 1)) 25 | (let ((u (* i (/ TWOPI n))) (v (* j (/ TWOPI n)))) 26 | (let ( (x (* (sin u) (cos v) 1.0)) 27 | (y (+ (sin v) (* (cos u) (cos v) 1.0))) 28 | (z (+ (cos v) (* (sin v) (sin u) 1.0)))) 29 | (glVertex3d x y z))))))) 30 | (glEnd) 31 | 32 | (glPopMatrix))) 33 | 34 | (bind-func my-gl-loop 35 | (lambda () 36 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 37 | (glLoadIdentity) 38 | 39 | (glPushMatrix) 40 | (glRotated (i64tod (modulo (/ (now) 200) 360)) 0.0 1.0 0.0) 41 | 42 | (glBegin GL_LINE_STRIP) 43 | (let ((i:double 0.0) (n:double 100.0)) 44 | (dotimes (i n) 45 | (let ((u (* i (/ TWOPI n)))) 46 | (let ( (x (sin u)) 47 | (y (cos u)))) 48 | (glVertex2d x y))))) 49 | (glEnd) 50 | 51 | (glPopMatrix))) 52 | 53 | (bind-func my-gl-loop 54 | (lambda () 55 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 56 | (glLoadIdentity) 57 | (glRotated (i64tod (modulo (/ (now) 500) 360)) 0.5 0.1 1.0) 58 | (glScaled 2.5 2.5 2.5) 59 | (glBegin GL_LINE_STRIP) 60 | (let ((i:double 0.0) (j:double 0.0) 61 | (n:double (+ 102.0 (* 100. (cos (* .00001 (i64tod (now))))))) 62 | (u 0.0) (v 0.0) (x 0.0) (y 0.0) (z 0.0)) 63 | (dotimes (i (+ n 1.0)) 64 | (dotimes (j (+ n 1.0)) 65 | (set! u (* i (/ TWOPI n))) 66 | (set! v (* j (/ TWOPI n))) 67 | (set! x (* (sin u) (cos v))) 68 | (set! y (+ (sin v) (* (cos u) (cos v)))) 69 | (set! z (+ (cos v) (* (sin v) (sin u)))) 70 | (glVertex3d x y z)))) 71 | (glEnd))) 72 | 73 | (bind-func my-gl-loop 74 | (lambda () 75 | (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) 76 | (glLoadIdentity) 77 | ;(glRotated (i64tod (modulo (/ (now) 1000) 360)) 0.5 0.1 0.3) 78 | (glTranslated 0.0 -1.0 1.0) 79 | (glScaled 1.5 1.5 1.5) 80 | (glRotated 260.0 1.0 0.0 0.0) 81 | 82 | (glBegin GL_LINE_STRIP) 83 | (let ((i:double 0.0) (j:double 0.0) 84 | (n:double 50.0) 85 | (u 0.0) (v 0.0) (x 0.0) (y 0.0) (z 0.0) 86 | (morph (* 3.0 (+ 0.5 (* 0.5 (sin (/ (i64tod (now)) 100000.0)))))) 87 | (morph2 (- morph 1.0)) 88 | (morph3 (- morph 2.0))) 89 | (dotimes (i (+ n 1.0)) 90 | (dotimes (j (+ n 1.0)) 91 | (cond ((< morph 1.0) 92 | (set! u (+ (* (u2 j n) morph) (* (- 1.0 morph) (u1 j n)))) 93 | (set! v (+ (* (v2 i n) morph) (* (- 1.0 morph) (v1 i n)))) 94 | (set! x (+ (* (x2 u v) morph) (* (- 1.0 morph) (x1 u v)))) 95 | (set! y (+ (* (y2 u v) morph) (* (- 1.0 morph) (y1 u v)))) 96 | (set! z (+ (* (z2 u v) morph) (* (- 1.0 morph) (z1 u v))))) 97 | ((and (>= morph 1.0) (< morph 2.0)) 98 | (set! u (+ (* (u3 j n) morph2) (* (- 1.0 morph2) (u2 j n)))) 99 | (set! v (+ (* (v3 i n) morph2) (* (- 1.0 morph2) (v2 i n)))) 100 | (set! x (+ (* (x3 u v) morph2) (* (- 1.0 morph2) (x2 u v)))) 101 | (set! y (+ (* (y3 u v) morph2) (* (- 1.0 morph2) (y2 u v)))) 102 | (set! z (+ (* (z3 u v) morph2) (* (- 1.0 morph2) (z2 u v))))) 103 | ((and (>= morph 2.0) (< morph 3.0)) 104 | (set! u (+ (* (u4 j n) morph3) (* (- 1.0 morph3) (u3 j n)))) 105 | (set! v (+ (* (v4 i n) morph3) (* (- 1.0 morph3) (v3 i n)))) 106 | (set! x (+ (* (x4 u v) morph3) (* (- 1.0 morph3) (x3 u v)))) 107 | (set! y (+ (* (y4 u v) morph3) (* (- 1.0 morph3) (y3 u v)))) 108 | (set! z (+ (* (z4 u v) morph3) (* (- 1.0 morph3) (z3 u v))))) 109 | 110 | ) 111 | 112 | (glColor3d (/ i n) 0.3 0.2) 113 | (glVertex3d x y z)))) 114 | (glEnd))) 115 | 116 | 117 | 118 | 119 | (bind-func u1 120 | (lambda (j:double n:double) 121 | (* j (/ (/ TWOPI 6.0) n)))) 122 | 123 | 124 | (bind-func v1 125 | (lambda (i:double n:double) 126 | (* i (/ PI n)))) 127 | 128 | (bind-func x1 129 | (lambda (u:double v:double) 130 | (cos (* 4.0 u)))) 131 | 132 | (bind-func y1 133 | (lambda (u:double v:double) 134 | (sin u))) 135 | 136 | (bind-func z1 137 | (lambda (u:double v:double) 138 | v)) 139 | 140 | 141 | 142 | (bind-func u2 143 | (lambda (j:double n:double) 144 | (* j (/ TWOPI n)))) 145 | 146 | (bind-func v2 147 | (lambda (i:double n:double) 148 | (* i (/ PI n)))) 149 | 150 | (bind-func x2 151 | (lambda (u:double v:double) 152 | (+ 1.0 (* (sin v) (cos u))))) 153 | 154 | (bind-func y2 155 | (lambda (u:double v:double) 156 | (sin u))) 157 | 158 | (bind-func z2 159 | (lambda (u:double v:double) 160 | v)) 161 | 162 | 163 | (bind-func u3 164 | (lambda (j:double n:double) 165 | (* j (/ TWOPI n)))) 166 | 167 | (bind-func v3 168 | (lambda (i:double n:double) 169 | (* i (/ PI n)))) 170 | 171 | (bind-func x3 172 | (lambda (u:double v:double) 173 | (* 3.0 (* (sin v) (cos u))))) 174 | 175 | (bind-func y3 176 | (lambda (u:double v:double) 177 | (* (sin v) (sin (* 1.5 u))))) 178 | 179 | (bind-func z3 180 | (lambda (u:double v:double) 181 | v)) 182 | 183 | 184 | 185 | (bind-func u4 186 | (lambda (j:double n:double) 187 | (* j (/ TWOPI n)))) 188 | 189 | (bind-func v4 190 | (lambda (i:double n:double) 191 | (* i (/ PI n)))) 192 | 193 | (bind-func x4 194 | (lambda (u:double v:double) 195 | (* (sin v) (cos u)))) 196 | 197 | (bind-func y4 198 | (lambda (u:double v:double) 199 | (* (sin v) (sin u)))) 200 | 201 | (bind-func z4 202 | (lambda (u:double v:double) 203 | (cos (* 2.0 v)))) 204 | 205 | ;; standard impromptu callback 206 | (define opengl-test 207 | (lambda () 208 | (my-gl-loop) 209 | (gl:swap-buffers glctx) 210 | (callback (+ (now) 500) 'opengl-test))) 211 | 212 | (opengl-test) -------------------------------------------------------------------------------- /LCADw4Harmony.xtm: -------------------------------------------------------------------------------- 1 | (define scale (pc:scale 7 'lydian)) 2 | 3 | (define root 1) 4 | (define pcr 5 | (lambda () 6 | (pc:relative 48 root scale))) 7 | 8 | ;;;;;;;;; harmony 9 | 10 | (define key-change 11 | (lambda (beat) 12 | (cond ((= (modulo beat 32) 0) (set! scale (pc:scale 0 'ionian))) 13 | ((= (modulo beat 32) 16) (set! scale (pc:scale 7 'ionian))))) 14 | 15 | (callback (*metro* (+ beat (* .5 1))) 'key-change (+ beat 1)) 16 | )) 17 | 18 | (key-change (*metro* 'get-beat 1)) 19 | (chords (*metro* 'get-beat 1) 1) 20 | (scale) 21 | 22 | (define res-sweep 23 | (lambda (beat dur) 24 | (fmpad_fx.res (wave 0.2 0.9 5/2)) 25 | (fmpad_fx.fb (wave 0.1 0.8 5)) 26 | ; (fmpad_fx.wet (wave 0.1 0.5 1/2)) 27 | (fmpad_fx.cwet (wave 0.1 0.8 4)) 28 | (fmpad_fx.cfb (wave 0.3 0.9 2)) 29 | (callback (*metro* (+ beat (* dur .5))) 'res-sweep 30 | (+ beat dur) dur))) 31 | 32 | (res-sweep (*metro* 'get-beat 4.0) 5/4) 33 | 34 | (fmpad_fx.res 0.1) 35 | (fmpad_fx.fb 0.9) 36 | (fmpad_fx.wet 0.9) 37 | (fmpad_fx.cwet 0.8) 38 | (fmpad_fx.cfb 0.8) 39 | 40 | 41 | 42 | (define res-sweep 43 | (lambda (beat dur) 44 | (fmpad_fx.res (wave 0.2 0.9 5/2)) 45 | (fmpad_fx.fb (wave 0.1 0.8 5)) 46 | ; (fmpad_fx.wet (wave 0.1 0.5 1/2)) 47 | (fmpad_fx.cwet (wave 0.1 0.8 4)) 48 | (fmpad_fx.cfb (wave 0.3 0.9 2)) 49 | (callback (*metro* (+ beat (* dur .5))) 'res-sweep 50 | (+ beat dur) dur))) 51 | 52 | (res-sweep (*metro* 'get-beat 4.0) 5/4) 53 | 54 | (fmsynth_fx.cl (chorus_c 0.0)) 55 | (fmsynth_fx.cr (chorus_c 0.314)) 56 | (fmsynth_fx.del1 (delay_c (convert (/ SR 2.0)))) 57 | (fmsynth_fx.del2 (delay_c (convert (/ SR 3.0)))) 58 | (fmsynth_fx.vcfl (vcf_c 1)) 59 | (fmsynth_fx.vcfr (vcf_c 1)) 60 | (fmsynth_fx.res 0.7) 61 | (fmsynth_fx.revl (reverb_c 20.0)) 62 | (fmsynth_fx.revr (reverb_c 20.0)) 63 | (fmsynth_fx.cwet 0.1) 64 | (fmsynth_fx.cfb 0.1) 65 | (fmsynth_fx.dwet 0.1) 66 | (fmsynth_fx.dfb 0.1) 67 | (fmsynth_fx.wet 0.1) 68 | (fmsynth_fx.fb 0.1) 69 | 70 | 71 | 72 | 73 | (chords (*metro* 'get-beat 1) 1) 74 | 75 | (define *degree* 0) 76 | 77 | (define chords 78 | (lambda (beat dur) 79 | 80 | (if (= (modulo beat 8) 0) 81 | (set! root (random (cdr (assoc root '((1 5) 82 | (5 2) 83 | (2 7) 84 | (7 1))))))) 85 | 86 | (if (= (modulo beat 8) 0) 87 | (for-each (lambda (p) 88 | (play piano p 110 dur)) 89 | (pc:make-chord (pcr) (+ (pcr) 12) 'scale)) 90 | ; ) 91 | 92 | (callback (*metro* (+ beat (* .5 dur))) 'chords (+ beat dur) dur) 93 | )) 94 | 95 | (chords (*metro* 'get-beat 1) 1) 96 | 97 | (define progression 98 | (lambda (beat dur degree) 99 | (if (*metre1* beat 1.0) 100 | (for-each (lambda (p) 101 | (play strings p 120 dur) 102 | (pc:make-chord 48 89 3 (pc:diatonic 0 '- degree))))) 103 | 104 | (callback (*metro* (+ beat (* .5 dur))) 'progression (+ beat dur) dur 105 | (random (cdr (assoc degree '((i iv v iii6 vi) 106 | (ii v vii) 107 | (iii6 vi) 108 | (iv v ii vii i) 109 | (v i vi) 110 | (vii v i) 111 | (vi ii)))))))) 112 | 113 | (progression (*metro* 'get-beat 1) 1/2 'i) 114 | 115 | (bind-val curr_note double 2.0) 116 | (bind-func set_curr_note 117 | (lambda (note:double) 118 | (set! curr_note note))) 119 | 120 | (bind-val counter double 0.0) 121 | (bind-func inc_counter 122 | (lambda () 123 | (set! counter (+ counter curr_note)))) 124 | 125 | (bind-func dec_counter 126 | (lambda () 127 | (set! counter (- counter 20.0)))) 128 | 129 | (define melody 130 | (lambda (beat dur) 131 | (if (*metre1* beat 1.0) 132 | (set! dur (random '(1/2 )))) 133 | 134 | (let ( (note (pc:relative (- (pcr) 12) (cosr 5 4 1/3) scale)) 135 | (vel (random '(20 )))) 136 | 137 | (play fmsynth note vel (* 1 dur) 0.8 (+ 10.0 root)) 138 | ;(play piano note (+ 100.0 vel) (* 1 dur)) 139 | 140 | ) 141 | 142 | (callback (*metro* (+ beat (* .5 dur))) 'melody (+ beat dur) dur) 143 | )) 144 | 145 | (melody (*metro* 'get-beat 1) 1/2) 146 | (bassline (*metro* 'get-beat 1) 1/3) 147 | (bassline (*metro* 'get-beat 1) 1/4) 148 | 149 | (define bassline2 150 | (lambda (beat dur) 151 | (if (*metre1* beat 1.0) 152 | (play subbass 48 120 dur)) 153 | 154 | ; (if (*metre1* beat (random '(2.0 4.0))) 155 | ; (play subbass (- (pcr) 5) 110 dur)) 156 | 157 | ; (if (*metre1* beat 6.0) 158 | ; (play subbass (pcr) 110 dur)) 159 | 160 | ; (if (*metre1* beat (random '(4))) 161 | ; (play subbass (pc:relative (- (pcr) 12) (random '(3 4 -2)) scale) 110 (* 2 dur))) 162 | (callback (*metro* (+ beat (* .5 dur))) 'bassline2 (+ beat dur) 1/4) 163 | )) 164 | 165 | (bassline2 (*metro* 'get-beat 1) 1) 166 | 167 | (define guitar1 168 | (lambda (beat dur) 169 | (let ((b (modulo beat 16))) 170 | (cond ((= b 0) (play fmsynth (- (pcr) 12) 30 (* 2 dur))) 171 | ((= b 6) (play fmsynth (+ (pcr) 0) 20 (* 2 dur))) 172 | ((= b 12) (play fmsynth (+ (pcr) 12) 10 (* 2 dur))))) 173 | 174 | 175 | (callback (*metro* (+ beat (* .5 dur) 0.5)) 'guitar1 (+ beat dur 0) dur) 176 | )) 177 | 178 | (guitar1 (*metro* 'get-beat 1) 1/2) 179 | 180 | 181 | 182 | 183 | 184 | 185 | (define melody1 186 | (lambda (beat dur octave) 187 | (if (= (modulo beat 1) 0) 188 | (set! dur (random '(5 4)))) 189 | (play piano (pc:relative (+ (pcr) (* octave 24) (random '(0.0 1.0))) 190 | (* (random '(2 -2 3)) ( modulo (/ (modulo beat 8) dur) 5)) scale) 191 | (random '(150 110)) dur) 192 | (callback (*metro* (+ beat (* .6 dur))) 'melo dy1 (+ beat dur) dur octave ) 193 | )) 194 | 195 | (melody1 (*metro* 'get-beat 1) 2 0) 196 | 197 | 198 | (define bassline 199 | (lambda (beat dur) 200 | (if (or (= (modulo beat 4) 0) (= (modulo beat 4) 3) (= (modulo beat 8) 7) 201 | (set! dur (random '(1/4 1/2 1/3 1)))) 202 | (play piano (pc:relative (+ (pcr) 12) 203 | (* (random '(-1 1 2)) ( modulo (/ (modulo beat 8) dur) 3)) scale) 204 | (random '(100 120)) dur))) 205 | (callback (*metro* (+ beat (* .6 dur))) 'bassline (+ beat dur) dur) 206 | )) 207 | 208 | (bassline (*metro* 'get-beat 1) 1) -------------------------------------------------------------------------------- /LCADsetup5.xtm.scm: -------------------------------------------------------------------------------- 1 | ;;;; Much of the content in this file is taken from various Extempore 2 | ;;;; blog posts by Ben Swift which are indexed here: 3 | ;;;; http://benswift.me/extempore-docs/index.html 4 | ;;;; 5 | 6 | ;;; Load the needed libraries -- this will take several minutes 7 | ;;; 8 | 9 | (sys:set-default-timeout (* 2 13953200)) 10 | 11 | (sys:load "libs/core/pc_ivl.xtm") 12 | (sys:load "libs/external/instruments_ext.xtm") 13 | 14 | ;;; Set up the constants we're going to need 15 | ;;; 16 | (define sample-path "/Users/jasonlevine/Code/extempore/assets/") 17 | (define edrum-path (string-append sample-path "biolabsDubstepKit3/")) 18 | (define conga-path (string-append sample-path "Conga/")) 19 | (define djembe-path (string-append sample-path "Djembe/")) 20 | 21 | 22 | ;;; Add the samplers/instruments we're going to need to the dsp output 23 | ;;; callback 24 | ;;; 25 | (define-sampler edrums sampler_note_hermite_c sampler_fx) 26 | (define-sampler conga sampler_note_hermite_c sampler_fx) 27 | (define-sampler djembe sampler_note_hermite_c sampler_fx) 28 | 29 | (define-sampler piano sampler_note_hermite_c sampler_fx) 30 | 31 | 32 | (bind-func dsp:DSP 1000000 33 | (lambda (in time chan dat) 34 | (cond ((< chan 2) 35 | (+ 36 | (edrums in time chan dat) 37 | (djembe in time chan dat) 38 | (conga in time chan dat) 39 | (piano in time chan dat) 40 | )) 41 | (else 0.0)))) 42 | 43 | (dsp:set! dsp) 44 | 45 | (bind-func rms_c 46 | (lambda () 47 | (let ((d:SAMPLE* (alloc FRAMES)) 48 | (t 0) 49 | (db:SAMPLE 0.0)) 50 | (lambda (x:SAMPLE) 51 | (pset! d (% t FRAMES) (* x x)) 52 | (set! t (+ t 1)) 53 | (if (= 0 (% t FRAMES)) 54 | (set! db (+ 3.0 (amp2db (sqrt (mean d FRAMES)))))) 55 | x)))) 56 | 57 | ;;; Set up e drum samples 58 | ;;; 59 | (define add-edrum-sample 60 | (lambda (file-name const-name) 61 | (set-sampler-index edrums 62 | (string-append edrum-path file-name) 63 | const-name 64 | 0 0 0 1))) 65 | 66 | (define edrum-sample-data 67 | (list 68 | (list "Dubstep-Kick0001.wav" 10) 69 | (list "Dubstep-Kick0005.wav" 11) 70 | (list "Dubstep-Kick0006.wav" 12) 71 | (list "Dubstep-Kick0007.wav" 13) 72 | (list "Dubstep-Kick0015.wav" 14) 73 | (list "Dubstep-Kick0018.wav" 15) 74 | (list "Dubstep-Kick0006.wav" 16) 75 | (list "Dubstep-Kick0007.wav" 17) 76 | (list "Dubstep-Kick0015.wav" 18) 77 | (list "Dubstep-Kick0018.wav" 19) 78 | (list "Dubstep-Hats0014.wav" 20) 79 | (list "Dubstep-Hats0017.wav" 22) 80 | (list "Dubstep-Hats0019.wav" 23) 81 | (list "Dubstep-Hats0020.wav" 24) 82 | (list "Dubstep-Hats0026.wav" 25) 83 | (list "Dubstep-Hats0039.wav" 26) 84 | (list "Dubstep-Cym0030.wav" 30) 85 | (list "Dubstep-Cym0035.wav" 31) 86 | (list "Dubstep-Snare0003.wav" 40) 87 | (list "Dubstep-Snare0008.wav" 41) 88 | (list "Dubstep-Snare0009.wav" 42) 89 | (list "Dubstep-Snare0010.wav" 43) 90 | (list "Dubstep-Snare0011.wav" 44) 91 | (list "Dubstep-Snare0013.wav" 45) 92 | (list "Dubstep-Snare0016.wav" 46) 93 | (list "Dubstep-Snare0022.wav" 47) 94 | (list "Dubstep-Snare0023.wav" 48) 95 | (list "Dubstep-Snare0025.wav" 49) 96 | (list "Dubstep-Snare0027.wav" 50) 97 | (list "Dubstep-Snare0029.wav" 51) 98 | (list "Dubstep-Snare0033.wav" 52) 99 | (list "Dubstep-Snare0036.wav" 53) 100 | (list "Dubstep-Snare0037.wav" 54))) 101 | 102 | 103 | (play-note (now) edrums 12 180 44100) 104 | 105 | (define add-edrum-samples 106 | (lambda (data) 107 | (map (lambda (sample-pair) 108 | (add-edrum-sample (car sample-pair) (cadr sample-pair))) 109 | data))) 110 | 111 | (add-edrum-samples edrum-sample-data) 112 | 113 | 114 | ;;conga 115 | (define add-conga-sample 116 | (lambda (file-name const-name) 117 | (set-sampler-index conga 118 | (string-append conga-path file-name) 119 | const-name 120 | 0 0 0 1))) 121 | 122 | (define conga-sample-data 123 | (list 124 | (list "Single_Hit_01.wav" 10) 125 | (list "Single_Hit_02.wav" 11) 126 | (list "Single_Hit_03.wav" 12) 127 | (list "Single_Hit_04.wav" 13) 128 | (list "Single_Hit_05.wav" 14) 129 | (list "Single_Hit_06.wav" 15) 130 | (list "Single_Hit_07.wav" 16) 131 | (list "Single_Hit_08.wav" 17) 132 | (list "Single_Hit_09.wav" 18) 133 | (list "Single_Hit_10.wav" 19) 134 | (list "Single_Hit_11.wav" 20) 135 | (list "Single_Hit_12.wav" 21) 136 | (list "Single_Hit_13.wav" 22) 137 | (list "Single_Hit_14.wav" 23) 138 | (list "Single_Hit_15.wav" 24))) 139 | 140 | 141 | 142 | (play-note (now) conga 24 180 44100) 143 | 144 | (define add-conga-samples 145 | (lambda (data) 146 | (map (lambda (sample-pair) 147 | (add-conga-sample (car sample-pair) (cadr sample-pair))) 148 | data))) 149 | 150 | (add-conga-samples conga-sample-data) 151 | 152 | 153 | 154 | (define add-djembe-sample 155 | (lambda (file-name const-name) 156 | (set-sampler-index djembe 157 | (string-append djembe-path file-name) 158 | const-name 159 | 0 0 0 1))) 160 | 161 | (define djembe-sample-data 162 | (list 163 | (list "Djembe_SingleHit01.wav" 10) 164 | (list "Djembe_SingleHit02.wav" 11) 165 | (list "Djembe_SingleHit03.wav" 12) 166 | (list "Djembe_SingleHit04.wav" 13) 167 | (list "Djembe_SingleHit05.wav" 14) 168 | (list "Djembe_SingleHit06.wav" 15))) 169 | 170 | 171 | 172 | (play-note (now) djembe 10 180 44100) 173 | 174 | (define add-djembe-samples 175 | (lambda (data) 176 | (map (lambda (sample-pair) 177 | (add-djembe-sample (car sample-pair) (cadr sample-pair))) 178 | data))) 179 | 180 | (add-djembe-samples djembe-sample-data) 181 | 182 | 183 | ;;; Set up piano samples 184 | ;;; 185 | (define piano-regex "^.*([ABCDEFG][#b]?[0-9])v([0-9]+)\.wav$") 186 | 187 | (define parse-salamander-piano 188 | (lambda (file-list) 189 | (map (lambda (fname) 190 | (let ((result (regex:matched fname piano-regex))) 191 | (if (null? result) 192 | #f 193 | ;; load 4th velocity layer only 194 | (if (= (string->number (caddr result)) 4) 195 | (list fname 196 | (note-name-to-midi-number (cadr result)) 197 | 0 198 | 0) 199 | #f)))) 200 | file-list))) 201 | 202 | (load-sampler 203 | piano 204 | ;; Can't use a variable here; need the actual path string 205 | "/Users/jasonlevine/Code/extempore/assets/salamander/SalamanderGrandPianoV3_44.1khz16bit/44.1khz16bit" 206 | ;; 'sound bank' index 207 | 0 208 | parse-salamander-piano) 209 | 210 | 211 | 212 | ;; Now that everything is loaded, try out some notes ... 213 | (play-note (now) conga 15 90 44100) 214 | (play-note (now) piano 24 180 44100) 215 | 216 | 217 | -------------------------------------------------------------------------------- /LCADweek3.xtm.scm: -------------------------------------------------------------------------------- 1 | ;;;week3 globals 2 | 3 | (sys:load "libs/core/pc_ivl.xtm") 4 | 5 | (define scale (pc:scale 8 'phrygian)) 6 | 7 | (define wave 8 | (lambda (min max wavelength) 9 | (let ((freq (/ 1 wavelength)) (range (- max min))) 10 | (let ((sinNorm (+ 0.5 (* 0.5 (sin (* (now) freq)))))) 11 | (+ min (* sinNorm range)) 12 | )))) 13 | 14 | (define root 1) 15 | (define pcr 16 | (lambda () 17 | (pc:relative 48 root scale))) 18 | 19 | (define cb 20 | (lambda (beat dur func) 21 | (callback (*metro* (+ beat (* .5 dur))) func (+ beat dur)))) 22 | 23 | ;;;;;;;;; harmony 24 | 25 | (define key-change 26 | (lambda (beat) 27 | (cond ((= (modulo beat 64) 0) (set! scale (pc:scale 8 'aeolian))) 28 | ((= (modulo beat 64) 16) (set! scale (pc:scale 11 'ionian))) 29 | ((= (modulo beat 64) 32) (set! scale (pc:scale 8 'aeolian))) 30 | ((= (modulo beat 64) 48) (set! scale (pc:scale 11 'ionian)))) 31 | 32 | (callback (*metro* (+ beat (* .5 1))) 'key-change (+ beat 1)) 33 | ; (cb beat dur 'keychange) 34 | )) 35 | 36 | (key-change (*metro* 'get-beat 1)) 37 | (chords (*metro* 'get-beat 1) 1) 38 | (scale) 39 | 40 | (define chords 41 | (lambda (beat dur) 42 | 43 | (if (= (modulo beat 4) 0) 44 | (set! root (random (cdr (assoc root '((1 5) (5 3) (3 7) (7 1) ) ))))) 45 | 46 | ; (if (= (modulo beat 2) 0) 47 | ; (play shimmer (+ (pcr) 0) (wave 20 40 1) 1)) 48 | 49 | (if (*metre1* beat 1) 50 | (for-each (lambda (p) 51 | (play piano p (wave 140 160 (* 3 dur)) dur)) 52 | (pc:make-chord (pcr) (+ (pcr) 12) (random '(3 2)) scale))) 53 | 54 | 55 | (callback (*metro* (+ beat (* .5 dur))) 'chords (+ beat dur) 1/8) 56 | ; (cb beat dur 'chords) 57 | )) 58 | 59 | 60 | (chords (*metro* 'get-beat 1) 1) 61 | 62 | (define bassline 63 | (lambda (beat dur) 64 | (if (*metre1* beat 1) 65 | (play subbass ( - (pcr) 12) 110 1/4)) 66 | (callback (*metro* (+ beat (* .5 dur))) 'bassline (+ beat dur) dur) 67 | )) 68 | 69 | (bassline (*metro* 'get-beat 1) 1/2) 70 | 71 | (define bassline 72 | (lambda (beat dur) 73 | (if (= (modulo beat 4) 0) 74 | (play sawbass ( + (pcr) 12) 100 2)) 75 | (callback (*metro* (+ beat (* .5 dur))) 'bassline (+ beat dur) dur) 76 | )) 77 | 78 | (bassline (*metro* 'get-beat 1) 1) 79 | 80 | (define melody 81 | (lambda (beat dur octave) 82 | (if (= (modulo beat 1) 0) 83 | (set! dur (random '(1/2)))) 84 | (play fmsynth (pc:relative (+ (pcr) (* octave 12)) 85 | (* (random '(-1 1 2)) ( modulo (/ (modulo beat 8) dur) 8)) scale) 86 | (random '(50 0)) dur) 87 | (callback (*metro* (+ beat (* .6 dur))) 'melody (+ beat dur) dur octave ) 88 | )) 89 | 90 | (melody (*metro* 'get-beat 1) 1 3) 91 | 92 | 93 | (define melody 94 | (lambda (beat dur octave) 95 | (play fmsynth (pc:relative (+ (pcr) (* octave 12)) 96 | (cosr 5 3 3/2) scale) 97 | (random '(40 10)) dur) 98 | (callback (*metro* (+ beat (* .6 dur))) 'melody (+ beat dur) dur octave ) 99 | )) 100 | 101 | (melody (*metro* 'get-beat 1) 1/4 2) 102 | 103 | (define bassline 104 | (lambda (beat dur) 105 | (if (= (modulo beat 1) 0) 106 | (set! dur (random '(2 3)))) 107 | (play subbass (pc:relative (+ (pcr) 0) 108 | (* (random '(-1 1 2)) ( modulo (/ (modulo beat 8) dur) 8)) scale) 109 | (random '(90 110)) dur) 110 | ;(callback (*metro* (+ beat (* .6 dur))) 'bassline (+ beat dur) dur) 111 | )) 112 | 113 | (bassline (*metro* 'get-beat 1) 1) 114 | 115 | 116 | ;;;;; drums 117 | 118 | 119 | 120 | (define kick 121 | (lambda (beat dur) 122 | (if (= (modulo beat 3) 0) 123 | (play edrums 13 140 dur)) 124 | ;(callback (*metro* (+ beat (* .5 dur))) 'kick (+ beat dur) dur) 125 | )) 126 | 127 | 128 | (kick (*metro* 'get-beat 1) 1) 129 | 130 | (define kick2 131 | (lambda (beat dur) 132 | ; (if (= (modulo beat 1) 0) 133 | (play edrums 18 (wave 80 100 (random '(5/2 4/3))) dur) 134 | ;(callback (*metro* (+ beat (* .5 dur))) 'kick2 (+ beat dur) dur) 135 | )) 136 | 137 | 138 | (kick2 (*metro* 'get-beat 1) 1/4) 139 | 140 | (define snare 141 | (lambda (beat dur) 142 | (if (or (= (modulo beat 3/4) 1/4) (= (modulo beat (random 3 8)) 2/2)) 143 | (play edrums (random '(40 41 46)) (wave 80 120 (random '(7/2 4/7))) 1)) 144 | ; (callback (*metro* (+ beat (* .5 dur))) 'snare (+ beat dur) dur) 145 | )) 146 | 147 | (snare (*metro* 'get-beat 1) 1/4) 148 | 149 | (define snare2 150 | (lambda (beat dur) 151 | (if (= (modulo beat 1/2) 1/4) 152 | (play edrums (random '(47 44 46)) (wave 60 100 5/4) 1)) 153 | ;(callback (*metro* (+ beat (* .5 dur))) 'snare2 (+ beat dur) 1/8) 154 | )) 155 | 156 | (snare2 (*metro* 'get-beat 1) 1/4) 157 | 158 | (define hihats 159 | (lambda (beat dur) 160 | (play edrums (random '( 20 21 22)) (wave 70 80 2) dur) 161 | ;callback (*metro* (+ beat (* .5 dur))) 'hihats (+ beat dur) dur) 162 | )) 163 | 164 | (hihats (*metro* 'get-beat 1) 1/2) 165 | 166 | (define hihats2 167 | (lambda (beat dur) 168 | (play edrums (random 21 21 22 23) (wave 80 110 1) dur) 169 | ;(callback (*metro* (+ beat (* .5 dur))) 'hihats2 (+ beat dur) dur) 170 | )) 171 | 172 | (hihats2 (*metro* 'get-beat 1) 1/4) 173 | 174 | (define ride 175 | (lambda (beat dur) 176 | (play drums (random '(30 30 30 31)) (random '(0 80)) 1) 177 | (callback (*metro* (+ beat (* .5 dur))) 'ride (+ beat dur) dur) 178 | )) 179 | 180 | (ride (*metro* 'get-beat 1) 1/4) 181 | 182 | (define toms 183 | (lambda (beat dur) 184 | (if (= (modulo beat 1) 0) 185 | (play drums (random '(11 12 13 14)) (random '(0 0 90)) dur)) 186 | (callback (*metro* (+ beat (* .5 dur))) 'toms (+ beat dur) dur) 187 | )) 188 | 189 | 190 | (toms (*metro* 'get-beat 1) 1) 191 | 192 | 193 | ;;percussion 194 | 195 | (define perc1 196 | (lambda (beat dur) 197 | (if (< (modulo beat 5) 3) 198 | (play conga (wave 12 17 5/2) (wave 70 100 5) dur)) 199 | (callback (*metro* (+ beat (* .5 dur))) 'perc1 (+ beat dur) dur) 200 | )) 201 | 202 | 203 | (perc1 (*metro* 'get-beat 1) 1/4) 204 | 205 | 206 | 207 | (define perc2 208 | (lambda (beat dur) 209 | ;(if (or (= (modulo beat 1) 0) (= (modulo beat 2) 1) (= (modulo beat 3) 2)) 210 | (play djembe (random '(12 13 14 15)) (wave 70 100 (random '(3/4 5/2)) dur)) 211 | ;(callback (*metro* (+ beat (* .5 dur))) 'perc2 (+ beat dur) dur) 212 | )) 213 | 214 | 215 | (perc2 (*metro* 'get-beat 1) 1/2) 216 | 217 | (define bells 218 | (lambda (beat dur) 219 | ; (play drums (if (< (modulo beat 3) 2) 36 41) 80 dur) 220 | (callback (*metro* (+ beat (* .5 dur))) 'bells (+ beat dur) dur) 221 | )) 222 | 223 | 224 | (bells (*metro* 'get-beat 1) 1) 225 | 226 | (define guimbard 227 | (lambda (beat dur) 228 | (if (or (= (modulo beat 8) 0) (= (modulo beat 4) 1/2) (= (modulo beat 16) 7/4)) 229 | ;(play jawharp (random 10 17) (wave 70 90 2) dur) 230 | (play jawharp (random 17 21) (wave 70 90 3) dur)) 231 | ; (callback (*metro* (+ beat (* .5 dur))) 'guimbard (+ beat dur) dur) 232 | )) 233 | 234 | 235 | (guimbard (*metro* 'get-beat 1) 1/4) 236 | 237 | 238 | (scale) 239 | 240 | 241 | -------------------------------------------------------------------------------- /LCADsetup2.xtm.scm: -------------------------------------------------------------------------------- 1 | ;;;; Much of the content in this file is taken from various Extempore 2 | ;;;; blog posts by Ben Swift which are indexed here: 3 | ;;;; http://benswift.me/extempore-docs/index.html 4 | ;;;; 5 | 6 | ;;; Load the needed libraries -- this will take several minutes 7 | ;;; 8 | (sys:load "libs/core/instruments.xtm") 9 | (sys:load "libs/core/pc_ivl.xtm") 10 | (sys:load "libs/external/instruments_ext.xtm") 11 | 12 | ;;; Set up the constants we're going to need 13 | ;;; 14 | (define sample-path "/Users/jasonlevine/Code/extempore/LCAD/") 15 | (define drum-path (string-append sample-path "salamander/OH/")) 16 | (define conga-path (string-append sample-path "Conga/")) 17 | (define djembe-path (string-append sample-path "Djembe/")) 18 | (define jawharp-path (string-append sample-path "Jaw_Harp/")) 19 | (define piano-regex "^.*([ABCDEFG][#b]?[0-9])v([0-9]+)\.wav$") 20 | 21 | ;;; Add the samplers/instruments we're going to need to the dsp output 22 | ;;; callback 23 | ;;; 24 | (define-sampler drums sampler_note_hermite_c sampler_fx) 25 | (define-sampler conga sampler_note_hermite_c sampler_fx) 26 | (define-sampler djembe sampler_note_hermite_c sampler_fx) 27 | (define-sampler jawharp sampler_note_hermite_c sampler_fx) 28 | 29 | (define-sampler piano sampler_note_hermite_c sampler_fx) 30 | (define-instrument fuzzbass fuzz_bass_note_c fuzz_bass_fx) 31 | (define-instrument fmsynth fmsynth_note_c fmsynth_fx) 32 | 33 | (bind-func dsp:DSP 34 | (lambda (in time chan dat) 35 | (cond ((< chan 2.0) 36 | (+ (drums in time chan dat) 37 | (conga in time chan dat) 38 | (djembe in time chan dat) 39 | (jawharp in time chan dat) 40 | (piano in time chan dat) 41 | (fmsynth in time chan dat) 42 | )) 43 | (else 0.0)))) 44 | 45 | (dsp:set! dsp) 46 | 47 | ;;; Set up drum samples 48 | ;;; 49 | (define add-drum-sample 50 | (lambda (file-name const-name) 51 | (set-sampler-index drums 52 | (string-append drum-path file-name) 53 | const-name 54 | 0 0 0 1))) 55 | 56 | (define drum-sample-data 57 | (list 58 | (list "kick_OH_F_9.wav" 10) 59 | (list "kick2_OH_F_9.wav" 11) 60 | (list "loTom_OH_FF_8.wav" 12) 61 | (list "hiTom_OH_FF_6.wav" 13) 62 | (list "hihatClosed_OH_F_20.wav" 20) 63 | (list "hihatFoot_OH_MP_12.wav" 22) 64 | (list "hihatOpen_OH_FF_6.wav" 23) 65 | (list "hihatSemiOpen1_OH_F_1.wav" 24) 66 | (list "ride1_OH_MP_7.wav" 30) 67 | (list "ride1Bell_OH_F_6.wav" 31) 68 | (list "ride2_OH_FF_5.wav" 32) 69 | (list "ride2Bell_OH_F_6.wav" 33) 70 | (list "ride2Crash_OH_MP_2.wav" 34) 71 | (list "ride2CrashChoke_OH_F_1.wav" 35) 72 | (list "cowbell_FF_6.wav" 36) 73 | (list "bellchime_F_3.wav" 37) 74 | (list "snare_OH_FF_1.wav" 40) 75 | (list "snare_OH_Ghost_1.wav" 41) 76 | (list "snareOFF_OH_P_6.wav" 42) 77 | (list "snare2_OH_FF_8.wav" 43) 78 | (list "snare2_OH_Ghost_1.wav" 44) 79 | (list "snare2OFF_OH_P_6.wav" 45) 80 | (list "snareStick_OH_F_1.wav" 46))) 81 | 82 | 83 | (play-note (now) drums 37 180 44100) 84 | 85 | (define add-drum-samples 86 | (lambda (data) 87 | (map (lambda (sample-pair) 88 | (add-drum-sample (car sample-pair) (cadr sample-pair))) 89 | data))) 90 | 91 | (add-drum-samples drum-sample-data) 92 | 93 | 94 | ;;conga 95 | (define add-conga-sample 96 | (lambda (file-name const-name) 97 | (set-sampler-index conga 98 | (string-append conga-path file-name) 99 | const-name 100 | 0 0 0 1))) 101 | 102 | (define conga-sample-data 103 | (list 104 | (list "Single_Hit_01.wav" 10) 105 | (list "Single_Hit_02.wav" 11) 106 | (list "Single_Hit_03.wav" 12) 107 | (list "Single_Hit_04.wav" 13) 108 | (list "Single_Hit_05.wav" 14) 109 | (list "Single_Hit_06.wav" 15) 110 | (list "Single_Hit_07.wav" 16) 111 | (list "Single_Hit_08.wav" 17) 112 | (list "Single_Hit_09.wav" 18) 113 | (list "Single_Hit_10.wav" 19) 114 | (list "Single_Hit_11.wav" 20) 115 | (list "Single_Hit_12.wav" 21) 116 | (list "Single_Hit_13.wav" 22) 117 | (list "Single_Hit_14.wav" 23) 118 | (list "Single_Hit_15.wav" 24))) 119 | 120 | 121 | 122 | (play-note (now) conga 24 180 44100) 123 | 124 | (define add-conga-samples 125 | (lambda (data) 126 | (map (lambda (sample-pair) 127 | (add-conga-sample (car sample-pair) (cadr sample-pair))) 128 | data))) 129 | 130 | (add-conga-samples conga-sample-data) 131 | 132 | ;;djembe 133 | 134 | (define add-djembe-sample 135 | (lambda (file-name const-name) 136 | (set-sampler-index djembe 137 | (string-append djembe-path file-name) 138 | const-name 139 | 0 0 0 1))) 140 | 141 | (define djembe-sample-data 142 | (list 143 | (list "Djembe_SingleHit01.wav" 10) 144 | (list "Djembe_SingleHit02.wav" 11) 145 | (list "Djembe_SingleHit03.wav" 12) 146 | (list "Djembe_SingleHit04.wav" 13) 147 | (list "Djembe_SingleHit05.wav" 14) 148 | (list "Djembe_SingleHit06.wav" 15))) 149 | 150 | 151 | 152 | (play-note (now) djembe 10 180 44100) 153 | 154 | (define add-djembe-samples 155 | (lambda (data) 156 | (map (lambda (sample-pair) 157 | (add-djembe-sample (car sample-pair) (cadr sample-pair))) 158 | data))) 159 | 160 | (add-djembe-samples djembe-sample-data) 161 | 162 | ;;jawharp 163 | (define add-jawharp-sample 164 | (lambda (file-name const-name) 165 | (set-sampler-index jawharp 166 | (string-append jawharp-path file-name) 167 | const-name 168 | 0 0 0 1))) 169 | 170 | (define jawharp-sample-data 171 | (list 172 | (list "Jaw_Harp_Hit_01.wav" 10) 173 | (list "Jaw_Harp_Hit_02.wav" 11) 174 | (list "Jaw_Harp_Hit_03.wav" 12) 175 | (list "Jaw_Harp_Hit_04.wav" 13) 176 | (list "Jaw_Harp_Hit_05.wav" 14) 177 | (list "Jaw_Harp_Hit_06.wav" 15) 178 | (list "Jaw_Harp_Hit_07.wav" 16) 179 | (list "Jaw_Harp_Hit_08.wav" 17) 180 | (list "Jaw_Harp_Hit_09.wav" 18) 181 | (list "Jaw_Harp_Hit_10.wav" 19) 182 | (list "Jaw_Harp_Hit_11.wav" 20) 183 | (list "Jaw_Harp_Hit_12.wav" 21) 184 | (list "Jaw_Harp_Hit_13.wav" 22) 185 | (list "Jaw_Harp_Hit_14.wav" 23) 186 | (list "Jaw_Harp_Hit_15.wav" 24) 187 | (list "Jaw_Harp_Hit_16.wav" 25) 188 | (list "Jaw_Harp_Hit_17.wav" 26) 189 | (list "Jaw_Harp_Hit_18.wav" 27) 190 | (list "Jaw_Harp_Hit_19.wav" 28) 191 | (list "Jaw_Harp_Hit_20.wav" 29) 192 | (list "Jaw_Harp_Hit_21.wav" 30))) 193 | 194 | 195 | 196 | (play-note (now) jawharp 30 180 44100) 197 | 198 | (define add-jawharp-samples 199 | (lambda (data) 200 | (map (lambda (sample-pair) 201 | (add-jawharp-sample (car sample-pair) (cadr sample-pair))) 202 | data))) 203 | 204 | (add-jawharp-samples jawharp-sample-data) 205 | 206 | 207 | ;;; Set up piano samples 208 | ;;; 209 | (define parse-salamander-piano 210 | (lambda (file-list) 211 | (map (lambda (fname) 212 | (let ((result (regex:matched fname piano-regex))) 213 | (if (null? result) 214 | #f 215 | ;; load 4th velocity layer only 216 | (if (= (string->number (caddr result)) 4) 217 | (list fname 218 | (note-name-to-midi-number (cadr result)) 219 | 0 220 | 0) 221 | #f)))) 222 | file-list))) 223 | 224 | (load-sampler 225 | piano 226 | ;; Can't use a variable here; need the actual path string 227 | "/Users/jasonlevine/Code/extempore/LCAD/salamander/SalamanderGrandPianoV3_44.1khz16bit/44.1khz16bit" 228 | ;; 'sound bank' index 229 | 0 230 | parse-salamander-piano) 231 | 232 | ;; Now that everything is loaded, try out some notes ... 233 | (play-note (now) drums 14 70 44100) 234 | (play-note (now) drums *gm-open-hi-hat* 140 44100) 235 | (play-note (now) piano 24 180 44100) 236 | (play-note (now) drums *gm-snare* 180 44100) 237 | (play-note (now) fuzzbass (random 40 50) 10 (* 1.0 *second*)) 238 | -------------------------------------------------------------------------------- /LCADsetup.xtm.scm: -------------------------------------------------------------------------------- 1 | ;;;; Much of the content in this file is taken from various Extempore 2 | ;;;; blog posts by Ben Swift which are indexed here: 3 | ;;;; http://benswift.me/extempore-docs/index.html 4 | ;;;; 5 | 6 | ;;; Load the needed libraries -- this will take several minutes 7 | ;;; 8 | (sys:load "libs/core/instruments.xtm") 9 | (sys:load "libs/core/pc_ivl.xtm") 10 | (sys:load "libs/external/instruments_ext.xtm") 11 | 12 | ;;; Set up the constants we're going to need 13 | ;;; 14 | (define sample-path "/Users/jasonlevine/Code/extempore/LCAD/") 15 | (define drum-path (string-append sample-path "salamander/OH/")) 16 | (define conga-path (string-append sample-path "Conga/")) 17 | (define djembe-path (string-append sample-path "Djembe/")) 18 | (define jawharp-path (string-append sample-path "Jaw_Harp/")) 19 | (define piano-regex "^.*([ABCDEFG][#b]?[0-9])v([0-9]+)\.wav$") 20 | 21 | ;;; Add the samplers/instruments we're going to need to the dsp output 22 | ;;; callback 23 | ;;; 24 | (define-sampler drums sampler_note_hermite_c sampler_fx) 25 | (define-sampler conga sampler_note_hermite_c sampler_fx) 26 | (define-sampler djembe sampler_note_hermite_c sampler_fx) 27 | (define-sampler jawharp sampler_note_hermite_c sampler_fx) 28 | 29 | (define-sampler piano sampler_note_hermite_c sampler_fx) 30 | (define-instrument fuzzbass fuzz_bass_note_c fuzz_bass_fx) 31 | (define-instrument fmsynth fmsynth_note_c fmsynth_fx) 32 | 33 | (bind-func dsp:DSP 34 | (lambda (in time chan dat) 35 | (cond ((< chan 2.0) 36 | (+ (drums in time chan dat) 37 | (conga in time chan dat) 38 | (djembe in time chan dat) 39 | (jawharp in time chan dat) 40 | (piano in time chan dat) 41 | (* 0.1 (fuzzbass in time chan dat)) 42 | (fmsynth in time chan dat))) 43 | (else 0.0)))) 44 | 45 | (dsp:set! dsp) 46 | 47 | ;;; Set up drum samples 48 | ;;; 49 | (define add-drum-sample 50 | (lambda (file-name const-name) 51 | (set-sampler-index drums 52 | (string-append drum-path file-name) 53 | const-name 54 | 0 0 0 1))) 55 | 56 | (define drum-sample-data 57 | (list 58 | (list "kick_OH_F_9.wav" 10) 59 | (list "kick2_OH_F_9.wav" 11) 60 | (list "loTom_OH_FF_8.wav" 12) 61 | (list "hiTom_OH_FF_6.wav" 13) 62 | (list "hihatClosed_OH_F_20.wav" 20) 63 | (list "hihatFoot_OH_MP_12.wav" 22) 64 | (list "hihatOpen_OH_FF_6.wav" 23) 65 | (list "hihatSemiOpen1_OH_F_1.wav" 24) 66 | (list "ride1_OH_MP_7.wav" 30) 67 | (list "ride1Bell_OH_F_6.wav" 31) 68 | (list "ride2_OH_FF_5.wav" 32) 69 | (list "ride2Bell_OH_F_6.wav" 33) 70 | (list "ride2Crash_OH_MP_2.wav" 34) 71 | (list "ride2CrashChoke_OH_F_1.wav" 35) 72 | (list "cowbell_FF_6.wav" 36) 73 | (list "bellchime_F_3.wav" 37) 74 | (list "snare_OH_FF_1.wav" 40) 75 | (list "snare_OH_Ghost_1.wav" 41) 76 | (list "snareOFF_OH_P_6.wav" 42) 77 | (list "snare2_OH_FF_8.wav" 43) 78 | (list "snare2_OH_Ghost_1.wav" 44) 79 | (list "snare2OFF_OH_P_6.wav" 45) 80 | (list "snareStick_OH_F_1.wav" 46))) 81 | 82 | 83 | (play-note (now) drums 37 180 44100) 84 | 85 | (define add-drum-samples 86 | (lambda (data) 87 | (map (lambda (sample-pair) 88 | (add-drum-sample (car sample-pair) (cadr sample-pair))) 89 | data))) 90 | 91 | (add-drum-samples drum-sample-data) 92 | 93 | 94 | ;;conga 95 | (define add-conga-sample 96 | (lambda (file-name const-name) 97 | (set-sampler-index conga 98 | (string-append conga-path file-name) 99 | const-name 100 | 0 0 0 1))) 101 | 102 | (define conga-sample-data 103 | (list 104 | (list "Single_Hit_01.wav" 10) 105 | (list "Single_Hit_02.wav" 11) 106 | (list "Single_Hit_03.wav" 12) 107 | (list "Single_Hit_04.wav" 13) 108 | (list "Single_Hit_05.wav" 14) 109 | (list "Single_Hit_06.wav" 15) 110 | (list "Single_Hit_07.wav" 16) 111 | (list "Single_Hit_08.wav" 17) 112 | (list "Single_Hit_09.wav" 18) 113 | (list "Single_Hit_10.wav" 19) 114 | (list "Single_Hit_11.wav" 20) 115 | (list "Single_Hit_12.wav" 21) 116 | (list "Single_Hit_13.wav" 22) 117 | (list "Single_Hit_14.wav" 23) 118 | (list "Single_Hit_15.wav" 24))) 119 | 120 | 121 | 122 | (play-note (now) conga 24 180 44100) 123 | 124 | (define add-conga-samples 125 | (lambda (data) 126 | (map (lambda (sample-pair) 127 | (add-conga-sample (car sample-pair) (cadr sample-pair))) 128 | data))) 129 | 130 | (add-conga-samples conga-sample-data) 131 | 132 | ;;djembe 133 | 134 | (define add-djembe-sample 135 | (lambda (file-name const-name) 136 | (set-sampler-index djembe 137 | (string-append djembe-path file-name) 138 | const-name 139 | 0 0 0 1))) 140 | 141 | (define djembe-sample-data 142 | (list 143 | (list "Djembe_SingleHit01.wav" 10) 144 | (list "Djembe_SingleHit02.wav" 11) 145 | (list "Djembe_SingleHit03.wav" 12) 146 | (list "Djembe_SingleHit04.wav" 13) 147 | (list "Djembe_SingleHit05.wav" 14) 148 | (list "Djembe_SingleHit06.wav" 15))) 149 | 150 | 151 | 152 | (play-note (now) djembe 10 180 44100) 153 | 154 | (define add-djembe-samples 155 | (lambda (data) 156 | (map (lambda (sample-pair) 157 | (add-djembe-sample (car sample-pair) (cadr sample-pair))) 158 | data))) 159 | 160 | (add-djembe-samples djembe-sample-data) 161 | 162 | ;;jawharp 163 | (define add-jawharp-sample 164 | (lambda (file-name const-name) 165 | (set-sampler-index jawharp 166 | (string-append jawharp-path file-name) 167 | const-name 168 | 0 0 0 1))) 169 | 170 | (define jawharp-sample-data 171 | (list 172 | (list "Jaw_Harp_Hit_01.wav" 10) 173 | (list "Jaw_Harp_Hit_02.wav" 11) 174 | (list "Jaw_Harp_Hit_03.wav" 12) 175 | (list "Jaw_Harp_Hit_04.wav" 13) 176 | (list "Jaw_Harp_Hit_05.wav" 14) 177 | (list "Jaw_Harp_Hit_06.wav" 15) 178 | (list "Jaw_Harp_Hit_07.wav" 16) 179 | (list "Jaw_Harp_Hit_08.wav" 17) 180 | (list "Jaw_Harp_Hit_09.wav" 18) 181 | (list "Jaw_Harp_Hit_10.wav" 19) 182 | (list "Jaw_Harp_Hit_11.wav" 20) 183 | (list "Jaw_Harp_Hit_12.wav" 21) 184 | (list "Jaw_Harp_Hit_13.wav" 22) 185 | (list "Jaw_Harp_Hit_14.wav" 23) 186 | (list "Jaw_Harp_Hit_15.wav" 24) 187 | (list "Jaw_Harp_Hit_16.wav" 25) 188 | (list "Jaw_Harp_Hit_17.wav" 26) 189 | (list "Jaw_Harp_Hit_18.wav" 27) 190 | (list "Jaw_Harp_Hit_19.wav" 28) 191 | (list "Jaw_Harp_Hit_20.wav" 29) 192 | (list "Jaw_Harp_Hit_21.wav" 30))) 193 | 194 | 195 | 196 | (play-note (now) jawharp 30 180 44100) 197 | 198 | (define add-jawharp-samples 199 | (lambda (data) 200 | (map (lambda (sample-pair) 201 | (add-jawharp-sample (car sample-pair) (cadr sample-pair))) 202 | data))) 203 | 204 | (add-jawharp-samples jawharp-sample-data) 205 | 206 | 207 | ;;; Set up piano samples 208 | ;;; 209 | (define parse-salamander-piano 210 | (lambda (file-list) 211 | (map (lambda (fname) 212 | (let ((result (regex:matched fname piano-regex))) 213 | (if (null? result) 214 | #f 215 | ;; load 4th velocity layer only 216 | (if (= (string->number (caddr result)) 4) 217 | (list fname 218 | (note-name-to-midi-number (cadr result)) 219 | 0 220 | 0) 221 | #f)))) 222 | file-list))) 223 | 224 | (load-sampler 225 | piano 226 | ;; Can't use a variable here; need the actual path string 227 | "/Users/jasonlevine/Code/extempore/LCAD/salamander/SalamanderGrandPianoV3_44.1khz16bit/44.1khz16bit" 228 | ;; 'sound bank' index 229 | 0 230 | parse-salamander-piano) 231 | 232 | ;; Now that everything is loaded, try out some notes ... 233 | (play-note (now) drums 11 70 44100) 234 | (play-note (now) drums *gm-open-hi-hat* 140 44100) 235 | (play-note (now) piano 24 180 44100) 236 | (play-note (now) drums *gm-snare* 180 44100) 237 | (play-note (now) fuzzbass (random 40 50) 60 (* 1.0 *second*)) 238 | -------------------------------------------------------------------------------- /LCADsetup3.xtm.scm: -------------------------------------------------------------------------------- 1 | ;;;; Much of the content in this file is taken from various Extempore 2 | ;;;; blog posts by Ben Swift which are indexed here: 3 | ;;;; http://benswift.me/extempore-docs/index.html 4 | ;;;; 5 | 6 | ;;; Load the needed libraries -- this will take several minutes 7 | ;;; 8 | (sys:load "libs/core/instruments.xtm") 9 | (sys:load "libs/core/pc_ivl.xtm") 10 | (sys:load "libs/external/instruments_ext.xtm") 11 | 12 | ;;; Set up the constants we're going to need 13 | ;;; 14 | (define sample-path "/Users/jasonlevine/Code/extempore/LCAD/") 15 | (define drum-path (string-append sample-path "salamander/OH/")) 16 | (define conga-path (string-append sample-path "Conga/")) 17 | (define djembe-path (string-append sample-path "Djembe/")) 18 | (define jawharp-path (string-append sample-path "Jaw_Harp/")) 19 | (define piano-regex "^.*([ABCDEFG][#b]?[0-9])v([0-9]+)\.wav$") 20 | 21 | ;;; Add the samplers/instruments we're going to need to the dsp output 22 | ;;; callback 23 | ;;; 24 | (define-sampler drums sampler_note_hermite_c sampler_fx) 25 | (define-sampler conga sampler_note_hermite_c sampler_fx) 26 | (define-sampler djembe sampler_note_hermite_c sampler_fx) 27 | (define-sampler jawharp sampler_note_hermite_c sampler_fx) 28 | 29 | (define-sampler piano sampler_note_hermite_c sampler_fx) 30 | (define-instrument fuzzbass fuzz_bass_note_c fuzz_bass_fx) 31 | (define-instrument fmsynth fmsynth_note_c fmsynth_fx) 32 | 33 | (bind-func dsp:DSP 34 | (lambda (in time chan dat) 35 | (cond ((< chan 2.0) 36 | (+ (drums in time chan dat) 37 | (conga in time chan dat) 38 | (djembe in time chan dat) 39 | (jawharp in time chan dat) 40 | (piano in time chan dat) 41 | (* 0.1 (fuzzbass in time chan dat)) 42 | (fmsynth in time chan dat))) 43 | (else 0.0)))) 44 | 45 | (dsp:set! dsp) 46 | 47 | ;;; Set up drum samples 48 | ;;; 49 | (define add-drum-sample 50 | (lambda (file-name const-name) 51 | (set-sampler-index drums 52 | (string-append drum-path file-name) 53 | const-name 54 | 0 0 0 1))) 55 | 56 | (define drum-sample-data 57 | (list 58 | (list "kick_OH_F_9.wav" 10) 59 | (list "kick2_OH_F_9.wav" 11) 60 | (list "loTom_OH_FF_8.wav" 12) 61 | (list "hiTom_OH_FF_6.wav" 13) 62 | (list "hihatClosed_OH_F_20.wav" 20) 63 | (list "hihatFoot_OH_MP_12.wav" 22) 64 | (list "hihatOpen_OH_FF_6.wav" 23) 65 | (list "hihatSemiOpen1_OH_F_1.wav" 24) 66 | (list "ride1_OH_MP_7.wav" 30) 67 | (list "ride1Bell_OH_F_6.wav" 31) 68 | (list "ride2_OH_FF_5.wav" 32) 69 | (list "ride2Bell_OH_F_6.wav" 33) 70 | (list "ride2Crash_OH_MP_2.wav" 34) 71 | (list "ride2CrashChoke_OH_F_1.wav" 35) 72 | (list "cowbell_FF_6.wav" 36) 73 | (list "bellchime_F_3.wav" 37) 74 | (list "snare_OH_FF_1.wav" 40) 75 | (list "snare_OH_Ghost_1.wav" 41) 76 | (list "snareOFF_OH_P_6.wav" 42) 77 | (list "snare2_OH_FF_8.wav" 43) 78 | (list "snare2_OH_Ghost_1.wav" 44) 79 | (list "snare2OFF_OH_P_6.wav" 45) 80 | (list "snareStick_OH_F_1.wav" 46))) 81 | 82 | 83 | (play-note (now) drums 37 180 44100) 84 | 85 | (define add-drum-samples 86 | (lambda (data) 87 | (map (lambda (sample-pair) 88 | (add-drum-sample (car sample-pair) (cadr sample-pair))) 89 | data))) 90 | 91 | (add-drum-samples drum-sample-data) 92 | 93 | 94 | ;;conga 95 | (define add-conga-sample 96 | (lambda (file-name const-name) 97 | (set-sampler-index conga 98 | (string-append conga-path file-name) 99 | const-name 100 | 0 0 0 1))) 101 | 102 | (define conga-sample-data 103 | (list 104 | (list "Single_Hit_01.wav" 10) 105 | (list "Single_Hit_02.wav" 11) 106 | (list "Single_Hit_03.wav" 12) 107 | (list "Single_Hit_04.wav" 13) 108 | (list "Single_Hit_05.wav" 14) 109 | (list "Single_Hit_06.wav" 15) 110 | (list "Single_Hit_07.wav" 16) 111 | (list "Single_Hit_08.wav" 17) 112 | (list "Single_Hit_09.wav" 18) 113 | (list "Single_Hit_10.wav" 19) 114 | (list "Single_Hit_11.wav" 20) 115 | (list "Single_Hit_12.wav" 21) 116 | (list "Single_Hit_13.wav" 22) 117 | (list "Single_Hit_14.wav" 23) 118 | (list "Single_Hit_15.wav" 24))) 119 | 120 | 121 | 122 | (play-note (now) conga 24 180 44100) 123 | 124 | (define add-conga-samples 125 | (lambda (data) 126 | (map (lambda (sample-pair) 127 | (add-conga-sample (car sample-pair) (cadr sample-pair))) 128 | data))) 129 | 130 | (add-conga-samples conga-sample-data) 131 | 132 | ;;djembe 133 | 134 | (define add-djembe-sample 135 | (lambda (file-name const-name) 136 | (set-sampler-index djembe 137 | (string-append djembe-path file-name) 138 | const-name 139 | 0 0 0 1))) 140 | 141 | (define djembe-sample-data 142 | (list 143 | (list "Djembe_SingleHit01.wav" 10) 144 | (list "Djembe_SingleHit02.wav" 11) 145 | (list "Djembe_SingleHit03.wav" 12) 146 | (list "Djembe_SingleHit04.wav" 13) 147 | (list "Djembe_SingleHit05.wav" 14) 148 | (list "Djembe_SingleHit06.wav" 15))) 149 | 150 | 151 | 152 | (play-note (now) djembe 10 180 44100) 153 | 154 | (define add-djembe-samples 155 | (lambda (data) 156 | (map (lambda (sample-pair) 157 | (add-djembe-sample (car sample-pair) (cadr sample-pair))) 158 | data))) 159 | 160 | (add-djembe-samples djembe-sample-data) 161 | 162 | ;;jawharp 163 | (define add-jawharp-sample 164 | (lambda (file-name const-name) 165 | (set-sampler-index jawharp 166 | (string-append jawharp-path file-name) 167 | const-name 168 | 0 0 0 1))) 169 | 170 | (define jawharp-sample-data 171 | (list 172 | (list "Jaw_Harp_Hit_01.wav" 10) 173 | (list "Jaw_Harp_Hit_02.wav" 11) 174 | (list "Jaw_Harp_Hit_03.wav" 12) 175 | (list "Jaw_Harp_Hit_04.wav" 13) 176 | (list "Jaw_Harp_Hit_05.wav" 14) 177 | (list "Jaw_Harp_Hit_06.wav" 15) 178 | (list "Jaw_Harp_Hit_07.wav" 16) 179 | (list "Jaw_Harp_Hit_08.wav" 17) 180 | (list "Jaw_Harp_Hit_09.wav" 18) 181 | (list "Jaw_Harp_Hit_10.wav" 19) 182 | (list "Jaw_Harp_Hit_11.wav" 20) 183 | (list "Jaw_Harp_Hit_12.wav" 21) 184 | (list "Jaw_Harp_Hit_13.wav" 22) 185 | (list "Jaw_Harp_Hit_14.wav" 23) 186 | (list "Jaw_Harp_Hit_15.wav" 24) 187 | (list "Jaw_Harp_Hit_16.wav" 25) 188 | (list "Jaw_Harp_Hit_17.wav" 26) 189 | (list "Jaw_Harp_Hit_18.wav" 27) 190 | (list "Jaw_Harp_Hit_19.wav" 28) 191 | (list "Jaw_Harp_Hit_20.wav" 29) 192 | (list "Jaw_Harp_Hit_21.wav" 30))) 193 | 194 | 195 | 196 | (play-note (now) jawharp 30 180 44100) 197 | 198 | (define add-jawharp-samples 199 | (lambda (data) 200 | (map (lambda (sample-pair) 201 | (add-jawharp-sample (car sample-pair) (cadr sample-pair))) 202 | data))) 203 | 204 | (add-jawharp-samples jawharp-sample-data) 205 | 206 | 207 | ;;; Set up piano samples 208 | ;;; 209 | (define parse-salamander-piano 210 | (lambda (file-list) 211 | (map (lambda (fname) 212 | (let ((result (regex:matched fname piano-regex))) 213 | (if (null? result) 214 | #f 215 | ;; load 4th velocity layer only 216 | (if (= (string->number (caddr result)) 4) 217 | (list fname 218 | (note-name-to-midi-number (cadr result)) 219 | 0 220 | 0) 221 | #f)))) 222 | file-list))) 223 | 224 | (load-sampler 225 | piano 226 | ;; Can't use a variable here; need the actual path string 227 | "/Users/jasonlevine/Code/extempore/LCAD/salamander/SalamanderGrandPianoV3_44.1khz16bit/44.1khz16bit" 228 | ;; 'sound bank' index 229 | 0 230 | parse-salamander-piano) 231 | 232 | ;; Now that everything is loaded, try out some notes ... 233 | (play-note (now) drums 11 70 44100) 234 | (play-note (now) drums *gm-open-hi-hat* 140 44100) 235 | (play-note (now) piano 24 180 44100) 236 | (play-note (now) drums *gm-snare* 180 44100) 237 | (play-note (now) fuzzbass (random 40 50) 60 (* 1.0 *second*)) 238 | -------------------------------------------------------------------------------- /vnoise.glsl: -------------------------------------------------------------------------------- 1 | Copyright NVIDIA Corporation 2002 2 | TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED 3 | *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS 4 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY 5 | AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS 6 | BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES 7 | WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, 8 | BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) 9 | ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS 10 | BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 11 | 12 | 13 | Comments: 14 | 15 | sgreen 5/02/02: 16 | 17 | This is based on Perlin's original code: 18 | http://mrl.nyu.edu/~perlin/doc/oscar.html 19 | 20 | It combines the permutation and gradient tables into one array of 21 | vec4's to conserve constant memory. 22 | The table is duplicated twice to avoid modulo operations. 23 | 24 | jallen@nvidia.com: 10/12/03: 25 | 26 | GLSL version of Cg vertex noise shader 27 | 28 | Notes: 29 | 30 | Should use separate tables for 1, 2 and 3D versions 31 | 32 | ******************************************************************************/ 33 | 34 | #define B 32 // table size 35 | #define B2 66 // B*2 + 2 36 | #define BR 0.03125 // 1 / B 37 | 38 | // this is the smoothstep function f(t) = 3t^2 - 2t^3, without the normalization 39 | vec3 s_curve(vec3 t) 40 | { 41 | return t*t*( vec3(3.0, 3.0, 3.0) - vec3(2.0, 2.0, 2.0)*t); 42 | } 43 | 44 | vec2 s_curve(vec2 t) 45 | { 46 | return t*t*( vec2(3.0, 3.0) - vec2(2.0, 2.0)*t); 47 | } 48 | 49 | float s_curve(float t) 50 | { 51 | return t*t*(3.0-2.0*t); 52 | } 53 | 54 | // 3D version 55 | float noise(vec3 v, vec4 pg[]) 56 | { 57 | v = v + vec3(10000.0, 10000.0, 10000.0); // hack to avoid negative numbers 58 | 59 | vec3 i = fract(v * BR) * float(B); // index between 0 and B-1 60 | vec3 f = fract(v); // fractional position 61 | 62 | // lookup in permutation table 63 | vec2 p; 64 | p.x = pg[ int(i[0]) ].w; 65 | p.y = pg[ int(i[0]) + 1 ].w; 66 | p = p + i[1]; 67 | 68 | vec4 b; 69 | b.x = pg[ int(p[0]) ].w; 70 | b.y = pg[ int(p[1]) ].w; 71 | b.z = pg[ int(p[0]) + 1 ].w; 72 | b.w = pg[ int(p[1]) + 1 ].w; 73 | b = b + i[2]; 74 | 75 | // compute dot products between gradients and vectors 76 | vec4 r; 77 | r[0] = dot( pg[ int(b[0]) ].xyz, f ); 78 | r[1] = dot( pg[ int(b[1]) ].xyz, f - vec3(1.0, 0.0, 0.0) ); 79 | r[2] = dot( pg[ int(b[2]) ].xyz, f - vec3(0.0, 1.0, 0.0) ); 80 | r[3] = dot( pg[ int(b[3]) ].xyz, f - vec3(1.0, 1.0, 0.0) ); 81 | 82 | vec4 r1; 83 | r1[0] = dot( pg[ int(b[0]) + 1 ].xyz, f - vec3(0.0, 0.0, 1.0) ); 84 | r1[1] = dot( pg[ int(b[1]) + 1 ].xyz, f - vec3(1.0, 0.0, 1.0) ); 85 | r1[2] = dot( pg[ int(b[2]) + 1 ].xyz, f - vec3(0.0, 1.0, 1.0) ); 86 | r1[3] = dot( pg[ int(b[3]) + 1 ].xyz, f - vec3(1.0, 1.0, 1.0) ); 87 | 88 | // interpolate 89 | f = s_curve(f); 90 | r = mix( r, r1, f[2] ); 91 | r = mix( r.xyyy, r.zwww, f[1] ); 92 | return mix( r.x, r.y, f[0] ); 93 | } 94 | 95 | // 2D version 96 | float noise(vec2 v, vec4 pg[]) 97 | { 98 | v = v + vec2(10000.0, 10000.0); 99 | 100 | vec2 i = fract(v * BR) * float(B); // index between 0 and B-1 101 | vec2 f = fract(v); // fractional position 102 | 103 | // lookup in permutation table 104 | vec2 p; 105 | p[0] = pg[ int(i[0]) ].w; 106 | p[1] = pg[ int(i[0]) + 1 ].w; 107 | p = p + i[1]; 108 | 109 | // compute dot products between gradients and vectors 110 | vec4 r; 111 | r[0] = dot( pg[ int(p[0]) ].xy, f); 112 | r[1] = dot( pg[ int(p[1]) ].xy, f - vec2(1.0, 0.0) ); 113 | r[2] = dot( pg[ int(p[0]) + 1 ].xy, f - vec2(0.0, 1.0) ); 114 | r[3] = dot( pg[ int(p[1]) + 1 ].xy, f - vec2(1.0, 1.0) ); 115 | 116 | // interpolate 117 | f = s_curve(f); 118 | r = mix( r.xyyy, r.zwww, f[1] ); 119 | return mix( r.x, r.y, f[0] ); 120 | } 121 | 122 | // 1D version 123 | float noise(float v, vec4 pg[]) 124 | { 125 | v = v + 10000.0; 126 | 127 | float i = fract(v * BR) * float(B); // index between 0 and B-1 128 | float f = fract(v); // fractional position 129 | 130 | // compute dot products between gradients and vectors 131 | vec2 r; 132 | r[0] = pg[int(i)].x * f; 133 | r[1] = pg[int(i) + 1].x * (f - 1.0); 134 | 135 | // interpolate 136 | f = s_curve(f); 137 | return mix( r[0], r[1], f); 138 | } 139 | 140 | uniform float Displacement; 141 | uniform vec4 pg[B2]; // permutation/gradient table 142 | 143 | void main() 144 | { 145 | // Noise Table 146 | vec4 pg[B2]; 147 | nTab[0]=vec4(-0.569811,0.432591,-0.698699,0.0); nTab[1]=vec4(0.78118,0.163006,0.60265,1.0); 148 | nTab[2]=vec4(0.436394,-0.297978,0.848982,2.0); nTab[3]=vec4(0.843762,-0.185742,-0.503554,3.0); 149 | nTab[4]=vec4(0.663712,-0.68443,-0.301731,4.0); nTab[5]=vec4(0.616757,0.768825,0.168875,5.0); 150 | nTab[6]=vec4(0.457153,-0.884439,-0.093694,6.0); nTab[7]=vec4(-0.956955,0.110962,-0.268189,7.0); 151 | nTab[8]=vec4(0.115821,0.77523,0.620971,8.0); nTab[9]=vec4(-0.716028,-0.477247,-0.50945,9.0); 152 | nTab[10]=vec4(0.819593,-0.123834,0.559404,10.0); nTab[11]=vec4(-0.522782,-0.586534,0.618609,11.0); 153 | nTab[12]=vec4(-0.792328,-0.577495,-0.196765,12.0); nTab[13]=vec4(-0.674422,0.0572986,0.736119,13.0); 154 | nTab[14]=vec4(-0.224769,-0.764775,-0.60382,14.0); nTab[15]=vec4(0.492662,-0.71614,0.494396,15.0); 155 | nTab[16]=vec4(0.470993,-0.645816,0.600905,16.0); nTab[17]=vec4(-0.19049,0.321113,0.927685,17.0); 156 | nTab[18]=vec4(0.0122118,0.946426,-0.32269,18.0); nTab[19]=vec4(0.577419,0.408182,0.707089,19.0); 157 | nTab[20]=vec4(-0.0945428,0.341843,-0.934989,20.0); nTab[21]=vec4(0.788332,-0.60845,-0.0912217,21.0); 158 | nTab[22]=vec4(-0.346889,0.894997,-0.280445,22.0); nTab[23]=vec4(-0.165907,-0.649857,0.741728,23.0); 159 | nTab[24]=vec4(0.791885,0.124138,0.597919,24.0); nTab[25]=vec4(-0.625952,0.73148,0.270409,25.0); nTab[26]=vec4(-0.556306,0.580363,0.594729,26.0); nTab[27]=vec4(0.673523,0.719805,0.168069,27.0); 160 | nTab[28]=vec4(-0.420334,0.894265,0.153656,28.0); nTab[29]=vec4(-0.141622,-0.279389,0.949676,29.0); 161 | nTab[30]=vec4(-0.803343,0.458278,0.380291,30.0); nTab[31]=vec4(0.49355,-0.402088,0.77119,31.0); 162 | nTab[32]=vec4(-0.569811,0.432591,-0.698699,0.0); nTab[33]=vec4(0.78118,0.163006,0.60265,1.0); 163 | nTab[34]=vec4(0.436394,-0.297978,0.848982,2.0); nTab[35]=vec4(0.843762,-0.185742,-0.503554,3.0); 164 | nTab[36]=vec4(0.663712,-0.68443,-0.301731,4.0); nTab[37]=vec4(0.616757,0.768825,0.168875,5.0); 165 | nTab[38]=vec4(0.457153,-0.884439,-0.093694,6.0); nTab[39]=vec4(-0.956955,0.110962,-0.268189,7.0); 166 | nTab[40]=vec4(0.115821,0.77523,0.620971,8.0); nTab[41]=vec4(-0.716028,-0.477247,-0.50945,9.0); 167 | nTab[42]=vec4(0.819593,-0.123834,0.559404,10.0); nTab[43]=vec4(-0.522782,-0.586534,0.618609,11.0); 168 | nTab[44]=vec4(-0.792328,-0.577495,-0.196765,12.0); nTab[45]=vec4(-0.674422,0.0572986,0.736119,13.0); 169 | nTab[46]=vec4(-0.224769,-0.764775,-0.60382,14.0); nTab[47]=vec4(0.492662,-0.71614,0.494396,15.0); 170 | nTab[48]=vec4(0.470993,-0.645816,0.600905,16.0); nTab[49]=vec4(-0.19049,0.321113,0.927685,17.0); 171 | nTab[50]=vec4(0.0122118,0.946426,-0.32269,18.0); nTab[51]=vec4(0.577419,0.408182,0.707089,19.0); 172 | nTab[52]=vec4(-0.0945428,0.341843,-0.934989,20.0); nTab[53]=vec4(0.788332,-0.60845,-0.0912217,21.0); 173 | nTab[54]=vec4(-0.346889,0.894997,-0.280445,22.0); nTab[55]=vec4(-0.165907,-0.649857,0.741728,23.0); 174 | nTab[56]=vec4(0.791885,0.124138,0.597919,24.0); nTab[57]=vec4(-0.625952,0.73148,0.270409,25.0); 175 | nTab[58]=vec4(-0.556306,0.580363,0.594729,26.0); nTab[59]=vec4(0.673523,0.719805,0.168069,27.0); 176 | nTab[60]=vec4(-0.420334,0.894265,0.153656,28.0); nTab[61]=vec4(-0.141622,-0.279389,0.949676,29.0); 177 | nTab[62]=vec4(-0.803343,0.458278,0.380291,30.0); nTab[63]=vec4(0.49355,-0.402088,0.77119,31.0); 178 | nTab[64]=vec4(-0.569811,0.432591,-0.698699,0.0); nTab[65]=vec4(0.78118,0.163006,0.60265,1.0); 179 | 180 | 181 | 182 | vec4 noisePos = gl_TextureMatrix[0] * gl_Vertex; 183 | 184 | float i = (noise(noisePos.xyz, pg) + 1.0) * 0.5; 185 | gl_FrontColor = vec4(i, i, i, 1.0); 186 | 187 | // displacement along normal 188 | vec4 position = gl_Vertex + (vec4(gl_Normal, 1.0) * i * Displacement); 189 | position.w = 1.0; 190 | 191 | gl_Position = gl_ModelViewProjectionMatrix * position; 192 | } -------------------------------------------------------------------------------- /LCADsetup4.xtm.scm: -------------------------------------------------------------------------------- 1 | ;;;; Much of the content in this file is taken from various Extempore 2 | ;;;; blog posts by Ben Swift which are indexed here: 3 | ;;;; http://benswift.me/extempore-docs/index.html 4 | ;;;; 5 | 6 | ;;; Load the needed libraries -- this will take several minutes 7 | ;;; 8 | (sys:set-default-timeout (* 2 13953200)) 9 | (sys:load "libs/core/instruments.xtm") 10 | (sys:load "libs/core/pc_ivl.xtm") 11 | (sys:load "libs/external/instruments_ext.xtm") 12 | 13 | ;;; Set up the constants we're going to need 14 | ;;; 15 | (define sample-path "/Users/jasonlevine/Code/extempore/assets/") 16 | (define drum-path (string-append sample-path "salamander/OH/")) 17 | (define edrum-path (string-append sample-path "biolabsDubstepKit3/")) 18 | (define conga-path (string-append sample-path "Conga/")) 19 | (define djembe-path (string-append sample-path "Djembe/")) 20 | (define jawharp-path (string-append sample-path "Jaw_Harp/")) 21 | (define piano-regex "^.*([ABCDEFG][#b]?[0-9])v([0-9]+)\.wav$") 22 | 23 | 24 | ;;; Add the samplers/instruments we're going to need to the dsp output 25 | ;;; callback 26 | ;;; 27 | (define-sampler drums sampler_note_hermite_c sampler_fx) 28 | (define-sampler edrums sampler_note_hermite_c sampler_fx) 29 | (define-sampler conga sampler_note_hermite_c sampler_fx) 30 | (define-sampler djembe sampler_note_hermite_c sampler_fx) 31 | (define-sampler jawharp sampler_note_hermite_c sampler_fx) 32 | 33 | (define-sampler piano sampler_note_hermite_c sampler_fx) 34 | (define-sampler strings sampler_note_hermite_c sampler_fx) 35 | (define-instrument subbass subbass_note_c subbass_fx) 36 | (define-instrument fmsynth shimmer_pad_note_c shimmer_pad_fx) 37 | 38 | (bind-func dsp:DSP 39 | (lambda (in time chan dat) 40 | (cond ((< chan 2.0) 41 | (+ (drums in time chan dat) 42 | (edrums in time chan dat) 43 | (conga in time chan dat) 44 | (djembe in time chan dat) 45 | (strings in time chan dat) 46 | (piano in time chan dat) 47 | (subbass in time chan dat) 48 | (fmsynth in time chan dat))) 49 | (else 0.0)))) 50 | 51 | (dsp:set! dsp) 52 | 53 | ;;; Set up drum samples 54 | ;;; 55 | (define add-drum-sample 56 | (lambda (file-name const-name) 57 | (set-sampler-index drums 58 | (string-append drum-path file-name) 59 | const-name 60 | 0 0 0 1))) 61 | 62 | (define drum-sample-data 63 | (list 64 | (list "kick_OH_F_9.wav" 10) 65 | (list "kick2_OH_F_9.wav" 11) 66 | (list "loTom_OH_FF_8.wav" 12) 67 | (list "hiTom_OH_FF_6.wav" 13) 68 | (list "hihatClosed_OH_F_20.wav" 20) 69 | (list "hihatFoot_OH_MP_12.wav" 22) 70 | (list "hihatOpen_OH_FF_6.wav" 23) 71 | (list "hihatSemiOpen1_OH_F_1.wav" 24) 72 | (list "ride1_OH_MP_7.wav" 30) 73 | (list "ride1Bell_OH_F_6.wav" 31) 74 | (list "ride2_OH_FF_5.wav" 32) 75 | (list "ride2Bell_OH_F_6.wav" 33) 76 | (list "ride2Crash_OH_MP_2.wav" 34) 77 | (list "ride2CrashChoke_OH_F_1.wav" 35) 78 | (list "cowbell_FF_6.wav" 36) 79 | (list "bellchime_F_3.wav" 37) 80 | (list "snare_OH_FF_1.wav" 40) 81 | (list "snare_OH_Ghost_1.wav" 41) 82 | (list "snareOFF_OH_P_6.wav" 42) 83 | (list "snare2_OH_FF_8.wav" 43) 84 | (list "snare2_OH_Ghost_1.wav" 44) 85 | (list "snare2OFF_OH_P_6.wav" 45) 86 | (list "snareStick_OH_F_1.wav" 46))) 87 | 88 | 89 | (play-note (now) drums 37 180 44100) 90 | 91 | (define add-drum-samples 92 | (lambda (data) 93 | (map (lambda (sample-pair) 94 | (add-drum-sample (car sample-pair) (cadr sample-pair))) 95 | data))) 96 | 97 | (add-drum-samples drum-sample-data) 98 | 99 | ;;; Set up e drum samples 100 | ;;; 101 | (define add-edrum-sample 102 | (lambda (file-name const-name) 103 | (set-sampler-index edrums 104 | (string-append edrum-path file-name) 105 | const-name 106 | 0 0 0 1))) 107 | 108 | (define edrum-sample-data 109 | (list 110 | (list "Dubstep-Kick0001.wav" 10) 111 | (list "Dubstep-Kick0005.wav" 11) 112 | (list "Dubstep-Kick0006.wav" 12) 113 | (list "Dubstep-Kick0007.wav" 13) 114 | (list "Dubstep-Kick0015.wav" 14) 115 | (list "Dubstep-Kick0018.wav" 15) 116 | (list "Dubstep-Kick0006.wav" 16) 117 | (list "Dubstep-Kick0007.wav" 17) 118 | (list "Dubstep-Kick0015.wav" 18) 119 | (list "Dubstep-Kick0018.wav" 19) 120 | (list "Dubstep-Hats0014.wav" 20) 121 | (list "Dubstep-Hats0017.wav" 22) 122 | (list "Dubstep-Hats0019.wav" 23) 123 | (list "Dubstep-Hats0020.wav" 24) 124 | (list "Dubstep-Hats0026.wav" 25) 125 | (list "Dubstep-Hats0039.wav" 26) 126 | (list "Dubstep-Cym0030.wav" 30) 127 | (list "Dubstep-Cym0035.wav" 31) 128 | (list "Dubstep-Snare0003.wav" 40) 129 | (list "Dubstep-Snare0008.wav" 41) 130 | (list "Dubstep-Snare0009.wav" 42) 131 | (list "Dubstep-Snare0010.wav" 43) 132 | (list "Dubstep-Snare0011.wav" 44) 133 | (list "Dubstep-Snare0013.wav" 45) 134 | (list "Dubstep-Snare0016.wav" 46) 135 | (list "Dubstep-Snare0022.wav" 47) 136 | (list "Dubstep-Snare0023.wav" 48) 137 | (list "Dubstep-Snare0025.wav" 49) 138 | (list "Dubstep-Snare0027.wav" 50) 139 | (list "Dubstep-Snare0029.wav" 51) 140 | (list "Dubstep-Snare0033.wav" 52) 141 | (list "Dubstep-Snare0036.wav" 53) 142 | (list "Dubstep-Snare0037.wav" 54))) 143 | 144 | 145 | (play-note (now) edrums 12 180 44100) 146 | 147 | (define add-edrum-samples 148 | (lambda (data) 149 | (map (lambda (sample-pair) 150 | (add-edrum-sample (car sample-pair) (cadr sample-pair))) 151 | data))) 152 | 153 | (add-edrum-samples edrum-sample-data) 154 | 155 | 156 | ;;conga 157 | (define add-conga-sample 158 | (lambda (file-name const-name) 159 | (set-sampler-index conga 160 | (string-append conga-path file-name) 161 | const-name 162 | 0 0 0 1))) 163 | 164 | (define conga-sample-data 165 | (list 166 | (list "Single_Hit_01.wav" 10) 167 | (list "Single_Hit_02.wav" 11) 168 | (list "Single_Hit_03.wav" 12) 169 | (list "Single_Hit_04.wav" 13) 170 | (list "Single_Hit_05.wav" 14) 171 | (list "Single_Hit_06.wav" 15) 172 | (list "Single_Hit_07.wav" 16) 173 | (list "Single_Hit_08.wav" 17) 174 | (list "Single_Hit_09.wav" 18) 175 | (list "Single_Hit_10.wav" 19) 176 | (list "Single_Hit_11.wav" 20) 177 | (list "Single_Hit_12.wav" 21) 178 | (list "Single_Hit_13.wav" 22) 179 | (list "Single_Hit_14.wav" 23) 180 | (list "Single_Hit_15.wav" 24))) 181 | 182 | 183 | 184 | (play-note (now) conga 24 180 44100) 185 | 186 | (define add-conga-samples 187 | (lambda (data) 188 | (map (lambda (sample-pair) 189 | (add-conga-sample (car sample-pair) (cadr sample-pair))) 190 | data))) 191 | 192 | (add-conga-samples conga-sample-data) 193 | 194 | ;;djembe 195 | 196 | (define add-djembe-sample 197 | (lambda (file-name const-name) 198 | (set-sampler-index djembe 199 | (string-append djembe-path file-name) 200 | const-name 201 | 0 0 0 1))) 202 | 203 | (define djembe-sample-data 204 | (list 205 | (list "Djembe_SingleHit01.wav" 10) 206 | (list "Djembe_SingleHit02.wav" 11) 207 | (list "Djembe_SingleHit03.wav" 12) 208 | (list "Djembe_SingleHit04.wav" 13) 209 | (list "Djembe_SingleHit05.wav" 14) 210 | (list "Djembe_SingleHit06.wav" 15))) 211 | 212 | 213 | 214 | (play-note (now) djembe 10 180 44100) 215 | 216 | (define add-djembe-samples 217 | (lambda (data) 218 | (map (lambda (sample-pair) 219 | (add-djembe-sample (car sample-pair) (cadr sample-pair))) 220 | data))) 221 | 222 | (add-djembe-samples djembe-sample-data) 223 | 224 | ;;jawharp 225 | (define add-jawharp-sample 226 | (lambda (file-name const-name) 227 | (set-sampler-index jawharp 228 | (string-append jawharp-path file-name) 229 | const-name 230 | 0 0 0 1))) 231 | 232 | (define jawharp-sample-data 233 | (list 234 | (list "Jaw_Harp_Hit_01.wav" 10) 235 | (list "Jaw_Harp_Hit_02.wav" 11) 236 | (list "Jaw_Harp_Hit_03.wav" 12) 237 | (list "Jaw_Harp_Hit_04.wav" 13) 238 | (list "Jaw_Harp_Hit_05.wav" 14) 239 | (list "Jaw_Harp_Hit_06.wav" 15) 240 | (list "Jaw_Harp_Hit_07.wav" 16) 241 | (list "Jaw_Harp_Hit_08.wav" 17) 242 | (list "Jaw_Harp_Hit_09.wav" 18) 243 | (list "Jaw_Harp_Hit_10.wav" 19) 244 | (list "Jaw_Harp_Hit_11.wav" 20) 245 | (list "Jaw_Harp_Hit_12.wav" 21) 246 | (list "Jaw_Harp_Hit_13.wav" 22) 247 | (list "Jaw_Harp_Hit_14.wav" 23) 248 | (list "Jaw_Harp_Hit_15.wav" 24) 249 | (list "Jaw_Harp_Hit_16.wav" 25) 250 | (list "Jaw_Harp_Hit_17.wav" 26) 251 | (list "Jaw_Harp_Hit_18.wav" 27) 252 | (list "Jaw_Harp_Hit_19.wav" 28) 253 | (list "Jaw_Harp_Hit_20.wav" 29) 254 | (list "Jaw_Harp_Hit_21.wav" 30))) 255 | 256 | 257 | 258 | (play-note (now) jawharp 30 180 44100) 259 | 260 | (define add-jawharp-samples 261 | (lambda (data) 262 | (map (lambda (sample-pair) 263 | (add-jawharp-sample (car sample-pair) (cadr sample-pair))) 264 | data))) 265 | 266 | (add-jawharp-samples jawharp-sample-data) 267 | 268 | 269 | ;;; Set up piano samples 270 | ;;; 271 | (define parse-salamander-piano 272 | (lambda (file-list) 273 | (map (lambda (fname) 274 | (let ((result (regex:matched fname piano-regex))) 275 | (if (null? result) 276 | #f 277 | ;; load 4th velocity layer only 278 | (if (= (string->number (caddr result)) 4) 279 | (list fname 280 | (note-name-to-midi-number (cadr result)) 281 | 0 282 | 0) 283 | #f)))) 284 | file-list))) 285 | 286 | (load-sampler 287 | piano 288 | ;; Can't use a variable here; need the actual path string 289 | "/Users/jasonlevine/Code/extempore/assets/salamander/SalamanderGrandPianoV3_44.1khz16bit/44.1khz16bit" 290 | ;; 'sound bank' index 291 | 0 292 | parse-salamander-piano) 293 | 294 | ;;; Set up string samples 295 | ;;; 296 | (define strings-regex "^.sus_([ABCDEFG][#b]?[0-9])\.wav$") 297 | 298 | 299 | (define parse-strings 300 | (lambda (file-list) 301 | (map (lambda (fname) 302 | (let ((result (regex:matched fname strings-regex))) 303 | (if (null? result) 304 | #f 305 | 306 | (list fname 307 | (note-name-to-midi-number (cadr result)) 308 | 0 309 | 0) 310 | ))) 311 | file-list))) 312 | 313 | (load-sampler 314 | strings 315 | ;; Can't use a variable here; need the actual path string 316 | "/Users/jasonlevine/Code/extempore/assets/Strings/Samples" 317 | ;; 'sound bank' index 318 | 0 319 | parse-strings) 320 | 321 | 322 | 323 | 324 | ;; Now that everything is loaded, try out some notes ... 325 | (play-note (now) edrums 18 90 44100) 326 | (play-note (now) drums *gm-open-hi-hat* 140 44100) 327 | (play-note (now) piano 24 180 44100) 328 | (play-note (now) drums *gm-snare* 110 44100) 329 | (play-note (now) subbass (random 36 50) 90 (* 1.0 *second*)) 330 | -------------------------------------------------------------------------------- /LCADsetup6.xtm: -------------------------------------------------------------------------------- 1 | ;;;; Much of the content in this file is taken from various Extempore 2 | ;;;; blog posts by Ben Swift which are indexed here: 3 | ;;;; http://benswift.me/extempore-docs/index.html 4 | ;;;; 5 | 6 | ;;; Load the needed libraries -- this will take several minutes 7 | ;;; 8 | (sys:set-default-timeout (* 2 13953200)) 9 | 10 | (sys:load "libs/core/instruments.xtm") 11 | (sys:load "libs/core/pc_ivl.xtm") 12 | (sys:load "libs/external/instruments_ext.xtm") 13 | 14 | ;;; Set up the constants we're going to need 15 | ;;; 16 | 17 | (define sample-path "/Users/jasonlevine/Code/extempore/assets/") 18 | (define drum-path (string-append sample-path "salamander/OH/")) 19 | (define edrum-path (string-append sample-path "biolabsDubstepKit3/")) 20 | (define conga-path (string-append sample-path "Conga/")) 21 | (define perc-path (string-append sample-path "OneShotPercussionTools_SP_Mini/")) 22 | (define djembe-path (string-append sample-path "Djembe/")) 23 | (define jawharp-path (string-append sample-path "Jaw_Harp/")) 24 | (define piano-regex "^.*([ABCDEFG][#b]?[0-9])v([0-9]+)\.wav$") 25 | 26 | 27 | ;;; Add the samplers/instruments we're going to need to the dsp output 28 | ;;; callback 29 | ;;; 30 | (define-sampler drums sampler_note_hermite_c sampler_fx) 31 | (define-sampler edrums sampler_note_hermite_c sampler_fx) 32 | (define-sampler conga sampler_note_hermite_c sampler_fx) 33 | (define-sampler djembe sampler_note_hermite_c sampler_fx) 34 | (define-sampler perc sampler_note_hermite_c sampler_fx) 35 | (define-sampler jawharp sampler_note_hermite_c sampler_fx) 36 | 37 | (define-sampler piano sampler_note_hermite_c sampler_fx) 38 | (define-sampler strings sampler_note_hermite_c sampler_fx) 39 | (define-instrument subbass subbass_note_c subbass_fx) 40 | (define-instrument fmsynth fmsynth_note_c fmsynth_fx) 41 | 42 | 43 | (bind-func jasons_rms 44 | (let ((d:SAMPLE* (alloc FRAMES)) 45 | (t 0) 46 | (db:SAMPLE 0.0)) 47 | (lambda (x:SAMPLE) 48 | (pset! d (% t FRAMES) (* x x)) 49 | (set! t (+ t 1)) 50 | (if (= 0 (% t FRAMES)) 51 | (set! db (+ 3.0 (amp2db (sqrt (mean d FRAMES)))))) 52 | x))) 53 | 54 | (bind-func dsp:DSP 55 | (let ((rms (rms_st_c)) ;; stereo rms 56 | (left:SAMPLE 0.0) 57 | (right:SAMPLE 0.0)) 58 | (lambda (in time chan dat) 59 | ;; for convenience set left and right 60 | ;; once every 'FRAMES' 61 | (if (= 0 (% time FRAMES)) 62 | (begin (set! left (rms.left)) 63 | (set! right (rms.right)))) 64 | ;; rms passes signal straight through 65 | (rms chan 66 | (+ 67 | (* 0.1 (piano in time chan dat)) 68 | (* (piano in time chan dat) (fmsynth in time chan dat)) 69 | (* 0.1 (fmsynth in time chan dat)) 70 | 71 | 72 | (strings in time chan dat) 73 | (drums in time chan dat) 74 | (edrums in time chan dat) 75 | (djembe in time chan dat) 76 | (conga in time chan dat) 77 | (perc in time chan dat) 78 | (subbass in time chan dat)))))) 79 | 80 | 81 | ;(bind-func dsp:DSP 82 | ; (lambda (in time chan dat) 83 | ; (cond ((< chan 2.0) 84 | ; (+ (drums in time chan dat) 85 | ; (edrums in time chan dat) 86 | ; (conga in time chan dat) 87 | ; (djembe in time chan dat) 88 | ; (perc in time chan dat) 89 | ; (strings in time chan dat) 90 | ; (piano in time chan dat) 91 | ; (subbass in time chan dat) 92 | ; (* (piano in time chan dat) (fmsynth in time chan dat)) 93 | ; (fmsynth in time chan dat))) 94 | ; (else 0.0)))) 95 | 96 | (bind-func dsp:[SAMPLE,SAMPLE,i64,i64,SAMPLE*]* 1000000 97 | (let ((delay (delay_c (convert (* SAMPLERATE 0.1)))) 98 | (flanger (flanger_c (convert (* SAMPLERATE 0.02)) 0.2 0.9 (convert (* SAMPLERATE 0.2)))) 99 | (chorus (chorus_c 0.5)) 100 | (reverb (reverb_c 1000.0)) 101 | (distort (distort_c 3.0)) 102 | ) 103 | (lambda (in:SAMPLE time:i64 chan:i64 dat:SAMPLE*) 104 | (cond ((< chan 2.0) 105 | (+ (reverb (edrums in time chan dat) 0.1 0.8) 106 | (delay (drums in time chan dat) 0.5 0.8) 107 | (delay (djembe in time chan dat) 0.9 0.7) 108 | (flanger (conga in time chan dat) 0.8 0.7) 109 | (delay (perc in time chan dat) 0.5 0.5)) 110 | ) 111 | (else 0.0))))) 112 | 113 | 114 | (dsp:set! dsp) 115 | 116 | (play-note (now) conga 18 180 (* 0.1 44100)) 117 | 118 | ;;; Set up drum samples 119 | ;;; 120 | (define add-drum-sample 121 | (lambda (file-name const-name) 122 | (set-sampler-index drums 123 | (string-append drum-path file-name) 124 | const-name 125 | 0 0 0 1))) 126 | 127 | (define drum-sample-data 128 | (list 129 | (list "kick_OH_F_9.wav" 10) 130 | (list "kick2_OH_F_9.wav" 11) 131 | (list "loTom_OH_FF_8.wav" 12) 132 | (list "hiTom_OH_FF_6.wav" 13) 133 | (list "hihatClosed_OH_F_20.wav" 20) 134 | (list "hihatFoot_OH_MP_12.wav" 22) 135 | (list "hihatOpen_OH_FF_6.wav" 23) 136 | (list "hihatSemiOpen1_OH_F_1.wav" 24) 137 | (list "ride1_OH_MP_7.wav" 30) 138 | (list "ride1Bell_OH_F_6.wav" 31) 139 | (list "ride2_OH_FF_5.wav" 32) 140 | (list "ride2Bell_OH_F_6.wav" 33) 141 | (list "ride2Crash_OH_MP_2.wav" 34) 142 | (list "ride2CrashChoke_OH_F_1.wav" 35) 143 | (list "cowbell_FF_6.wav" 36) 144 | (list "bellchime_F_3.wav" 37) 145 | (list "snare_OH_FF_1.wav" 40) 146 | (list "snare_OH_Ghost_1.wav" 41) 147 | (list "snareOFF_OH_P_6.wav" 42) 148 | (list "snare2_OH_FF_8.wav" 43) 149 | (list "snare2_OH_Ghost_1.wav" 44) 150 | (list "snare2OFF_OH_P_6.wav" 45) 151 | (list "snareStick_OH_F_1.wav" 46))) 152 | 153 | 154 | (play-note (now) drums 37 180 44100) 155 | 156 | (define add-drum-samples 157 | (lambda (data) 158 | (map (lambda (sample-pair) 159 | (add-drum-sample (car sample-pair) (cadr sample-pair))) 160 | data))) 161 | 162 | (add-drum-samples drum-sample-data) 163 | 164 | ;;; Set up e drum samples 165 | ;;; 166 | (define add-edrum-sample 167 | (lambda (file-name const-name) 168 | (set-sampler-index edrums 169 | (string-append edrum-path file-name) 170 | const-name 171 | 0 0 0 1))) 172 | 173 | (define edrum-sample-data 174 | (list 175 | (list "Dubstep-Kick0001.wav" 10) 176 | (list "Dubstep-Kick0005.wav" 11) 177 | (list "Dubstep-Kick0006.wav" 12) 178 | (list "Dubstep-Kick0007.wav" 13) 179 | (list "Dubstep-Kick0015.wav" 14) 180 | (list "Dubstep-Kick0018.wav" 15) 181 | (list "Dubstep-Kick0006.wav" 16) 182 | (list "Dubstep-Kick0007.wav" 17) 183 | (list "Dubstep-Kick0015.wav" 18) 184 | (list "Dubstep-Kick0018.wav" 19) 185 | (list "Dubstep-Hats0014.wav" 20) 186 | (list "Dubstep-Hats0017.wav" 22) 187 | (list "Dubstep-Hats0019.wav" 23) 188 | (list "Dubstep-Hats0020.wav" 24) 189 | (list "Dubstep-Hats0026.wav" 25) 190 | (list "Dubstep-Hats0039.wav" 26) 191 | (list "Dubstep-Cym0030.wav" 30) 192 | (list "Dubstep-Cym0035.wav" 31) 193 | (list "Dubstep-Snare0003.wav" 40) 194 | (list "Dubstep-Snare0008.wav" 41) 195 | (list "Dubstep-Snare0009.wav" 42) 196 | (list "Dubstep-Snare0010.wav" 43) 197 | (list "Dubstep-Snare0011.wav" 44) 198 | (list "Dubstep-Snare0013.wav" 45) 199 | (list "Dubstep-Snare0016.wav" 46) 200 | (list "Dubstep-Snare0022.wav" 47) 201 | (list "Dubstep-Snare0023.wav" 48) 202 | (list "Dubstep-Snare0025.wav" 49) 203 | (list "Dubstep-Snare0027.wav" 50) 204 | (list "Dubstep-Snare0029.wav" 51) 205 | (list "Dubstep-Snare0033.wav" 52) 206 | (list "Dubstep-Snare0036.wav" 53) 207 | (list "Dubstep-Snare0037.wav" 54))) 208 | 209 | 210 | (play-note (now) edrums 12 180 44100) 211 | 212 | (define add-edrum-samples 213 | (lambda (data) 214 | (map (lambda (sample-pair) 215 | (add-edrum-sample (car sample-pair) (cadr sample-pair))) 216 | data))) 217 | 218 | (add-edrum-samples edrum-sample-data) 219 | 220 | 221 | ;;conga 222 | (define add-conga-sample 223 | (lambda (file-name const-name) 224 | (set-sampler-index conga 225 | (string-append conga-path file-name) 226 | const-name 227 | 0 0 0 1))) 228 | 229 | (define conga-sample-data 230 | (list 231 | (list "Single_Hit_01.wav" 10) 232 | (list "Single_Hit_02.wav" 11) 233 | (list "Single_Hit_03.wav" 12) 234 | (list "Single_Hit_04.wav" 13) 235 | (list "Single_Hit_05.wav" 14) 236 | (list "Single_Hit_06.wav" 15) 237 | (list "Single_Hit_07.wav" 16) 238 | (list "Single_Hit_08.wav" 17) 239 | (list "Single_Hit_09.wav" 18) 240 | (list "Single_Hit_10.wav" 19) 241 | (list "Single_Hit_11.wav" 20) 242 | (list "Single_Hit_12.wav" 21) 243 | (list "Single_Hit_13.wav" 22) 244 | (list "Single_Hit_14.wav" 23) 245 | (list "Single_Hit_15.wav" 24))) 246 | 247 | 248 | (define add-conga-samples 249 | (lambda (data) 250 | (map (lambda (sample-pair) 251 | (add-conga-sample (car sample-pair) (cadr sample-pair))) 252 | data))) 253 | 254 | (add-conga-samples conga-sample-data) 255 | 256 | ;;perc 257 | (define add-perc-sample 258 | (lambda (file-name const-name) 259 | (set-sampler-index perc 260 | (string-append perc-path file-name) 261 | const-name 262 | 0 0 0 1))) 263 | 264 | (define perc-sample-data 265 | (list 266 | (list "WoodenBongoes5Loud.wav" 10) 267 | (list "SierraLeoneSlitDrum1A.wav" 11) 268 | (list "Waterfall1A.wav" 12) 269 | (list "FryingPan1B.wav" 13) 270 | (list "PearlAgogoShaker1A.wav" 14) 271 | (list "SilverShaker1A.wav" 15) 272 | (list "TambourineDry1A.wav" 16) 273 | (list "Cricket2C.wav" 17) 274 | (list "HelixBowlLoud1A.wav" 18) 275 | (list "WaterrShells1A.wav" 19))) 276 | 277 | 278 | (define add-perc-samples 279 | (lambda (data) 280 | (map (lambda (sample-pair) 281 | (add-perc-sample (car sample-pair) (cadr sample-pair))) 282 | data))) 283 | 284 | (add-perc-samples perc-sample-data) 285 | 286 | ;;djembe 287 | 288 | (define add-djembe-sample 289 | (lambda (file-name const-name) 290 | (set-sampler-index djembe 291 | (string-append djembe-path file-name) 292 | const-name 293 | 0 0 0 1))) 294 | 295 | (define djembe-sample-data 296 | (list 297 | (list "Djembe_SingleHit01.wav" 10) 298 | (list "Djembe_SingleHit02.wav" 11) 299 | (list "Djembe_SingleHit03.wav" 12) 300 | (list "Djembe_SingleHit04.wav" 13) 301 | (list "Djembe_SingleHit05.wav" 14) 302 | (list "Djembe_SingleHit06.wav" 15))) 303 | 304 | 305 | 306 | (play-note (now) djembe 10 180 44100) 307 | 308 | (define add-djembe-samples 309 | (lambda (data) 310 | (map (lambda (sample-pair) 311 | (add-djembe-sample (car sample-pair) (cadr sample-pair))) 312 | data))) 313 | 314 | (add-djembe-samples djembe-sample-data) 315 | 316 | ;;jawharp 317 | (define add-jawharp-sample 318 | (lambda (file-name const-name) 319 | (set-sampler-index jawharp 320 | (string-append jawharp-path file-name) 321 | const-name 322 | 0 0 0 1))) 323 | 324 | (define jawharp-sample-data 325 | (list 326 | (list "Jaw_Harp_Hit_01.wav" 10) 327 | (list "Jaw_Harp_Hit_02.wav" 11) 328 | (list "Jaw_Harp_Hit_03.wav" 12) 329 | (list "Jaw_Harp_Hit_04.wav" 13) 330 | (list "Jaw_Harp_Hit_05.wav" 14) 331 | (list "Jaw_Harp_Hit_06.wav" 15) 332 | (list "Jaw_Harp_Hit_07.wav" 16) 333 | (list "Jaw_Harp_Hit_08.wav" 17) 334 | (list "Jaw_Harp_Hit_09.wav" 18) 335 | (list "Jaw_Harp_Hit_10.wav" 19) 336 | (list "Jaw_Harp_Hit_11.wav" 20) 337 | (list "Jaw_Harp_Hit_12.wav" 21) 338 | (list "Jaw_Harp_Hit_13.wav" 22) 339 | (list "Jaw_Harp_Hit_14.wav" 23) 340 | (list "Jaw_Harp_Hit_15.wav" 24) 341 | (list "Jaw_Harp_Hit_16.wav" 25) 342 | (list "Jaw_Harp_Hit_17.wav" 26) 343 | (list "Jaw_Harp_Hit_18.wav" 27) 344 | (list "Jaw_Harp_Hit_19.wav" 28) 345 | (list "Jaw_Harp_Hit_20.wav" 29) 346 | (list "Jaw_Harp_Hit_21.wav" 30))) 347 | 348 | 349 | 350 | (play-note (now) jawharp 30 180 44100) 351 | 352 | (define add-jawharp-samples 353 | (lambda (data) 354 | (map (lambda (sample-pair) 355 | (add-jawharp-sample (car sample-pair) (cadr sample-pair))) 356 | data))) 357 | 358 | (add-jawharp-samples jawharp-sample-data) 359 | 360 | 361 | ;;; Set up piano samples 362 | ;;; 363 | (define parse-salamander-piano 364 | (lambda (file-list) 365 | (map (lambda (fname) 366 | (let ((result (regex:matched fname piano-regex))) 367 | (if (null? result) 368 | #f 369 | ;; load 4th velocity layer only 370 | (if (= (string->number (caddr result)) 4) 371 | (list fname 372 | (note-name-to-midi-number (cadr result)) 373 | 0 374 | 0) 375 | #f)))) 376 | file-list))) 377 | 378 | (load-sampler 379 | piano 380 | ;; Can't use a variable here; need the actual path string 381 | "/Users/jasonlevine/Code/extempore/assets/salamander/SalamanderGrandPianoV3_44.1khz16bit/44.1khz16bit" 382 | ;; 'sound bank' index 383 | 0 384 | parse-salamander-piano) 385 | 386 | ;;; Set up string samples 387 | ;;; 388 | (define strings-regex "^.*(sus_[ABCDEFG][#b]?[0-9])\.wav$") 389 | 390 | 391 | (define parse-strings 392 | (lambda (file-list) 393 | (map (lambda (fname) 394 | (let ((result (regex:matched fname strings-regex))) 395 | (if (null? result) 396 | #f 397 | 398 | (list fname 399 | (note-name-to-midi-number (cadr result)) 400 | 0 401 | 0) 402 | ))) 403 | file-list))) 404 | 405 | (load-sampler 406 | strings 407 | ;; Can't use a variable here; need the actual path string 408 | "/Users/jasonlevine/Code/extempore/assets/Strings/Samples" 409 | ;; 'sound bank' index 410 | 0 411 | parse-strings) 412 | 413 | 414 | 415 | 416 | ;; Now that everything is loaded, try out some notes ... 417 | (play-note (now) edrums 18 90 44100) 418 | (play-note (now) drums *gm-open-hi-hat* 140 44100) 419 | (play-note (now) piano 40 180 44100) 420 | (play-note (now) drums *gm-snare* 110 44100) 421 | (play-note (now) subbass (random 36 50) 90 (* 1.0 *second*)) 422 | --------------------------------------------------------------------------------