Skip to content

Commit 0ce0df2

Browse files
committed
Use General MIDI Percussion as the standard drumset
The standard drumset is used for unknown percussion instruments found when opening a pre-3.6 score or importing a non-native format like MIDI, MusicXML, Guitar Pro, etc. Also run the Python script to fetch the latest instrument data, which now includes custom noteheads for some percussion instruments.
1 parent ca8b123 commit 0ce0df2

17 files changed

+2993
-1098
lines changed

share/instruments/instruments.xml

Lines changed: 1022 additions & 559 deletions
Large diffs are not rendered by default.

share/instruments/instrumentsxml.h

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3871,31 +3871,31 @@ QT_TRANSLATE_NOOP3("engraving/instruments", "Cuica", "cuica longName"),
38713871
//: shortName for Cuica; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
38723872
QT_TRANSLATE_NOOP3("engraving/instruments", "Cu.", "cuica shortName"),
38733873

3874-
//: description for Large Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3875-
QT_TRANSLATE_NOOP3("engraving/instruments", "Drum Kit.", "drumset description"),
3876-
//: trackName for Large Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3877-
QT_TRANSLATE_NOOP3("engraving/instruments", "Large Drum Kit", "drumset trackName"),
3878-
//: longName for Large Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3874+
//: description for Drum Kit (large); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3875+
QT_TRANSLATE_NOOP3("engraving/instruments", "Large drum kit.", "drumset description"),
3876+
//: trackName for Drum Kit (large); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3877+
QT_TRANSLATE_NOOP3("engraving/instruments", "Drum Kit (large)", "drumset trackName"),
3878+
//: longName for Drum Kit (large); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
38793879
QT_TRANSLATE_NOOP3("engraving/instruments", "Drum Kit", "drumset longName"),
3880-
//: shortName for Large Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3880+
//: shortName for Drum Kit (large); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
38813881
QT_TRANSLATE_NOOP3("engraving/instruments", "D. Kit", "drumset shortName"),
38823882

3883-
//: description for 4-Piece Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3884-
QT_TRANSLATE_NOOP3("engraving/instruments", "4 piece drum kit.", "drum-kit-4 description"),
3885-
//: trackName for 4-Piece Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3886-
QT_TRANSLATE_NOOP3("engraving/instruments", "4-Piece Drum Kit", "drum-kit-4 trackName"),
3887-
//: longName for 4-Piece Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3883+
//: description for Drum Kit (minimal); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3884+
QT_TRANSLATE_NOOP3("engraving/instruments", "Minimal drum kit, 4-piece.", "drum-kit-4 description"),
3885+
//: trackName for Drum Kit (minimal); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3886+
QT_TRANSLATE_NOOP3("engraving/instruments", "Drum Kit (minimal)", "drum-kit-4 trackName"),
3887+
//: longName for Drum Kit (minimal); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
38883888
QT_TRANSLATE_NOOP3("engraving/instruments", "Drum Kit", "drum-kit-4 longName"),
3889-
//: shortName for 4-Piece Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3889+
//: shortName for Drum Kit (minimal); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
38903890
QT_TRANSLATE_NOOP3("engraving/instruments", "D. Kit", "drum-kit-4 shortName"),
38913891

3892-
//: description for 5-Piece Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3893-
QT_TRANSLATE_NOOP3("engraving/instruments", "5 piece drum kit.", "drum-kit-5 description"),
3894-
//: trackName for 5-Piece Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3895-
QT_TRANSLATE_NOOP3("engraving/instruments", "5-Piece Drum Kit", "drum-kit-5 trackName"),
3896-
//: longName for 5-Piece Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3892+
//: description for Drum Kit (common); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3893+
QT_TRANSLATE_NOOP3("engraving/instruments", "Common drum kit, 5-piece.", "drum-kit-5 description"),
3894+
//: trackName for Drum Kit (common); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3895+
QT_TRANSLATE_NOOP3("engraving/instruments", "Drum Kit (common)", "drum-kit-5 trackName"),
3896+
//: longName for Drum Kit (common); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
38973897
QT_TRANSLATE_NOOP3("engraving/instruments", "Drum Kit", "drum-kit-5 longName"),
3898-
//: shortName for 5-Piece Drum Kit; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
3898+
//: shortName for Drum Kit (common); Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
38993899
QT_TRANSLATE_NOOP3("engraving/instruments", "D. Kit", "drum-kit-5 shortName"),
39003900

