head_music 9.0.1 → 11.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/.github/workflows/ci.yml +9 -3
- data/CHANGELOG.md +18 -0
- data/CLAUDE.md +35 -15
- data/Gemfile +7 -1
- data/Gemfile.lock +91 -3
- data/README.md +18 -0
- data/Rakefile +7 -2
- data/head_music.gemspec +1 -1
- data/lib/head_music/analysis/dyad.rb +229 -0
- data/lib/head_music/analysis/melodic_interval.rb +1 -1
- data/lib/head_music/analysis/pitch_class_set.rb +111 -14
- data/lib/head_music/analysis/{pitch_set.rb → pitch_collection.rb} +11 -5
- data/lib/head_music/analysis/sonority.rb +50 -12
- data/lib/head_music/content/staff.rb +1 -1
- data/lib/head_music/content/voice.rb +1 -1
- data/lib/head_music/instruments/alternate_tuning.rb +102 -0
- data/lib/head_music/instruments/alternate_tunings.yml +78 -0
- data/lib/head_music/instruments/instrument.rb +251 -82
- data/lib/head_music/instruments/instrument_configuration.rb +66 -0
- data/lib/head_music/instruments/instrument_configuration_option.rb +38 -0
- data/lib/head_music/instruments/instrument_configurations.yml +288 -0
- data/lib/head_music/instruments/instrument_families.yml +77 -0
- data/lib/head_music/instruments/instrument_family.rb +3 -4
- data/lib/head_music/instruments/instruments.yml +795 -965
- data/lib/head_music/instruments/playing_technique.rb +75 -0
- data/lib/head_music/instruments/playing_techniques.yml +826 -0
- data/lib/head_music/instruments/score_order.rb +2 -5
- data/lib/head_music/instruments/staff.rb +61 -1
- data/lib/head_music/instruments/staff_scheme.rb +6 -4
- data/lib/head_music/instruments/stringing.rb +115 -0
- data/lib/head_music/instruments/stringing_course.rb +58 -0
- data/lib/head_music/instruments/stringings.yml +168 -0
- data/lib/head_music/instruments/variant.rb +0 -1
- data/lib/head_music/locales/de.yml +23 -0
- data/lib/head_music/locales/en.yml +100 -0
- data/lib/head_music/locales/es.yml +23 -0
- data/lib/head_music/locales/fr.yml +23 -0
- data/lib/head_music/locales/it.yml +23 -0
- data/lib/head_music/locales/ru.yml +23 -0
- data/lib/head_music/{rudiment → notation}/musical_symbol.rb +3 -3
- data/lib/head_music/notation/staff_mapping.rb +70 -0
- data/lib/head_music/notation/staff_position.rb +62 -0
- data/lib/head_music/notation.rb +7 -0
- data/lib/head_music/rudiment/alteration.rb +17 -47
- data/lib/head_music/rudiment/alterations.yml +32 -0
- data/lib/head_music/rudiment/chromatic_interval.rb +1 -1
- data/lib/head_music/rudiment/clef.rb +1 -1
- data/lib/head_music/rudiment/consonance.rb +14 -13
- data/lib/head_music/rudiment/key_signature.rb +0 -26
- data/lib/head_music/rudiment/rhythmic_unit/parser.rb +2 -2
- data/lib/head_music/rudiment/rhythmic_value/parser.rb +1 -1
- data/lib/head_music/rudiment/rhythmic_value.rb +1 -1
- data/lib/head_music/rudiment/spelling.rb +3 -0
- data/lib/head_music/rudiment/tempo.rb +1 -1
- data/lib/head_music/rudiment/tuning/just_intonation.rb +0 -39
- data/lib/head_music/rudiment/tuning/meantone.rb +0 -39
- data/lib/head_music/rudiment/tuning/pythagorean.rb +0 -39
- data/lib/head_music/rudiment/tuning.rb +20 -0
- data/lib/head_music/style/guidelines/consonant_climax.rb +2 -2
- data/lib/head_music/style/modern_tradition.rb +8 -11
- data/lib/head_music/style/tradition.rb +1 -1
- data/lib/head_music/time/clock_position.rb +84 -0
- data/lib/head_music/time/conductor.rb +264 -0
- data/lib/head_music/time/meter_event.rb +37 -0
- data/lib/head_music/time/meter_map.rb +173 -0
- data/lib/head_music/time/musical_position.rb +188 -0
- data/lib/head_music/time/smpte_timecode.rb +164 -0
- data/lib/head_music/time/tempo_event.rb +40 -0
- data/lib/head_music/time/tempo_map.rb +187 -0
- data/lib/head_music/time.rb +32 -0
- data/lib/head_music/utilities/case.rb +27 -0
- data/lib/head_music/utilities/hash_key.rb +1 -1
- data/lib/head_music/version.rb +1 -1
- data/lib/head_music.rb +41 -13
- data/user_stories/active/string-pitches.md +41 -0
- data/user_stories/backlog/notation-style.md +183 -0
- data/user_stories/{todo → backlog}/organizing-content.md +9 -1
- data/user_stories/done/consonance-dissonance-classification.md +117 -0
- data/user_stories/{todo → done}/dyad-analysis.md +4 -6
- data/user_stories/done/expand-playing-techniques.md +38 -0
- data/user_stories/{active → done}/handle-time.rb +5 -19
- data/user_stories/done/instrument-architecture.md +238 -0
- data/user_stories/done/move-musical-symbol-to-notation.md +161 -0
- data/user_stories/done/move-staff-mapping-to-notation.md +158 -0
- data/user_stories/done/move-staff-position-to-notation.md +141 -0
- data/user_stories/done/notation-module-foundation.md +102 -0
- data/user_stories/done/percussion_set.md +260 -0
- data/user_stories/{todo → done}/pitch-class-set-analysis.md +0 -40
- data/user_stories/done/sonority-identification.md +37 -0
- data/user_stories/epics/notation-module.md +135 -0
- data/user_stories/{todo → visioning}/agentic-daw.md +0 -1
- metadata +55 -20
- data/check_instrument_consistency.rb +0 -0
- data/lib/head_music/instruments/instrument_type.rb +0 -188
- data/test_translations.rb +0 -15
- data/user_stories/todo/consonance-dissonance-classification.md +0 -57
- data/user_stories/todo/material-and-scores.md +0 -10
- data/user_stories/todo/percussion_set.md +0 -1
- data/user_stories/todo/pitch-set-classification.md +0 -72
- data/user_stories/todo/sonority-identification.md +0 -67
- /data/user_stories/{active → done}/handle-time.md +0 -0
|
@@ -72,14 +72,11 @@ class HeadMusic::Instruments::ScoreOrder
|
|
|
72
72
|
# Return if already an Instrument instance
|
|
73
73
|
return input if input.is_a?(HeadMusic::Instruments::Instrument)
|
|
74
74
|
|
|
75
|
-
# Return InstrumentType instances as-is for backward compatibility (duck typing)
|
|
76
|
-
return input.default_instrument if input.is_a?(HeadMusic::Instruments::InstrumentType)
|
|
77
|
-
|
|
78
75
|
# Return other objects that respond to required methods (mock objects, etc.)
|
|
79
76
|
return input if input.respond_to?(:name_key) && input.respond_to?(:family_key)
|
|
80
77
|
|
|
81
78
|
# Create an Instrument instance for string inputs
|
|
82
|
-
HeadMusic::Instruments::Instrument.get(input)
|
|
79
|
+
HeadMusic::Instruments::Instrument.get(input)
|
|
83
80
|
end
|
|
84
81
|
|
|
85
82
|
# Builds an index mapping instrument names to their position in the order
|
|
@@ -120,7 +117,7 @@ class HeadMusic::Instruments::ScoreOrder
|
|
|
120
117
|
end
|
|
121
118
|
|
|
122
119
|
# Try normalized name (lowercase, underscored)
|
|
123
|
-
normalized = instrument.name
|
|
120
|
+
normalized = HeadMusic::Utilities::Case.to_snake_case(instrument.name)
|
|
124
121
|
return ordering_index[normalized] if ordering_index.key?(normalized)
|
|
125
122
|
|
|
126
123
|
nil
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# Namespace for instrument definitions, categorization, and configuration
|
|
2
1
|
module HeadMusic::Instruments; end
|
|
3
2
|
|
|
4
3
|
class HeadMusic::Instruments::Staff
|
|
@@ -30,4 +29,65 @@ class HeadMusic::Instruments::Staff
|
|
|
30
29
|
def name
|
|
31
30
|
name_key.to_s.tr("_", " ")
|
|
32
31
|
end
|
|
32
|
+
|
|
33
|
+
# Get all staff mappings for composite instruments
|
|
34
|
+
#
|
|
35
|
+
# @return [Array<Notation::StaffMapping>] array of staff mappings
|
|
36
|
+
# @example
|
|
37
|
+
# drum_kit_staff.mappings #=> [#<Notation::StaffMapping...>, #<Notation::StaffMapping...>]
|
|
38
|
+
def mappings
|
|
39
|
+
@mappings ||= parse_mappings
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Find the staff mapping at a specific position
|
|
43
|
+
#
|
|
44
|
+
# @param position_index [Integer] the staff position index
|
|
45
|
+
# @return [Notation::StaffMapping, nil] the mapping at that position or nil
|
|
46
|
+
# @example
|
|
47
|
+
# staff.mapping_for_position(4) #=> #<Notation::StaffMapping instrument: snare_drum...>
|
|
48
|
+
def mapping_for_position(position_index)
|
|
49
|
+
mappings.find { |mapping| mapping.position_index == position_index }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Get the instrument at a specific staff position
|
|
53
|
+
#
|
|
54
|
+
# @param position_index [Integer] the staff position index
|
|
55
|
+
# @return [Instrument, nil] the instrument at that position or nil
|
|
56
|
+
# @example
|
|
57
|
+
# staff.instrument_for_position(4) #=> #<Instrument name: "snare drum">
|
|
58
|
+
def instrument_for_position(position_index)
|
|
59
|
+
mapping = mapping_for_position(position_index)
|
|
60
|
+
mapping&.instrument
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Get all staff positions for a given instrument
|
|
64
|
+
#
|
|
65
|
+
# This is useful for instruments that appear at multiple positions
|
|
66
|
+
# (e.g., hi-hat with stick and pedal techniques)
|
|
67
|
+
#
|
|
68
|
+
# @param instrument_key [String, Symbol] the instrument key
|
|
69
|
+
# @return [Array<Integer>] array of position indices
|
|
70
|
+
# @example
|
|
71
|
+
# staff.positions_for_instrument("hi_hat") #=> [-1, 9]
|
|
72
|
+
def positions_for_instrument(instrument_key)
|
|
73
|
+
mappings.select { |mapping| mapping.instrument_key.to_s == instrument_key.to_s }
|
|
74
|
+
.map(&:position_index)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Get all unique instruments used in this staff's mappings
|
|
78
|
+
#
|
|
79
|
+
# @return [Array<Instrument>] array of unique instruments
|
|
80
|
+
# @example
|
|
81
|
+
# drum_kit_staff.components #=> [#<Instrument: bass_drum>, #<Instrument: snare_drum>, ...]
|
|
82
|
+
def components
|
|
83
|
+
mappings.map(&:instrument).compact.uniq
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
def parse_mappings
|
|
89
|
+
mappings_data = attributes["mappings"] || []
|
|
90
|
+
|
|
91
|
+
mappings_data.map { |mapping_attrs| HeadMusic::Notation::StaffMapping.new(mapping_attrs) }
|
|
92
|
+
end
|
|
33
93
|
end
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
require_relative "staff"
|
|
2
2
|
|
|
3
|
-
# Namespace for instrument definitions, categorization, and configuration
|
|
4
3
|
module HeadMusic::Instruments; end
|
|
5
4
|
|
|
6
5
|
class HeadMusic::Instruments::StaffScheme
|
|
7
|
-
attr_reader :
|
|
6
|
+
attr_reader :instrument, :key, :list
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
# For backward compatibility, also alias as variant
|
|
9
|
+
alias_method :variant, :instrument
|
|
10
|
+
|
|
11
|
+
def initialize(key:, list:, instrument: nil, variant: nil)
|
|
12
|
+
@instrument = instrument || variant
|
|
11
13
|
@key = key || "default"
|
|
12
14
|
@list = list
|
|
13
15
|
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
module HeadMusic::Instruments; end
|
|
2
|
+
|
|
3
|
+
# The string configuration for a stringed instrument.
|
|
4
|
+
#
|
|
5
|
+
# A Stringing defines the courses (strings) of an instrument and their
|
|
6
|
+
# standard tuning pitches. Each course can have one or more strings.
|
|
7
|
+
#
|
|
8
|
+
# Examples:
|
|
9
|
+
# guitar = HeadMusic::Instruments::Instrument.get("guitar")
|
|
10
|
+
# stringing = HeadMusic::Instruments::Stringing.for_instrument(guitar)
|
|
11
|
+
# stringing.courses.map(&:standard_pitch) # => [E2, A2, D3, G3, B3, E4]
|
|
12
|
+
class HeadMusic::Instruments::Stringing
|
|
13
|
+
STRINGINGS = YAML.load_file(File.expand_path("stringings.yml", __dir__)).freeze
|
|
14
|
+
|
|
15
|
+
attr_reader :instrument_key, :courses
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
# Find the stringing for an instrument
|
|
19
|
+
# @param instrument [HeadMusic::Instruments::Instrument, String, Symbol] The instrument
|
|
20
|
+
# @return [Stringing, nil]
|
|
21
|
+
def for_instrument(instrument)
|
|
22
|
+
instrument_key = normalize_instrument_key(instrument)
|
|
23
|
+
return nil unless instrument_key
|
|
24
|
+
|
|
25
|
+
data = find_stringing_data(instrument_key, instrument)
|
|
26
|
+
return nil unless data
|
|
27
|
+
|
|
28
|
+
new(instrument_key: instrument_key, courses_data: data["courses"])
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def normalize_instrument_key(instrument)
|
|
34
|
+
case instrument
|
|
35
|
+
when HeadMusic::Instruments::Instrument
|
|
36
|
+
instrument.name_key.to_s
|
|
37
|
+
else
|
|
38
|
+
instrument.to_s
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def find_stringing_data(instrument_key, instrument)
|
|
43
|
+
# Direct match
|
|
44
|
+
return STRINGINGS[instrument_key] if STRINGINGS.key?(instrument_key)
|
|
45
|
+
|
|
46
|
+
# Try parent instrument if this is an Instrument object
|
|
47
|
+
if instrument.is_a?(HeadMusic::Instruments::Instrument) && instrument.parent
|
|
48
|
+
parent_key = instrument.parent.name_key.to_s
|
|
49
|
+
return STRINGINGS[parent_key] if STRINGINGS.key?(parent_key)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
nil
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def initialize(instrument_key:, courses_data:)
|
|
57
|
+
@instrument_key = instrument_key.to_sym
|
|
58
|
+
@courses = build_courses(courses_data)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# The instrument this stringing belongs to
|
|
62
|
+
# @return [HeadMusic::Instruments::Instrument]
|
|
63
|
+
def instrument
|
|
64
|
+
HeadMusic::Instruments::Instrument.get(instrument_key)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Number of courses
|
|
68
|
+
# @return [Integer]
|
|
69
|
+
def course_count
|
|
70
|
+
courses.length
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Total number of physical strings across all courses
|
|
74
|
+
# @return [Integer]
|
|
75
|
+
def string_count
|
|
76
|
+
courses.sum(&:string_count)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Standard pitches for each course (primary string only)
|
|
80
|
+
# @return [Array<HeadMusic::Rudiment::Pitch>]
|
|
81
|
+
def standard_pitches
|
|
82
|
+
courses.map(&:standard_pitch)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Apply an alternate tuning to get adjusted pitches
|
|
86
|
+
# @param tuning [AlternateTuning] The alternate tuning to apply
|
|
87
|
+
# @return [Array<HeadMusic::Rudiment::Pitch>]
|
|
88
|
+
def pitches_with_tuning(tuning)
|
|
89
|
+
courses.each_with_index.map do |course, index|
|
|
90
|
+
semitone_adjustment = tuning.semitones[index] || 0
|
|
91
|
+
HeadMusic::Rudiment::Pitch.from_number(course.standard_pitch.to_i + semitone_adjustment)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def ==(other)
|
|
96
|
+
return false unless other.is_a?(self.class)
|
|
97
|
+
|
|
98
|
+
instrument_key == other.instrument_key && courses == other.courses
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def to_s
|
|
102
|
+
"#{course_count}-course stringing for #{instrument_key}"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
|
|
107
|
+
def build_courses(courses_data)
|
|
108
|
+
courses_data.map do |course_data|
|
|
109
|
+
HeadMusic::Instruments::StringingCourse.new(
|
|
110
|
+
standard_pitch: course_data["pitch"],
|
|
111
|
+
course_semitones: course_data["course_semitones"] || []
|
|
112
|
+
)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module HeadMusic::Instruments; end
|
|
2
|
+
|
|
3
|
+
# A single course (string or set of strings) on a stringed instrument.
|
|
4
|
+
#
|
|
5
|
+
# A "course" is a set of strings that are played together. On most guitars,
|
|
6
|
+
# each course has a single string. On a 12-string guitar or mandolin,
|
|
7
|
+
# courses have multiple strings tuned in unison or octaves.
|
|
8
|
+
#
|
|
9
|
+
# Examples:
|
|
10
|
+
# - 6-string guitar: 6 courses, each with 1 string
|
|
11
|
+
# - 12-string guitar: 6 courses, each with 2 strings (octave or unison)
|
|
12
|
+
# - Mandolin: 4 courses, each with 2 strings in unison
|
|
13
|
+
class HeadMusic::Instruments::StringingCourse
|
|
14
|
+
attr_reader :standard_pitch, :course_semitones
|
|
15
|
+
|
|
16
|
+
# @param standard_pitch [HeadMusic::Rudiment::Pitch, String] The pitch of the primary string
|
|
17
|
+
# @param course_semitones [Array<Integer>] Semitone offsets for additional strings in the course
|
|
18
|
+
def initialize(standard_pitch:, course_semitones: [])
|
|
19
|
+
@standard_pitch = HeadMusic::Rudiment::Pitch.get(standard_pitch)
|
|
20
|
+
@course_semitones = Array(course_semitones)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Returns all pitches in this course (primary + additional strings)
|
|
24
|
+
# @return [Array<HeadMusic::Rudiment::Pitch>]
|
|
25
|
+
def pitches
|
|
26
|
+
[standard_pitch] + additional_pitches
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Returns the number of physical strings in this course
|
|
30
|
+
# @return [Integer]
|
|
31
|
+
def string_count
|
|
32
|
+
1 + course_semitones.length
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Whether this course has multiple strings
|
|
36
|
+
# @return [Boolean]
|
|
37
|
+
def doubled?
|
|
38
|
+
course_semitones.any?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def ==(other)
|
|
42
|
+
return false unless other.is_a?(self.class)
|
|
43
|
+
|
|
44
|
+
standard_pitch == other.standard_pitch && course_semitones == other.course_semitones
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def to_s
|
|
48
|
+
standard_pitch.to_s
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def additional_pitches
|
|
54
|
+
course_semitones.map do |semitones|
|
|
55
|
+
HeadMusic::Rudiment::Pitch.from_number(standard_pitch.to_i + semitones)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Stringing configurations for stringed instruments.
|
|
2
|
+
#
|
|
3
|
+
# Each instrument has courses (strings played together).
|
|
4
|
+
# course_semitones defines additional strings in a course relative to the pitch.
|
|
5
|
+
#
|
|
6
|
+
# Examples:
|
|
7
|
+
# - [] = single string
|
|
8
|
+
# - [12] = doubled an octave higher
|
|
9
|
+
# - [0] = doubled in unison
|
|
10
|
+
|
|
11
|
+
guitar:
|
|
12
|
+
courses:
|
|
13
|
+
- pitch: E2
|
|
14
|
+
- pitch: A2
|
|
15
|
+
- pitch: D3
|
|
16
|
+
- pitch: G3
|
|
17
|
+
- pitch: B3
|
|
18
|
+
- pitch: E4
|
|
19
|
+
|
|
20
|
+
twelve_string_guitar:
|
|
21
|
+
courses:
|
|
22
|
+
- pitch: E2
|
|
23
|
+
course_semitones: [12]
|
|
24
|
+
- pitch: A2
|
|
25
|
+
course_semitones: [12]
|
|
26
|
+
- pitch: D3
|
|
27
|
+
course_semitones: [12]
|
|
28
|
+
- pitch: G3
|
|
29
|
+
course_semitones: [12]
|
|
30
|
+
- pitch: B3
|
|
31
|
+
course_semitones: [0]
|
|
32
|
+
- pitch: E4
|
|
33
|
+
course_semitones: [0]
|
|
34
|
+
|
|
35
|
+
bass_guitar:
|
|
36
|
+
courses:
|
|
37
|
+
- pitch: E1
|
|
38
|
+
- pitch: A1
|
|
39
|
+
- pitch: D2
|
|
40
|
+
- pitch: G2
|
|
41
|
+
|
|
42
|
+
five_string_bass:
|
|
43
|
+
courses:
|
|
44
|
+
- pitch: B0
|
|
45
|
+
- pitch: E1
|
|
46
|
+
- pitch: A1
|
|
47
|
+
- pitch: D2
|
|
48
|
+
- pitch: G2
|
|
49
|
+
|
|
50
|
+
six_string_bass:
|
|
51
|
+
courses:
|
|
52
|
+
- pitch: B0
|
|
53
|
+
- pitch: E1
|
|
54
|
+
- pitch: A1
|
|
55
|
+
- pitch: D2
|
|
56
|
+
- pitch: G2
|
|
57
|
+
- pitch: C3
|
|
58
|
+
|
|
59
|
+
ukulele:
|
|
60
|
+
courses:
|
|
61
|
+
- pitch: G4
|
|
62
|
+
- pitch: C4
|
|
63
|
+
- pitch: E4
|
|
64
|
+
- pitch: A4
|
|
65
|
+
|
|
66
|
+
baritone_ukulele:
|
|
67
|
+
courses:
|
|
68
|
+
- pitch: D3
|
|
69
|
+
- pitch: G3
|
|
70
|
+
- pitch: B3
|
|
71
|
+
- pitch: E4
|
|
72
|
+
|
|
73
|
+
mandolin:
|
|
74
|
+
courses:
|
|
75
|
+
- pitch: G3
|
|
76
|
+
course_semitones: [0]
|
|
77
|
+
- pitch: D4
|
|
78
|
+
course_semitones: [0]
|
|
79
|
+
- pitch: A4
|
|
80
|
+
course_semitones: [0]
|
|
81
|
+
- pitch: E5
|
|
82
|
+
course_semitones: [0]
|
|
83
|
+
|
|
84
|
+
banjo:
|
|
85
|
+
courses:
|
|
86
|
+
- pitch: G4
|
|
87
|
+
- pitch: D3
|
|
88
|
+
- pitch: G3
|
|
89
|
+
- pitch: B3
|
|
90
|
+
- pitch: D4
|
|
91
|
+
|
|
92
|
+
violin:
|
|
93
|
+
courses:
|
|
94
|
+
- pitch: G3
|
|
95
|
+
- pitch: D4
|
|
96
|
+
- pitch: A4
|
|
97
|
+
- pitch: E5
|
|
98
|
+
|
|
99
|
+
viola:
|
|
100
|
+
courses:
|
|
101
|
+
- pitch: C3
|
|
102
|
+
- pitch: G3
|
|
103
|
+
- pitch: D4
|
|
104
|
+
- pitch: A4
|
|
105
|
+
|
|
106
|
+
cello:
|
|
107
|
+
courses:
|
|
108
|
+
- pitch: C2
|
|
109
|
+
- pitch: G2
|
|
110
|
+
- pitch: D3
|
|
111
|
+
- pitch: A3
|
|
112
|
+
|
|
113
|
+
double_bass:
|
|
114
|
+
courses:
|
|
115
|
+
- pitch: E1
|
|
116
|
+
- pitch: A1
|
|
117
|
+
- pitch: D2
|
|
118
|
+
- pitch: G2
|
|
119
|
+
|
|
120
|
+
harp:
|
|
121
|
+
courses:
|
|
122
|
+
- pitch: C1
|
|
123
|
+
- pitch: D1
|
|
124
|
+
- pitch: E1
|
|
125
|
+
- pitch: F1
|
|
126
|
+
- pitch: G1
|
|
127
|
+
- pitch: A1
|
|
128
|
+
- pitch: B1
|
|
129
|
+
- pitch: C2
|
|
130
|
+
- pitch: D2
|
|
131
|
+
- pitch: E2
|
|
132
|
+
- pitch: F2
|
|
133
|
+
- pitch: G2
|
|
134
|
+
- pitch: A2
|
|
135
|
+
- pitch: B2
|
|
136
|
+
- pitch: C3
|
|
137
|
+
- pitch: D3
|
|
138
|
+
- pitch: E3
|
|
139
|
+
- pitch: F3
|
|
140
|
+
- pitch: G3
|
|
141
|
+
- pitch: A3
|
|
142
|
+
- pitch: B3
|
|
143
|
+
- pitch: C4
|
|
144
|
+
- pitch: D4
|
|
145
|
+
- pitch: E4
|
|
146
|
+
- pitch: F4
|
|
147
|
+
- pitch: G4
|
|
148
|
+
- pitch: A4
|
|
149
|
+
- pitch: B4
|
|
150
|
+
- pitch: C5
|
|
151
|
+
- pitch: D5
|
|
152
|
+
- pitch: E5
|
|
153
|
+
- pitch: F5
|
|
154
|
+
- pitch: G5
|
|
155
|
+
- pitch: A5
|
|
156
|
+
- pitch: B5
|
|
157
|
+
- pitch: C6
|
|
158
|
+
- pitch: D6
|
|
159
|
+
- pitch: E6
|
|
160
|
+
- pitch: F6
|
|
161
|
+
- pitch: G6
|
|
162
|
+
- pitch: A6
|
|
163
|
+
- pitch: B6
|
|
164
|
+
- pitch: C7
|
|
165
|
+
- pitch: D7
|
|
166
|
+
- pitch: E7
|
|
167
|
+
- pitch: F7
|
|
168
|
+
- pitch: G7
|
|
@@ -159,6 +159,8 @@ de:
|
|
|
159
159
|
descant: Diskant
|
|
160
160
|
didgeridoo: Didgeridoo
|
|
161
161
|
double_bass: Kontrabass
|
|
162
|
+
drum_kit: Schlagzeug
|
|
163
|
+
floor_tom: Floor-Tom
|
|
162
164
|
double_contrabass_recorder: Doppelkontrabassblockflöte
|
|
163
165
|
english_horn: Englischhorn
|
|
164
166
|
euphonium: Euphonium
|
|
@@ -179,6 +181,7 @@ de:
|
|
|
179
181
|
harpsichord: Cembalo
|
|
180
182
|
hautbois_d_amour: Liebeshoboe
|
|
181
183
|
hi-hat: Hi-Hat
|
|
184
|
+
high_tom: High-Tom
|
|
182
185
|
horn: Horn
|
|
183
186
|
kettledrum: Pauke
|
|
184
187
|
kick_drum: Große Trommel
|
|
@@ -190,6 +193,7 @@ de:
|
|
|
190
193
|
mezzo: Mezzo
|
|
191
194
|
mezzo_soprano: Mezzosopran
|
|
192
195
|
mezzo_soprano_voice: Mezzosopran
|
|
196
|
+
mid_tom: Mid-Tom
|
|
193
197
|
military_drum: Militärtrommel
|
|
194
198
|
mouth_organ: Mundharmonika
|
|
195
199
|
natural_horn: Waldhorn
|
|
@@ -278,6 +282,25 @@ de:
|
|
|
278
282
|
woodblock: Holzblock
|
|
279
283
|
xylophone: Xylophon
|
|
280
284
|
zither: Zither
|
|
285
|
+
instrument_families:
|
|
286
|
+
drum_kit: Schlagzeug
|
|
287
|
+
hi_hat: Hi-Hat
|
|
288
|
+
tom_tom: Tom-Tom
|
|
289
|
+
playing_techniques:
|
|
290
|
+
bell: Glocke
|
|
291
|
+
bow: Bogen
|
|
292
|
+
brush: Bürste
|
|
293
|
+
choked: Erstickt
|
|
294
|
+
closed: Geschlossen
|
|
295
|
+
cross_stick: Querstöckchen
|
|
296
|
+
damped: Gedämpft
|
|
297
|
+
hand: Hand
|
|
298
|
+
let_ring: Ausklingen lassen
|
|
299
|
+
mallet: Schläger
|
|
300
|
+
open: Offen
|
|
301
|
+
pedal: Pedal
|
|
302
|
+
rim_shot: Rimshot
|
|
303
|
+
stick: Stick
|
|
281
304
|
locales:
|
|
282
305
|
de: Deutsch
|
|
283
306
|
en: Englisch
|
|
@@ -276,6 +276,7 @@ en:
|
|
|
276
276
|
cymbal: cymbal
|
|
277
277
|
descant: descant
|
|
278
278
|
didgeridoo: didgeridoo
|
|
279
|
+
drum_kit: drum kit
|
|
279
280
|
double_bass: double bass
|
|
280
281
|
double_contrabass_recorder: double-contrabass recorder
|
|
281
282
|
electronic_keyboard: electronic keyboard
|
|
@@ -283,6 +284,7 @@ en:
|
|
|
283
284
|
euphonium: euphonium
|
|
284
285
|
fiddle: fiddle
|
|
285
286
|
field_drum: field drum
|
|
287
|
+
floor_tom: floor tom
|
|
286
288
|
flugelhorn: flugelhorn
|
|
287
289
|
flute: flute
|
|
288
290
|
fortepiano: fortepiano
|
|
@@ -299,6 +301,7 @@ en:
|
|
|
299
301
|
harpsichord: harpsichord
|
|
300
302
|
hautbois_d_amour: hautbois d'amour
|
|
301
303
|
hi-hat: hi-hat
|
|
304
|
+
high_tom: high tom
|
|
302
305
|
horn: horn
|
|
303
306
|
kettledrum: kettledrum
|
|
304
307
|
kick_drum: kick drum
|
|
@@ -310,6 +313,7 @@ en:
|
|
|
310
313
|
mezzo: mezzo
|
|
311
314
|
mezzo_soprano: mezzo-soprano
|
|
312
315
|
mezzo_soprano_voice: mezzo-soprano
|
|
316
|
+
mid_tom: mid tom
|
|
313
317
|
military_drum: military drum
|
|
314
318
|
mouth_organ: mouth_organ
|
|
315
319
|
natural_horn: natural horn
|
|
@@ -397,6 +401,102 @@ en:
|
|
|
397
401
|
woodblock: woodblock
|
|
398
402
|
xylophone: xylophone
|
|
399
403
|
zither: zither
|
|
404
|
+
instrument_families:
|
|
405
|
+
drum_kit: drum kit
|
|
406
|
+
hi_hat: hi-hat
|
|
407
|
+
tom_tom: tom-tom
|
|
408
|
+
playing_techniques:
|
|
409
|
+
aeolian: aeolian
|
|
410
|
+
air: air
|
|
411
|
+
alla_chitarra: alla chitarra
|
|
412
|
+
arco: arco
|
|
413
|
+
artificial_harmonic: artificial harmonic
|
|
414
|
+
au_talon: au talon
|
|
415
|
+
barre: barré
|
|
416
|
+
bell: bell
|
|
417
|
+
bisbigliando: bisbigliando
|
|
418
|
+
bow: bow
|
|
419
|
+
brush: brush
|
|
420
|
+
bucket_mute: bucket mute
|
|
421
|
+
center: center
|
|
422
|
+
choked: choked
|
|
423
|
+
closed: closed
|
|
424
|
+
col_legno: col legno
|
|
425
|
+
col_legno_battuto: col legno battuto
|
|
426
|
+
col_legno_tratto: col legno tratto
|
|
427
|
+
con_bocca_chiusa: con bocca chiusa
|
|
428
|
+
con_sordino: con sordino
|
|
429
|
+
cross_stick: cross stick
|
|
430
|
+
cuivre: cuivré
|
|
431
|
+
cup_mute: cup mute
|
|
432
|
+
damped: damped
|
|
433
|
+
dead_stroke: dead stroke
|
|
434
|
+
detache: détaché
|
|
435
|
+
edge: edge
|
|
436
|
+
flautando: flautando
|
|
437
|
+
flutter_tongue: flutter tongue
|
|
438
|
+
frullato: frullato
|
|
439
|
+
half_barre: half barré
|
|
440
|
+
hand: hand
|
|
441
|
+
harmonic: harmonic
|
|
442
|
+
jete: jeté
|
|
443
|
+
harmon_mute: harmon mute
|
|
444
|
+
harmon_mute_stem_in: harmon mute stem in
|
|
445
|
+
harmon_mute_stem_out: harmon mute stem out
|
|
446
|
+
key_clicks: key clicks
|
|
447
|
+
laissez_vibrer: laissez vibrer
|
|
448
|
+
left_hand: left hand
|
|
449
|
+
legato: legato
|
|
450
|
+
let_ring: let ring
|
|
451
|
+
mallet: mallet
|
|
452
|
+
marcato: marcato
|
|
453
|
+
martele: martelé
|
|
454
|
+
martellato: martellato
|
|
455
|
+
modo_ordinario: modo ordinario
|
|
456
|
+
motor_off: motor off
|
|
457
|
+
motor_on: motor on
|
|
458
|
+
muffled: muffled
|
|
459
|
+
multiphonic: multiphonic
|
|
460
|
+
natural_harmonic: natural harmonic
|
|
461
|
+
naturale: naturale
|
|
462
|
+
non_laissez_vibrer: non laissez vibrer
|
|
463
|
+
non_vibrato: non vibrato
|
|
464
|
+
open: open
|
|
465
|
+
open_percussion: open
|
|
466
|
+
ordinario: ordinario
|
|
467
|
+
half_pedal: half pedal
|
|
468
|
+
mano_destra: mano destra
|
|
469
|
+
mano_sinistra: mano sinistra
|
|
470
|
+
palm_mute: palm mute
|
|
471
|
+
pedal: pedal
|
|
472
|
+
pizzicato: pizzicato
|
|
473
|
+
plunger_mute: plunger mute
|
|
474
|
+
poco_vibrato: poco vibrato
|
|
475
|
+
punta_d_arco: punta d'arco
|
|
476
|
+
quarter_pedal: quarter pedal
|
|
477
|
+
pres_de_la_table: près de la table
|
|
478
|
+
right_hand: right hand
|
|
479
|
+
rim_shot: rim shot
|
|
480
|
+
saltando: saltando
|
|
481
|
+
senza_sordino: senza sordino
|
|
482
|
+
senza_vibrato: senza vibrato
|
|
483
|
+
slap_tongue: slap tongue
|
|
484
|
+
snares_off: snares off
|
|
485
|
+
snares_on: snares on
|
|
486
|
+
sopra: sopra
|
|
487
|
+
sostenuto_pedal: sostenuto pedal
|
|
488
|
+
sotto: sotto
|
|
489
|
+
spiccato: spiccato
|
|
490
|
+
stick: stick
|
|
491
|
+
stopped: stopped
|
|
492
|
+
straight_mute: straight mute
|
|
493
|
+
sul_ponticello: sul ponticello
|
|
494
|
+
sul_tasto: sul tasto
|
|
495
|
+
three_quarter_pedal: three quarter pedal
|
|
496
|
+
tre_corde: tre corde
|
|
497
|
+
una_corda: una corda
|
|
498
|
+
vibrato: vibrato
|
|
499
|
+
whistle_tone: whistle tone
|
|
400
500
|
locales:
|
|
401
501
|
de: German
|
|
402
502
|
en: English
|
|
@@ -155,6 +155,8 @@ es:
|
|
|
155
155
|
descant: flauta dulce soprano
|
|
156
156
|
didgeridoo: didgeridoo
|
|
157
157
|
double_bass: contrabajo
|
|
158
|
+
drum_kit: batería
|
|
159
|
+
floor_tom: tom de piso
|
|
158
160
|
double_contrabass_recorder: flauta dulce subcontrabajo
|
|
159
161
|
english_horn: corno inglés
|
|
160
162
|
euphonium: euphonium
|
|
@@ -176,6 +178,7 @@ es:
|
|
|
176
178
|
harpsichord: clavecín
|
|
177
179
|
hautbois_d_amour: oboe de amor
|
|
178
180
|
hi-hat: charles
|
|
181
|
+
high_tom: tom agudo
|
|
179
182
|
horn: corno
|
|
180
183
|
kettledrum: timbal
|
|
181
184
|
kick_drum: bombo
|
|
@@ -187,6 +190,7 @@ es:
|
|
|
187
190
|
mezzo: mezzosoprano
|
|
188
191
|
mezzo_soprano: mezzosoprano
|
|
189
192
|
mezzo_soprano_voice: voz de mezzosoprano
|
|
193
|
+
mid_tom: tom grave
|
|
190
194
|
military_drum: tambor militar
|
|
191
195
|
mouth_organ: armónica
|
|
192
196
|
natural_horn: trompa natural
|
|
@@ -275,6 +279,25 @@ es:
|
|
|
275
279
|
woodblock: bloque de madera
|
|
276
280
|
xylophone: xilofón
|
|
277
281
|
zither: cítara
|
|
282
|
+
instrument_families:
|
|
283
|
+
drum_kit: batería
|
|
284
|
+
hi_hat: charles
|
|
285
|
+
tom_tom: tom-tom
|
|
286
|
+
playing_techniques:
|
|
287
|
+
bell: campana
|
|
288
|
+
bow: arco
|
|
289
|
+
brush: cepillo
|
|
290
|
+
choked: apagado
|
|
291
|
+
closed: cerrado
|
|
292
|
+
cross_stick: baqueta inversa
|
|
293
|
+
damped: amortiguado
|
|
294
|
+
hand: mano
|
|
295
|
+
let_ring: dejar sonar
|
|
296
|
+
mallet: baqueta
|
|
297
|
+
open: abierto
|
|
298
|
+
pedal: pedal
|
|
299
|
+
rim_shot: golpe de borde
|
|
300
|
+
stick: baqueta
|
|
278
301
|
locales:
|
|
279
302
|
de: alemán
|
|
280
303
|
en: inglés
|