MusicXML `<transpose>` with `<octave-change>` but no `<diatonic>` raises TypeError
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 75/100
Línea de trabajo
El fallo proviene de MeasureParser.xmlTransposeToInterval en musicxml/xmlToM21.py, donde la rama de cambio de octava suma a diatonicStep incluso cuando es None. Empieza ejecutando el fragmento de reproducción del issue para confirmar el TypeError, y luego lee el código posterior a esa rama para ver cómo ya se gestiona un paso diatónico ausente. Está terminado cuando el fragmento se analiza correctamente y la parte suena una octava más grave de lo escrito, con una prueba existente o nueva que cubra la transposición de solo octava.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
music21 version
10.5.0
Problem summary
<diatonic> is optional in <transpose>, and the importer handles it being missing, except when there's also an <octave-change>. Then it adds the octave to a None diatonic step and raises. An octave-only <transpose> is how guitar and bass parts are written, and some exporters leave out <diatonic> when it's 0.
Steps to reproduce
from music21 import converter
xml = '''<score-partwise version="4.0">
<part-list><score-part id="P1"><part-name>Music</part-name></score-part></part-list>
<part id="P1"><measure number="1">
<attributes>
<divisions>1</divisions>
<transpose><chromatic>0</chromatic><octave-change>-1</octave-change></transpose>
</attributes>
<note><pitch><step>C</step><octave>5</octave></pitch><duration>4</duration><type>whole</type></note>
</measure></part>
</score-partwise>'''
converter.parse(xml, format='musicxml')
Expected vs. actual behavior
Expected a part that sounds an octave lower than written. Actual:
TypeError: unsupported operand type(s) for +=: 'NoneType' and 'int'
More information
In MeasureParser.xmlTransposeToInterval (musicxml/xmlToM21.py):
if mxOctaveChange is not None:
octaveChange = int(mxOctaveChange.text) * 12
diatonicStep += 7 * int(mxOctaveChange.text)
Only adding to diatonicStep when it isn't None should be enough, since the code after this already handles a missing diatonic step.
- Lenguaje dominante
- Python
- Estrellas
- 2.6k
- Forks
- 459
- Merge medio
- 1 d 7 h
- PR fusionados (30 d)
- 40
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de cuthbertLab/music21
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
cuthbertLab/music21#2084 ·
Los mantenedores suelen responder en 1 día
-
`TypeError` in `ChordReducer.run()` on multi-part `stream.Score` without instrument `partId`sAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
cuthbertLab/music21#2074 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
cuthbertLab/music21#2055 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Slur bezier-x/y from start element gets overwritten by stop element's valuesQuizá libre de nuevo @bingliscodes la tomó hace 9 días y no hay ningún pull request abierto. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
cuthbertLab/music21#2019 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
cuthbertLab/music21#1986 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de cuthbertLab/music21
Issues similares
-
mermaid_extract.py silently discards single-line state-diagram notes; sequence notes are keptAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
cathrynlavery/diagram-design#441 ·
Los mantenedores suelen responder en 2 días
-
[Cleanup] Include the public header in work_split.cppPosiblemente ocupada @blozano-tt la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
tenstorrent/tt-metal#60850 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
backend::sglang bug language::python observability
Dificultad 2/5 Medio día Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
OpenShot/openshot-qt#6202 ·
Los mantenedores suelen responder en 1 día