39013901
//: description for Field Drum; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
@@ -4240,15 +4240,6 @@ QT_TRANSLATE_NOOP3("engraving/instruments", "Maracas", "maracas longName"),
42404240
//: shortName for Maracas; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
42414241
QT_TRANSLATE_NOOP3("engraving/instruments", "Mrcs.", "maracas shortName"),
42424242

4243-
//: description for Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4244-
QT_TRANSLATE_NOOP3("engraving/instruments", "Orchestral percussion drumset.", "percussion description"),
4245-
//: trackName for Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4246-
QT_TRANSLATE_NOOP3("engraving/instruments", "Percussion", "percussion trackName"),
4247-
//: longName for Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4248-
QT_TRANSLATE_NOOP3("engraving/instruments", "Percussion", "percussion longName"),
4249-
//: shortName for Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4250-
QT_TRANSLATE_NOOP3("engraving/instruments", "Perc.", "percussion shortName"),
4251-
42524243
//: description for Quijada; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
42534244
QT_TRANSLATE_NOOP3("engraving/instruments", "Dried donkey or horse jawbone, traditionally used as a rattle in some Latin American countries.", "quijada description"),
42544245
//: trackName for Quijada; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
@@ -4339,6 +4330,24 @@ QT_TRANSLATE_NOOP3("engraving/instruments", "Whip", "whip longName"),
43394330
//: shortName for Whip; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
43404331
QT_TRANSLATE_NOOP3("engraving/instruments", "Wh.", "whip shortName"),
43414332

4333+
//: description for General MIDI Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4334+
QT_TRANSLATE_NOOP3("engraving/instruments", "General MIDI percussion kit with Level 2 extensions.", "percussion-synthesizer description"),
4335+
//: trackName for General MIDI Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4336+
QT_TRANSLATE_NOOP3("engraving/instruments", "General MIDI Percussion", "percussion-synthesizer trackName"),
4337+
//: longName for General MIDI Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4338+
QT_TRANSLATE_NOOP3("engraving/instruments", "Percussion", "percussion-synthesizer longName"),
4339+
//: shortName for General MIDI Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4340+
QT_TRANSLATE_NOOP3("engraving/instruments", "Perc.", "percussion-synthesizer shortName"),
4341+
4342+
//: description for Mixed Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4343+
QT_TRANSLATE_NOOP3("engraving/instruments", "Orchestral percussion kit.", "percussion description"),
4344+
//: trackName for Mixed Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4345+
QT_TRANSLATE_NOOP3("engraving/instruments", "Mixed Percussion", "percussion trackName"),
4346+
//: longName for Mixed Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4347+
QT_TRANSLATE_NOOP3("engraving/instruments", "Percussion", "percussion longName"),
4348+
//: shortName for Mixed Percussion; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4349+
QT_TRANSLATE_NOOP3("engraving/instruments", "Perc.", "percussion shortName"),
4350+
43424351
// Percussion - Marching
43434352
QT_TRANSLATE_NOOP("engraving/instruments/group", "Percussion - Marching"),
43444353

