MusicXML `<transpose>` with `<octave-change>` but no `<diatonic>` raises TypeError
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
崩溃来自 musicxml/xmlToM21.py 中的 MeasureParser.xmlTransposeToInterval,其中八度变化分支即使在 diatonicStep 为 None 时也会对它进行加法运算。先运行 issue 中的复现代码片段,确认 TypeError,然后阅读该分支之后的代码,看看缺失的 diatonic step 已经是如何处理的。完成标准是:代码片段能够成功解析,声部听起来比记谱低一个八度,并且有现成或新增的测试覆盖仅八度的移调。
由索引模型根据 Issue 内容生成。
描述
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.
- 主要语言
- Python
- 星标
- 2.6k
- 派生
- 459
- 平均合并
- 1 天 7 小时
- 30 天内合并 PR
- 40
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
cuthbertLab/music21 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
cuthbertLab/music21#2084 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
cuthbertLab/music21#2074 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
cuthbertLab/music21#2055 · 3 条评论 ·
维护者通常 1 天内回复
-
Slur bezier-x/y from start element gets overwritten by stop element's values可能重新可做 @bingliscodes 于 9 天前认领,目前没有进行中的 PR。 未关闭
难度 2/5 1-3 小时 新手友好度 75/100
cuthbertLab/music21#2019 · 3 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 74/100
cuthbertLab/music21#1986 · 1 条评论 ·
维护者通常 1 天内回复
查看 cuthbertLab/music21 的全部 Issue
相似的 Issue
-
难度 1/5 1 小时以内 新手友好度 88/100
-
难度 2/5 1-3 小时 新手友好度 72/100
aws-samples/sample-per-model-bedrock#261 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 65/100
pwncollege/dojo#1188 ·
维护者通常 1 天内回复
-
bug launcher packaging
难度 1/5 1 小时以内 新手友好度 88/100
tenstorrent/tt-studio#1426 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
python-attrs/cattrs#796 ·
维护者通常 1 天内回复