head_music 6.0.0 → 7.0.0
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/.rubocop.yml +4 -1
- data/lib/head_music/consonance.rb +1 -1
- data/lib/head_music/content/composition.rb +3 -2
- data/lib/head_music/content/position.rb +0 -4
- data/lib/head_music/content/voice.rb +7 -1
- data/lib/head_music/data/instruments.yml +118 -127
- data/lib/head_music/diatonic_interval/category.rb +24 -0
- data/lib/head_music/diatonic_interval/naming.rb +73 -0
- data/lib/head_music/diatonic_interval/parser.rb +47 -0
- data/lib/head_music/diatonic_interval/semitones.rb +36 -0
- data/lib/head_music/diatonic_interval/size.rb +50 -0
- data/lib/head_music/diatonic_interval.rb +1 -229
- data/lib/head_music/instrument/staff.rb +1 -1
- data/lib/head_music/instrument/staff_scheme.rb +3 -3
- data/lib/head_music/instrument/{pitch_variant.rb → variant.rb} +6 -6
- data/lib/head_music/instrument.rb +9 -9
- data/lib/head_music/key_signature/enharmonic_equivalence.rb +26 -0
- data/lib/head_music/key_signature.rb +12 -35
- data/lib/head_music/locales/en.yml +1 -14
- data/lib/head_music/motion.rb +3 -1
- data/lib/head_music/named.rb +0 -4
- data/lib/head_music/pitch_class_set.rb +2 -5
- data/lib/head_music/scale.rb +4 -0
- data/lib/head_music/scale_degree.rb +9 -4
- data/lib/head_music/style/guidelines/notes_same_length.rb +0 -4
- data/lib/head_music/style/mark.rb +1 -4
- data/lib/head_music/version.rb +1 -1
- data/lib/head_music.rb +7 -1
- metadata +9 -3
@@ -100,6 +100,7 @@ en:
|
|
100
100
|
wind_instrument: wind instrument
|
101
101
|
wood: wood
|
102
102
|
woodwind: woodwind
|
103
|
+
instrument_with_pitch_designation: "%{instrument} in %{pitch_designation}"
|
103
104
|
instrument_voices:
|
104
105
|
piccolo: piccolo
|
105
106
|
soprano: soprano
|
@@ -126,27 +127,17 @@ en:
|
|
126
127
|
bass_oboe: bass oboe
|
127
128
|
bass_trombone: bass trombone
|
128
129
|
bass_trumpet: bass trumpet
|
129
|
-
bass_trumpet_in_b_flat: bass trumpet in B♭
|
130
|
-
bass_trumpet_in_c: bass trumpet in C
|
131
|
-
bass_trumpet_in_e_flat: bass trumpet in E♭
|
132
130
|
bass_tuba: bass tuba
|
133
|
-
bass_tuba_in_e_flat: bass tuba in E♭
|
134
|
-
bass_tuba_in_f: bass tuba in F
|
135
131
|
bass_voice: bass
|
136
132
|
basset_horn: basset horn
|
137
133
|
bassoon: bassoon
|
138
134
|
bugle: bugle
|
139
|
-
bugle_in_b_flat: bugle in B♭
|
140
135
|
castanets: castanets
|
141
136
|
celesta: celesta
|
142
137
|
cello: cello
|
143
138
|
chimes: chimes
|
144
139
|
cimbalom: cimbalom
|
145
140
|
clarinet: clarinet
|
146
|
-
clarinet_in_a: clarinet in A
|
147
|
-
clarinet_in_c: clarinet in C
|
148
|
-
clarinet_in_d: clarinet in D
|
149
|
-
clarinet_in_e_flat: clarinet in E♭
|
150
141
|
clash_cymbals: clash cymbals
|
151
142
|
clavichord: clavichord
|
152
143
|
contrabass_clarinet: contrabass clarinet
|
@@ -202,11 +193,7 @@ en:
|
|
202
193
|
triangle: triangle
|
203
194
|
trombone: trombone
|
204
195
|
trumpet: trumpet
|
205
|
-
trumpet_in_c: trumpet in C
|
206
|
-
trumpet_in_d: trumpet in D
|
207
|
-
trumpet_in_e_flat: trumpet in E♭
|
208
196
|
tuba: tuba
|
209
|
-
tuba_in_c: tuba in C
|
210
197
|
tubular_bells: tubular bells
|
211
198
|
vibraphone: vibraphone
|
212
199
|
viola: viola
|
data/lib/head_music/motion.rb
CHANGED
@@ -48,7 +48,9 @@ class HeadMusic::Motion
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def to_s
|
51
|
-
"
|
51
|
+
return "repetition of a #{second_harmonic_interval}" unless contrapuntal_motion != :repetition
|
52
|
+
|
53
|
+
"#{contrapuntal_motion} motion from a #{first_harmonic_interval} to a #{second_harmonic_interval}"
|
52
54
|
end
|
53
55
|
|
54
56
|
private
|
data/lib/head_music/named.rb
CHANGED
@@ -10,13 +10,10 @@ class HeadMusic::PitchClassSet
|
|
10
10
|
@pitch_classes = identifiers.map { |identifier| HeadMusic::PitchClass.get(identifier) }.uniq.sort
|
11
11
|
end
|
12
12
|
|
13
|
-
def inspect
|
14
|
-
pitch_classes.map(&:to_s).join(" ")
|
15
|
-
end
|
16
|
-
|
17
13
|
def to_s
|
18
|
-
pitch_classes.map(&:
|
14
|
+
pitch_classes.map(&:to_i).inspect
|
19
15
|
end
|
16
|
+
alias_method :inspect, :to_s
|
20
17
|
|
21
18
|
def ==(other)
|
22
19
|
pitch_classes == other.pitch_classes
|
data/lib/head_music/scale.rb
CHANGED
@@ -28,6 +28,10 @@ class HeadMusic::Scale
|
|
28
28
|
@pitches[direction][octaves] ||= determine_scale_pitches(direction, octaves)
|
29
29
|
end
|
30
30
|
|
31
|
+
def pitch_classes
|
32
|
+
pitches.map(&:pitch_class).uniq
|
33
|
+
end
|
34
|
+
|
31
35
|
def spellings(direction: :ascending, octaves: 1)
|
32
36
|
pitches(direction: direction, octaves: octaves).map(&:spelling).map(&:to_s)
|
33
37
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# A scale degree is a number indicating the ordinality of the spelling in the key
|
1
|
+
# A scale degree is a number indicating the ordinality of the spelling in the key.
|
2
2
|
# TODO: Rewrite to accept a tonal_center and a scale type.
|
3
3
|
class HeadMusic::ScaleDegree
|
4
4
|
include Comparable
|
@@ -20,20 +20,25 @@ class HeadMusic::ScaleDegree
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def alteration
|
23
|
-
|
23
|
+
spelling_alteration_semitones = spelling.alteration&.semitones || 0
|
24
24
|
usual_sign_semitones = scale_degree_usual_spelling.alteration&.semitones || 0
|
25
|
-
delta =
|
25
|
+
delta = spelling_alteration_semitones - usual_sign_semitones
|
26
26
|
HeadMusic::Alteration.by(:semitones, delta) if delta != 0
|
27
27
|
end
|
28
28
|
|
29
|
+
def alteration_semitones
|
30
|
+
alteration&.semitones || 0
|
31
|
+
end
|
32
|
+
|
29
33
|
def to_s
|
30
34
|
"#{alteration}#{degree}"
|
31
35
|
end
|
32
36
|
|
33
37
|
def <=>(other)
|
34
38
|
if other.is_a?(HeadMusic::ScaleDegree)
|
35
|
-
[degree,
|
39
|
+
[degree, alteration_semitones] <=> [other.degree, other.alteration_semitones]
|
36
40
|
else
|
41
|
+
# TODO: Improve this
|
37
42
|
to_s <=> other.to_s
|
38
43
|
end
|
39
44
|
end
|
@@ -37,10 +37,6 @@ class HeadMusic::Style::Guidelines::NotesSameLength < HeadMusic::Style::Annotati
|
|
37
37
|
notes[0..-2]
|
38
38
|
end
|
39
39
|
|
40
|
-
def distinct_values
|
41
|
-
all_but_last_note.map(&:rhythmic_value).uniq.length
|
42
|
-
end
|
43
|
-
|
44
40
|
def first_most_common_rhythmic_value
|
45
41
|
@first_most_common_rhythmic_value ||= begin
|
46
42
|
candidates = most_common_rhythmic_values
|
data/lib/head_music/version.rb
CHANGED
data/lib/head_music.rb
CHANGED
@@ -38,14 +38,20 @@ require "head_music/circle"
|
|
38
38
|
require "head_music/clef"
|
39
39
|
require "head_music/consonance"
|
40
40
|
require "head_music/diatonic_interval"
|
41
|
+
require "head_music/diatonic_interval/category"
|
42
|
+
require "head_music/diatonic_interval/naming"
|
43
|
+
require "head_music/diatonic_interval/parser"
|
44
|
+
require "head_music/diatonic_interval/semitones"
|
45
|
+
require "head_music/diatonic_interval/size"
|
41
46
|
require "head_music/harmonic_interval"
|
42
47
|
require "head_music/instrument_family"
|
43
48
|
require "head_music/instrument"
|
44
|
-
require "head_music/instrument/pitch_variant"
|
45
49
|
require "head_music/instrument/staff_scheme"
|
46
50
|
require "head_music/instrument/staff"
|
51
|
+
require "head_music/instrument/variant"
|
47
52
|
require "head_music/interval_cycle"
|
48
53
|
require "head_music/key_signature"
|
54
|
+
require "head_music/key_signature/enharmonic_equivalence"
|
49
55
|
require "head_music/letter_name"
|
50
56
|
require "head_music/melodic_interval"
|
51
57
|
require "head_music/meter"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: head_music
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Head
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -136,14 +136,20 @@ files:
|
|
136
136
|
- lib/head_music/data/instrument_families.yml
|
137
137
|
- lib/head_music/data/instruments.yml
|
138
138
|
- lib/head_music/diatonic_interval.rb
|
139
|
+
- lib/head_music/diatonic_interval/category.rb
|
140
|
+
- lib/head_music/diatonic_interval/naming.rb
|
141
|
+
- lib/head_music/diatonic_interval/parser.rb
|
142
|
+
- lib/head_music/diatonic_interval/semitones.rb
|
143
|
+
- lib/head_music/diatonic_interval/size.rb
|
139
144
|
- lib/head_music/harmonic_interval.rb
|
140
145
|
- lib/head_music/instrument.rb
|
141
|
-
- lib/head_music/instrument/pitch_variant.rb
|
142
146
|
- lib/head_music/instrument/staff.rb
|
143
147
|
- lib/head_music/instrument/staff_scheme.rb
|
148
|
+
- lib/head_music/instrument/variant.rb
|
144
149
|
- lib/head_music/instrument_family.rb
|
145
150
|
- lib/head_music/interval_cycle.rb
|
146
151
|
- lib/head_music/key_signature.rb
|
152
|
+
- lib/head_music/key_signature/enharmonic_equivalence.rb
|
147
153
|
- lib/head_music/letter_name.rb
|
148
154
|
- lib/head_music/locales/de.yml
|
149
155
|
- lib/head_music/locales/en.yml
|