-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschedule.l
100 lines (80 loc) · 2.03 KB
/
schedule.l
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
(de reset-schedule-queue ()
(set 'schedule-queue Nil) )
(de nest (fn ticks)
(if (<= ticks 0)
fn
(list Nil
(cons 'quote
(nest fn (- ticks 1)) ) ) ) )
(de schedule (lambda ticks)
(push 'schedule-queue
(cons ticks
lambda ) ) )
(de schedule-loop (lambda n)
(schedule (list Nil
(list (cons 'quote lambda))
(list 'schedule-loop (cons 'quote lambda) n))
n))
(de schedule-tick ()
(set 'schedule-queue
(let (schedule-queue-old schedule-queue)
(let (schedule-queue Nil)
(let (schedule-queue-new
(mapcan
'((x) (if (<= (dec (car x)) 0)
(prog ((cdr x))
Nil)
(list (cons (dec (car x))
(cdr x)))))
schedule-queue-old ) )
(append schedule-queue schedule-queue-new) ) ) ) ) )
(de bang ()
(schedule-tick))
(de schedule-demo ()
(reset-schedule-queue)
(schedule '(() (prinl 'monkey)) 3)
(schedule '(()
(prinl 'badger)
(schedule '(() (prinl 'rat))
3 ))
2 )
schedule-queue )
(de flam (n speed lambda)
(lambda)
(for x (- n 1) (schedule lambda (* x speed))))
##(flam 16 1 '(() (pd-message 'hh)))
(de pat1 ()
(flam 10 7 '(() (pd-message 'bd))))
(de pat2 ()
(flam 4 4 '(() (pd-message 'hh))))
## (pat1)
## (pat2)
## (schedule-loop pat1 70)
## (schedule-loop pat2 16)
## (schedule-loop '(() (pd-message 'hh)) 4)
## (reset-schedule-queue)
(de hush ()
(reset-schedule-queue))
(set 'rhyth '(hh - hh hh hh - - hh))
(de do-pattern (pat)
(let (lambda Nil)
(when (not (= (car pat) '-))
(pd-message (car pat)))
(for i (length (cdr pat))
(let (b (car (nth (cdr pat) i)))
(when (not (= b '-))
(schedule (list Nil
(list 'pd-message (cons 'quote b)))
i))))))
(de loop-pattern (pat)
(schedule-loop (list Nil
(list 'do-pattern (cons 'quote pat)))
(length pat)))
## (do-pattern rhyth)
## (loop-pattern rhyth)
(prog
(hush)
(flam 8 1 '(() (pd-message 'hh)))
(loop-pattern '(bd - - - bd - bd -))
(loop-pattern '(hh - hh - hh)))
## (hush)