【发布时间】:2021-09-29 22:04:38
【问题描述】:
请参阅下面的编辑了解正在进行的 MRE
我正在尝试将music21 的text 输出转换为包含八度音阶数字和正确的等音拼写。
作为背景,我是一名 javascript 程序员,对 music21 和 python 不熟悉。
以下
myMusic = converter.parse("midi")
myMusic.show("text")
产量
Time Actual output Desired Output
{0.0} <music21.note.Note C> C4
{0.1} <music21.note.Note D#> E-4
{0.2} <music21.note.Note G> G4
{0.3} <music21.note.Note G> G4
这里有两个问题:
-
如何在文本输出中包含八度音阶? (有趣的是,当有和弦时,每个音符的八度都会出现。
-
D#应该是Eb,即应该在音调上下文中解释。我想在整个解析的midi文件上运行EnharmonicSimplifier.bestPitches()来纠正这个问题,但是from the docs,它似乎只能在note list上运行。
我做错了吗?我应该输出到不同的格式来获取这些信息吗?我需要时间点(偏移量可以)、八度数和正确拼写的音高。也许我缺少中间处理?
任何指导表示赞赏。
编辑:正在进行的 MRE,解决了问题 1.(严重吗?),但不是 2.
from music21 import *
environment.set('autoDownload', 'allow')
stream1 = converter.parse("https://upload.wikimedia.org/wikipedia/commons/5/55/MIDI_sample.mid")
for n in stream1.recurse().notes:
try:
print(n.offset, n.nameWithOctave)
except Exception as e:
print(n.offset, *n.pitches)
产量(摘录)
237.5 C2
238.0 F#2
238.2 F#2
238.5 C2 F#2
238.7 B-2
【问题讨论】: