-
Notifications
You must be signed in to change notification settings - Fork 0
/
petal_data.rb
104 lines (90 loc) · 2.48 KB
/
petal_data.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
module PetalLang
module LoopHolder
extend self
@@loop_sub_numbers = {}
end
class Cycle
attr_reader :bpm
attr_reader :sound_array
attr_reader :stretch
attr_reader :random_n
attr_reader :random_gain
attr_reader :random_pan
attr_reader :random_speed
def initialize(bpm, sound_array, stretch = nil, random_n = nil, random_gain = nil, random_pan = nil, random_speed = nil)
@bpm = bpm
@sound_array = sound_array
@stretch = stretch
@random_n = random_n
@random_gain = random_gain
@random_pan = random_pan
@random_speed = random_speed
end
def ==(other)
return false if other.nil?
return false unless other.instance_of?(Cycle)
@bpm == other.bpm && @sound_array == other.sound_array &&
@stretch == other.stretch && @random_n == other.random_n &&
@random_gain == other.random_gain && @random_pan == other.random_pan &&
@random_speed == other.random_speed
end
end
class Sound
attr_accessor :name
attr_accessor :index
attr_accessor :divisor
attr_accessor :amp
attr_accessor :pan
attr_accessor :rate
def initialize(sample_name, index, divisor)
@name = sample_name
@index = index
@divisor = divisor
@amp = 1.0
@pan = 0
@rate = 1.0
end
def ==(other)
return false if other.nil?
return false unless other.instance_of?(Sound)
@name == other.name && @index == other.index &&
@divisor.to_f == other.divisor.to_f && @amp.to_f == other.amp.to_f &&
@pan.to_f == other.pan.to_f && @rate.to_f == other.rate.to_f
end
REST = Sound.new('~', 0, 1)
end
class Option
attr_reader :value
attr_reader :divisor
def initialize(value, divisor)
@value = value
@divisor = divisor
end
def ==(other)
return false if other.nil?
return false unless other.instance_of?(Option)
@value == other.value && @divisor.to_f == other.divisor.to_f
end
REST = Option.new('~', 1)
end
class Rand
attr_reader :min
attr_reader :max
def initialize(min, max)
@min = min
@max = max
end
def ==(other)
return false if other.nil?
return false unless other.instance_of?(Rand)
@min == other.min && @max == other.max
end
end
class IRand < Rand
def ==(other)
return false if other.nil?
return false unless other.instance_of?(IRand)
@min == other.min && @max == other.max
end
end
end