-
Notifications
You must be signed in to change notification settings - Fork 2
/
05_Eury.rb
155 lines (137 loc) · 3.94 KB
/
05_Eury.rb
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
eval(File.read(File.expand_path('~/A/Music/SonicPi/Sequencer.rb')))
eval(File.read(File.expand_path('~/A/Music/SonicPi/EuclideanRhythm.rb')))
MIDI_PORT = 'loopmidi'
use_bpm 60
live_loop :bass_frog_drop do
Sequence.new(method(:bass_frog_drop)).play
end
live_loop :drums_kicka do
Sequence.new(method(:drums_kicka)).play
end
live_loop :flute_smooth do
Sequence.new(method(:flute_smooth)).play
end
live_loop :guitar_wonky_comb do
Sequence.new(method(:guitar_wonky_comb)).play
end
live_loop :mallet_space_domestic do
Sequence.new(method(:mallet_space_domestic)).play
end
live_loop :multitrack_ratios do
Sequence.new(method(:multitrack_ratios)).play
end
live_loop :multitrack_mystic_visions do
Sequence.new(method(:multitrack_mystic_visions)).play
end
live_loop :organ_world_park do
Sequence.new(method(:organ_world_park)).play
end
def bass_frog_drop
rhythm = EuclideanRhythm.euclidean_rhythm(3, 5).ring
notes = scale(:A2, :phrygian, num_octaves: 1).shuffle
step = Step.new(port: MIDI_PORT)
loop do
step.probability = rhythm.tick(:rhythm) ? 1 : 0
if step.probability > 0
step.note = notes.tick(:note)
step.velocity = rand(0.4..1)
end
yield step
end
end
def drums_kicka
rhythm = EuclideanRhythm.euclidean_rhythm(2, 5).ring
notes = scale(:A1, :phrygian, num_octaves: 3).shuffle
step = Step.new(port: MIDI_PORT, channel: 2)
probability = 0
loop do
if rhythm.tick(:rhythm)
probability += 0.1
step.probability = probability
step.note = notes.tick(:note)
step.velocity = rand(0.5..1)
else
step.probability = 0
end
yield step
probability = probability % 1.5
end
end
def flute_smooth
rhythm = EuclideanRhythm.euclidean_rhythm(4, 10).ring
notes = scale(:A3, :phrygian, num_octaves: 2).shuffle
step = Step.new(port: MIDI_PORT, channel: 3, duration: 2)
loop do
step.probability = rhythm.tick(:rhythm) ? 1 : 0
if step.probability > 0
step.note = notes.tick(:note)
step.velocity = rand(0.5..1)
end
yield step
end
end
def guitar_wonky_comb
rhythm = EuclideanRhythm.euclidean_rhythm(3, 10).ring
notes = scale(:A3, :phrygian).shuffle
step = Step.new(port: MIDI_PORT, channel: 4, duration: 1)
loop do
step.probability = rhythm.tick(:rhythm) ? 1 : 0
if step.probability > 0
step.note = notes.tick(:note)
step.velocity = rand(0.6..1)
end
yield step
end
end
def mallet_space_domestic
rhythm = EuclideanRhythm.euclidean_rhythm(9, 15).ring
notes = scale(:A2, :phrygian).shuffle
step = Step.new(port: MIDI_PORT, channel: 5, duration: 0.5)
loop do
step.probability = rhythm.tick(:rhythm) ? 1 : 0
if step.probability > 0
step.note = notes.tick(:note)
step.velocity = rand(0.5..1)
end
yield step
end
end
def multitrack_ratios
rhythm = EuclideanRhythm.euclidean_rhythm(8, 15).ring
notes = scale(:A2, :phrygian).shuffle
step = Step.new(port: MIDI_PORT, channel: 6, duration: 2)
loop do
step.probability = rhythm.tick(:rhythm) ? 1 : 0
if step.probability > 0
step.note = notes.tick(:note)
step.velocity = rand(0.5..1)
end
yield step
end
end
def multitrack_mystic_visions
rhythm = EuclideanRhythm.euclidean_rhythm(1, 14).ring
notes = scale(:A3, :phrygian).shuffle
step = Step.new(port: MIDI_PORT, channel: 7, duration: 3)
loop do
step.probability = rhythm.tick(:rhythm) ? 1 : 0
if step.probability > 0
step.note = notes.tick(:note)
step.velocity = rand(0.9..1)
end
yield step
end
end
def organ_world_park
rhythm = EuclideanRhythm.euclidean_rhythm(4, 7).ring
notes = scale(:A1, :phrygian, num_octaves: 3)
step = Step.new(port: MIDI_PORT, channel: 8, duration: 3)
loop do
step.probability = rhythm.tick(:rhythm) ? 1 : 0
if step.probability > 0
step.note = notes.tick(:note)
step.velocity = rand(0.05..1)
end
yield step
end
end