@@ -4776,15 +4785,6 @@ QT_TRANSLATE_NOOP3("engraving/instruments", "Ondes Martenot", "ondes-martenot lo
47764785
//: shortName for Ondes Martenot; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
47774786
QT_TRANSLATE_NOOP3("engraving/instruments", "O.M.", "ondes-martenot shortName"),
47784787

4779-
//: description for Percussion Synthesizer; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4780-
QT_TRANSLATE_NOOP3("engraving/instruments", "Percussion synthesizer.", "percussion-synthesizer description"),
4781-
//: trackName for Percussion Synthesizer; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4782-
QT_TRANSLATE_NOOP3("engraving/instruments", "Percussion Synthesizer", "percussion-synthesizer trackName"),
4783-
//: longName for Percussion Synthesizer; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4784-
QT_TRANSLATE_NOOP3("engraving/instruments", "Percussion Synthesizer", "percussion-synthesizer longName"),
4785-
//: shortName for Percussion Synthesizer; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
4786-
QT_TRANSLATE_NOOP3("engraving/instruments", "Perc. Syn.", "percussion-synthesizer shortName"),
4787-
47884788
//: description for Atmosphere Synthesizer; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names
47894789
QT_TRANSLATE_NOOP3("engraving/instruments", "Atmosphere synth effect (General MIDI program 100).", "atmosphere-synth description"),
47904790
//: trackName for Atmosphere Synthesizer; Please see https://github.com/musescore/MuseScore/wiki/Translating-instrument-names

share/instruments/update_instruments_xml.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def eprint(*args, **kwargs):
5555
'GM+GS_Percussion': '1216482735',
5656
}
5757

58-
standard_drumset_id = 'drumset'
58+
standard_drumset_id = 'percussion-synthesizer' # General MIDI Percussion (most generic kit)
5959

6060
parser = argparse.ArgumentParser(description='Fetch the latest spreadsheet and generate instruments.xml.')
6161
parser.add_argument('-c', '--cached', action='store_true', help='Use cached version instead of downloading')
@@ -304,6 +304,15 @@ def to_list(str):
304304
if pitch in gmgs_percussion:
305305
to_comment(d_el, gmgs_percussion[pitch], 'name')
306306
to_subelement(d_el, drum, 'head')
307+
308+
noteheads_el = ET.Element('noteheads')
309+
to_subelement(noteheads_el, drum, 'quarter')
310+
to_subelement(noteheads_el, drum, 'half')
311+
to_subelement(noteheads_el, drum, 'whole')
312+
to_subelement(noteheads_el, drum, 'breve')
313+
if noteheads_el.find('*') is not None:
314+
d_el.append(noteheads_el)
315+
307316
to_subelement(d_el, drum, 'line')
308317
to_subelement(d_el, drum, 'voice')
309318
to_subelement(d_el, drum, 'drum', 'name')
@@ -516,6 +525,11 @@ def noteheadgroup(tag):
516525

517526
return 'HEAD_' + tag.upper().replace('-', '_')
518527

528+
def noteheadtype(tag):
529+
if tag == 'breve':
530+
return 'HEAD_BREVIS'
531+
return 'HEAD_' + tag.upper()
532+
519533
def shortcut(tag):
520534
if tag == null or not tag:
521535
return '0'
@@ -530,11 +544,25 @@ def shortcut(tag):
530544
for drum in drumsets[standard_drumset_id].values():
531545
pitch = drum['pitch']
532546

547+
custom_noteheads_code = ''
548+
549+
for duration in ['whole', 'half', 'quarter', 'breve']:
550+
notehead = drum[duration]
551+
552+
if not notehead or notehead is null:
553+
continue
554+
555+
type = noteheadtype(duration)
556+
557+
custom_noteheads_code += f"""\
558+
smDrumset->drum({pitch}).noteheads[static_cast<int>(NoteHeadType::{type})] = SymNames::symIdByName("{notehead}");
559+
"""
560+
533561
gen_code += f"""
534562
// {drum['drum']}
535563
smDrumset->drum({pitch}) = DrumInstrument(
536564
TConv::userName(DrumNum({pitch})),
537-
NoteHeadGroup::{noteheadgroup(drum['head'])},
565+
NoteHeadGroup::{noteheadgroup('custom' if custom_noteheads_code else drum['head'])},
538566
/*line*/ {drum['line']},
539567
DirectionV::{direction(drum['stem'])},
540568
/*panelRow*/ {drum['row']},
@@ -543,6 +571,9 @@ def shortcut(tag):
543571
/*shortcut*/ {shortcut(drum['shortcut'])});
544572
"""
545573

574+
if custom_noteheads_code:
575+
gen_code += '\n' + custom_noteheads_code
576+
546577
with open(standard_drumset_cpp_path, newline='\n', encoding='utf-8') as file:
547578
old_code = file.read()
548579

0 commit comments

Comments
 (0)