toSoundingPitch() transposes key signatures by the MIDI program's instrument instead of the part's `<transpose>`
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- Mezza giornata
- Idoneità per principianti
- 62/100
Direzione di ricerca
Start by running the reproduction script in the issue: it parses a MusicXML clarinet-in-A part with and without <midi-program> 72 and calls toSoundingPitch(). The note comes out right, but the key signature only goes wrong when the program is 72, so the bug is in how the importer assigns a Clarinet instrument and how its default transposition is applied to the key. Done means the sounding key has 3 sharps in both cases, matching A major, and the <transpose> value is used consistently.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
music21 version
10.5.0
Problem summary
For a clarinet in A written in C, toSoundingPitch() moves the notes down a minor third, following the part's <transpose>, but it moves the key signature down a major second. When the part's <midi-program> is 72 (clarinet), the importer makes the part's instrument a Clarinet, whose default transposition is that of a B♭ clarinet, and the key signature follows that instead. So the sounding notes are in A major, but the sounding key signature is G major.
Steps to reproduce
from music21 import converter, key
def clarinet_in_a(midi_program):
midi = f'<midi-instrument id="P1-I1"><midi-program>{midi_program}</midi-program></midi-instrument>' if midi_program else ''
return f'''<score-partwise version="4.0">
<part-list><score-part id="P1"><part-name>Clarinet in A</part-name>
<score-instrument id="P1-I1"><instrument-name>Clarinet</instrument-name></score-instrument>{midi}
</score-part></part-list>
<part id="P1"><measure number="1">
<attributes>
<divisions>1</divisions>
<key><fifths>0</fifths></key>
<transpose><diatonic>-2</diatonic><chromatic>-3</chromatic></transpose>
</attributes>
<note><pitch><step>C</step><octave>5</octave></pitch><duration>4</duration><type>whole</type></note>
</measure></part>
</score-partwise>'''
for midi_program in (72, None):
sounding = converter.parse(clarinet_in_a(midi_program), format='musicxml').toSoundingPitch()
print(midi_program,
sounding.flatten().notes[0].nameWithOctave,
[k.sharps for k in sounding.flatten().getElementsByClass(key.KeySignature)],
sounding.parts[0].getInstrument().transposition.directedName)
Expected vs. actual behavior
Expected the note A4 and a key signature with 3 sharps both times. Actual:
72 A4 [1] M-2
None A4 [3] m-3
Without the <midi-program>, the part's instrument takes its transposition from <transpose> (minor third down), and the key signature is correct. With program 72, the importer makes a Clarinet with the B♭ clarinet's default transposition (major second down), and that seems to take priority over <transpose> for the key signature, though not for the notes.
- Lingua principale
- Python
- Stelle
- 2.6k
- Fork
- 459
- Merge medio
- 1g 7h
- PR unite (30g)
- 40
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di cuthbertLab/music21
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
cuthbertLab/music21#2084 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
cuthbertLab/music21#2082 ·
I maintainer di solito rispondono entro 1 giorno
-
`TypeError` in `ChordReducer.run()` on multi-part `stream.Score` without instrument `partId`sAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
cuthbertLab/music21#2074 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
cuthbertLab/music21#2055 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Slur bezier-x/y from start element gets overwritten by stop element's valuesForse di nuovo libera @bingliscodes l’ha presa 10 giorni fa e non c’è nessuna pull request aperta. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
cuthbertLab/music21#2019 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di cuthbertLab/music21
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
omegaup/omegaup#10353 · 1 commento ·
I maintainer di solito rispondono entro 5 giorni
-
bot-triaged module: LrScheduler module: optimizer triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
documentation glm5 llm-model
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vllm-project/vllm-ascend#19062 ·
I maintainer di solito rispondono entro 1 giorno
-
Author Page: shuai-zhao-llmApertaauthor-page correction
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
acl-org/acl-anthology#10496 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno