MusicXML import doesn't read `<midi-instrument>` changes in `<sound>`
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start with SoundTagMixin.setSound in musicxml/xmlSoundParser.py, which currently handles only tempo, and with where the importer reads midi-instrument from score-part. Reproduce with the XML in the issue and check whether a sound inside a measure or direction is reached at all. The issue leaves open whether the change should become a new Instrument or another record, so settle that with the maintainers first. Done means the example yields program 73 at offset 4.0 and the related score-instrument case (#1696) is not made worse.
由索引模型根据 Issue 内容生成。
描述
music21 version
10.5.0
Problem summary
A <sound> element can contain a <midi-instrument> that changes a part's program partway through, for example a doubler switching from violin to flute. The importer only reads <midi-instrument> from the <score-part>, so the whole part keeps its first program.
Steps to reproduce
from music21 import converter, instrument
xml = '''<score-partwise version="4.0">
<part-list><score-part id="P1"><part-name>Music</part-name>
<score-instrument id="P1-I1"><instrument-name>Doubler</instrument-name></score-instrument>
<midi-instrument id="P1-I1"><midi-program>41</midi-program></midi-instrument>
</score-part></part-list>
<part id="P1">
<measure number="1">
<attributes><divisions>1</divisions></attributes>
<note><pitch><step>C</step><octave>4</octave></pitch><duration>4</duration><type>whole</type></note>
</measure>
<measure number="2">
<sound><midi-instrument id="P1-I1"><midi-program>74</midi-program></midi-instrument></sound>
<note><pitch><step>D</step><octave>4</octave></pitch><duration>4</duration><type>whole</type></note>
</measure>
</part>
</score-partwise>'''
parsed = converter.parse(xml, format='musicxml')
print([(float(i.getOffsetInHierarchy(parsed)), i.instrumentName, i.midiProgram)
for i in parsed.recurse().getElementsByClass(instrument.Instrument)])
Expected vs. actual behavior
Expected a second instrument, or some other record of the change, with program 73 at offset 4.0. Actual:
[(0.0, 'Doubler', 40)]
More information
Exporters usually write the change inside a direction, next to the printed cue, for example <direction><direction-type><words>Flute</words></direction-type><sound><midi-instrument id="P1-I1"><midi-program>74</midi-program></midi-instrument></sound></direction>. That's ignored too: SoundTagMixin.setSound in musicxml/xmlSoundParser.py only handles tempo.
Related: #1696, where the importer only reads a part's first <score-instrument>. Both are ways MusicXML encodes an instrument change partway through a part.
- 主要语言
- 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 小时 新手友好度 75/100
cuthbertLab/music21#2082 ·
维护者通常 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 天内回复
查看 cuthbertLab/music21 的全部 Issue
相似的 Issue
-
area:core-platform effort:S priority:P3 status:in-review type:test
难度 2/5 1 小时以内 新手友好度 80/100
randomparity/kdive#3246 · 1 条评论 ·
维护者通常 1 天内回复
-
Requantification library converts m/z to mass with the hydrogen-atom mass instead of the proton mass未关闭bug
难度 1/5 1 小时以内 新手友好度 85/100
nf-core/metaboigniter#130 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 75/100
common-workflow-language/cwl-utils#477 ·
维护者通常 1 天内回复
-
Add dependabot未关闭feat
难度 2/5 1 小时以内 新手友好度 72/100
open-nudge/opentemplate#204 ·
维护者通常 1 天内回复
-
github-stale-ci-pr-closer: KV state is double-wrapped, never persists, and hits the depth-32 limit可能已有人在做 @VascoSch92 今天认领。 未关闭priority:medium ready-for-dev
难度 2/5 1-3 小时 新手友好度 72/100
OpenHands/extensions#781 ·
维护者通常 1 天内回复