stave 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/stave/theory/note.rb +143 -37
- data/lib/stave/theory/scale.rb +6 -2
- data/lib/stave/theory/scale_type.rb +5 -5
- data/lib/stave/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dbd5c1307918d3c9af4689f6126d374ab8d7a31b03777f0bc3e9a32cf127188
|
4
|
+
data.tar.gz: 985afcf77f58ea34b29e1f16f3ee98b01b711ae2701d0c7f0b084586ca553b64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d318f7a0cf99045f8e7191734c8d0adb6f41af1d7fc0d63e91176ca2c60328cbe8c731011a2697736068bf0e4326d6032eb287ee818928ef06f900fdb2326b9
|
7
|
+
data.tar.gz: 26f57ce7d59c8b333c2f4db3988763eb46c1ec1ab2c36cea23df1ac387ebd2104fc15e24293fe41929f37c3018136fc0c84701e78fc55b734952344ee8ea5d0a
|
data/lib/stave/theory/note.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Stave
|
2
2
|
module Theory
|
3
|
-
class Note < Core::Lookup
|
3
|
+
class Note < Core::Lookup # rubocop:disable Metrics/ClassLength
|
4
4
|
class PitchClass < Core::Lookup
|
5
5
|
variant :c, index: 0, symbol: "C", to_i: 0
|
6
6
|
variant :d, index: 1, symbol: "D", to_i: 2
|
@@ -26,59 +26,157 @@ module Stave
|
|
26
26
|
end
|
27
27
|
|
28
28
|
with_options pitch_class: PitchClass.a do
|
29
|
-
variant :a_double_flat,
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
variant :
|
29
|
+
variant :a_double_flat,
|
30
|
+
accidental: Accidental.double_flat,
|
31
|
+
circle_of_fifths?: false
|
32
|
+
|
33
|
+
variant :a_flat,
|
34
|
+
accidental: Accidental.flat,
|
35
|
+
circle_of_fifths?: true
|
36
|
+
|
37
|
+
variant :a_natural,
|
38
|
+
accidental: Accidental.natural,
|
39
|
+
circle_of_fifths?: true
|
40
|
+
|
41
|
+
variant :a_sharp,
|
42
|
+
accidental: Accidental.sharp,
|
43
|
+
circle_of_fifths?: false
|
44
|
+
|
45
|
+
variant :a_double_sharp,
|
46
|
+
accidental: Accidental.double_sharp,
|
47
|
+
circle_of_fifths?: false
|
34
48
|
end
|
35
49
|
|
36
50
|
with_options pitch_class: PitchClass.b do
|
37
|
-
variant :b_double_flat,
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
variant :
|
51
|
+
variant :b_double_flat,
|
52
|
+
accidental: Accidental.double_flat,
|
53
|
+
circle_of_fifths?: false
|
54
|
+
|
55
|
+
variant :b_flat,
|
56
|
+
accidental: Accidental.flat,
|
57
|
+
circle_of_fifths?: true
|
58
|
+
|
59
|
+
variant :b_natural,
|
60
|
+
accidental: Accidental.natural,
|
61
|
+
circle_of_fifths?: true
|
62
|
+
|
63
|
+
variant :b_sharp,
|
64
|
+
accidental: Accidental.sharp,
|
65
|
+
circle_of_fifths?: false
|
66
|
+
|
67
|
+
variant :b_double_sharp,
|
68
|
+
accidental: Accidental.double_sharp,
|
69
|
+
circle_of_fifths?: false
|
42
70
|
end
|
43
71
|
|
44
72
|
with_options pitch_class: PitchClass.c do
|
45
|
-
variant :c_double_flat,
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
variant :
|
73
|
+
variant :c_double_flat,
|
74
|
+
accidental: Accidental.double_flat,
|
75
|
+
circle_of_fifths?: false
|
76
|
+
|
77
|
+
variant :c_flat,
|
78
|
+
accidental: Accidental.flat,
|
79
|
+
circle_of_fifths?: true
|
80
|
+
|
81
|
+
variant :c_natural,
|
82
|
+
accidental: Accidental.natural,
|
83
|
+
circle_of_fifths?: true
|
84
|
+
|
85
|
+
variant :c_sharp,
|
86
|
+
accidental: Accidental.sharp,
|
87
|
+
circle_of_fifths?: true
|
88
|
+
|
89
|
+
variant :c_double_sharp,
|
90
|
+
accidental: Accidental.double_sharp,
|
91
|
+
circle_of_fifths?: false
|
50
92
|
end
|
51
93
|
|
52
94
|
with_options pitch_class: PitchClass.d do
|
53
|
-
variant :d_double_flat,
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
variant :
|
95
|
+
variant :d_double_flat,
|
96
|
+
accidental: Accidental.double_flat,
|
97
|
+
circle_of_fifths?: false
|
98
|
+
|
99
|
+
variant :d_flat,
|
100
|
+
accidental: Accidental.flat,
|
101
|
+
circle_of_fifths?: true
|
102
|
+
|
103
|
+
variant :d_natural,
|
104
|
+
accidental: Accidental.natural,
|
105
|
+
circle_of_fifths?: true
|
106
|
+
|
107
|
+
variant :d_sharp,
|
108
|
+
accidental: Accidental.sharp,
|
109
|
+
circle_of_fifths?: false
|
110
|
+
|
111
|
+
variant :d_double_sharp,
|
112
|
+
accidental: Accidental.double_sharp,
|
113
|
+
circle_of_fifths?: false
|
58
114
|
end
|
59
115
|
|
60
116
|
with_options pitch_class: PitchClass.e do
|
61
|
-
variant :e_double_flat,
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
variant :
|
117
|
+
variant :e_double_flat,
|
118
|
+
accidental: Accidental.double_flat,
|
119
|
+
circle_of_fifths?: false
|
120
|
+
|
121
|
+
variant :e_flat,
|
122
|
+
accidental: Accidental.flat,
|
123
|
+
circle_of_fifths?: true
|
124
|
+
|
125
|
+
variant :e_natural,
|
126
|
+
accidental: Accidental.natural,
|
127
|
+
circle_of_fifths?: true
|
128
|
+
|
129
|
+
variant :e_sharp,
|
130
|
+
accidental: Accidental.sharp,
|
131
|
+
circle_of_fifths?: false
|
132
|
+
|
133
|
+
variant :e_double_sharp,
|
134
|
+
accidental: Accidental.double_sharp,
|
135
|
+
circle_of_fifths?: false
|
66
136
|
end
|
67
137
|
|
68
138
|
with_options pitch_class: PitchClass.f do
|
69
|
-
variant :f_double_flat,
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
variant :
|
139
|
+
variant :f_double_flat,
|
140
|
+
accidental: Accidental.double_flat,
|
141
|
+
circle_of_fifths?: false
|
142
|
+
|
143
|
+
variant :f_flat,
|
144
|
+
accidental: Accidental.flat,
|
145
|
+
circle_of_fifths?: false
|
146
|
+
|
147
|
+
variant :f_natural,
|
148
|
+
accidental: Accidental.natural,
|
149
|
+
circle_of_fifths?: true
|
150
|
+
|
151
|
+
variant :f_sharp,
|
152
|
+
accidental: Accidental.sharp,
|
153
|
+
circle_of_fifths?: true
|
154
|
+
|
155
|
+
variant :f_double_sharp,
|
156
|
+
accidental: Accidental.double_sharp,
|
157
|
+
circle_of_fifths?: false
|
74
158
|
end
|
75
159
|
|
76
160
|
with_options pitch_class: PitchClass.g do
|
77
|
-
variant :g_double_flat,
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
variant :
|
161
|
+
variant :g_double_flat,
|
162
|
+
accidental: Accidental.double_flat,
|
163
|
+
circle_of_fifths?: false
|
164
|
+
|
165
|
+
variant :g_flat,
|
166
|
+
accidental: Accidental.flat,
|
167
|
+
circle_of_fifths?: true
|
168
|
+
|
169
|
+
variant :g_natural,
|
170
|
+
accidental: Accidental.natural,
|
171
|
+
circle_of_fifths?: true
|
172
|
+
|
173
|
+
variant :g_sharp,
|
174
|
+
accidental: Accidental.sharp,
|
175
|
+
circle_of_fifths?: false
|
176
|
+
|
177
|
+
variant :g_double_sharp,
|
178
|
+
accidental: Accidental.double_sharp,
|
179
|
+
circle_of_fifths?: false
|
82
180
|
end
|
83
181
|
|
84
182
|
def +(other)
|
@@ -116,6 +214,10 @@ module Stave
|
|
116
214
|
note_above(interval.invert!)
|
117
215
|
end
|
118
216
|
|
217
|
+
def self.double_flats
|
218
|
+
where(accidental: Accidental.double_flat)
|
219
|
+
end
|
220
|
+
|
119
221
|
def self.flats
|
120
222
|
where(accidental: Accidental.flat)
|
121
223
|
end
|
@@ -128,12 +230,16 @@ module Stave
|
|
128
230
|
where(accidental: Accidental.sharp)
|
129
231
|
end
|
130
232
|
|
233
|
+
def self.double_sharps
|
234
|
+
where(accidental: Accidental.double_sharp)
|
235
|
+
end
|
236
|
+
|
131
237
|
def self.single_accidental
|
132
238
|
flats + naturals + sharps
|
133
239
|
end
|
134
240
|
|
135
241
|
def self.circle_of_fifths
|
136
|
-
|
242
|
+
where(circle_of_fifths?: true)
|
137
243
|
end
|
138
244
|
end
|
139
245
|
end
|
data/lib/stave/theory/scale.rb
CHANGED
@@ -6,13 +6,13 @@ module Stave
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def triads
|
9
|
-
return unless type.
|
9
|
+
return unless type.heptatonic?
|
10
10
|
|
11
11
|
harmonise!(type.triad_types)
|
12
12
|
end
|
13
13
|
|
14
14
|
def sevenths
|
15
|
-
return unless type.
|
15
|
+
return unless type.heptatonic?
|
16
16
|
|
17
17
|
harmonise!(type.seventh_types)
|
18
18
|
end
|
@@ -26,6 +26,10 @@ module Stave
|
|
26
26
|
)
|
27
27
|
end
|
28
28
|
|
29
|
+
def symbol
|
30
|
+
"#{root.symbol} #{type.symbol}"
|
31
|
+
end
|
32
|
+
|
29
33
|
private
|
30
34
|
|
31
35
|
def harmonise!(chord_types)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Stave
|
2
2
|
module Theory
|
3
3
|
class ScaleType < Core::DegreeCollection
|
4
|
-
variant :major, degrees: [
|
4
|
+
variant :major, symbol: "major", degrees: [
|
5
5
|
Degree.root,
|
6
6
|
Degree.two,
|
7
7
|
Degree.three,
|
@@ -12,7 +12,7 @@ module Stave
|
|
12
12
|
Degree.octave
|
13
13
|
]
|
14
14
|
|
15
|
-
variant :minor, degrees: [
|
15
|
+
variant :minor, symbol: "minor", degrees: [
|
16
16
|
Degree.root,
|
17
17
|
Degree.two,
|
18
18
|
Degree.flat_three,
|
@@ -24,7 +24,7 @@ module Stave
|
|
24
24
|
]
|
25
25
|
|
26
26
|
with_options suffix: :pentatonic do
|
27
|
-
variant :major, degrees: [
|
27
|
+
variant :major, symbol: "major pentatonic", degrees: [
|
28
28
|
Degree.root,
|
29
29
|
Degree.two,
|
30
30
|
Degree.three,
|
@@ -33,7 +33,7 @@ module Stave
|
|
33
33
|
Degree.octave
|
34
34
|
]
|
35
35
|
|
36
|
-
variant :minor, degrees: [
|
36
|
+
variant :minor, symbol: "minor pentatonic", degrees: [
|
37
37
|
Degree.root,
|
38
38
|
Degree.flat_three,
|
39
39
|
Degree.four,
|
@@ -47,7 +47,7 @@ module Stave
|
|
47
47
|
count == 5
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
50
|
+
def heptatonic?
|
51
51
|
count == 7
|
52
52
|
end
|
53
53
|
|
data/lib/stave/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stave
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Welham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zeitwerk
|