使用 Music21(或替代方法)从 MIDI 中提取休止符并写入单独的 MIDI 轨道

Posted

技术标签:

【中文标题】使用 Music21(或替代方法)从 MIDI 中提取休止符并写入单独的 MIDI 轨道【英文标题】:Extract Rests From MIDI Using Music21 (or alternative) and write to seperate MIDI track 【发布时间】:2020-07-21 05:39:47 【问题描述】:

我正在尝试将一个简单的单通道、单乐器 MIDI 文件解析为音符和休止符。我知道“休息”不是直接编码成 MIDI,而是缺少 NoteOn/NoteOff 对。

我要做的是从第一个(也是唯一的)MIDI 通道 (0) 读取数据,并使用 Python 中的 Music21 提取音符和休止符。一旦我这样做了:

    我会将笔记留在频道 0 我将在单独的通道(通道 1)上将休止符编码为正常的 NoteOn/NoteOff 对。我还可以在此处捕获休止符的持续时间。

然后我可以使用这些数据在我稍后构建的前端中显示音符和休止符。

所以我的问题:

    Music21 适合这个吗?还是有更简单的方法? 如果 Music21 合适,有什么好的策略可以做到这一点? 我目前正在使用 requests 从 URL 下载示例 MIDI 文件,并尝试使用 requests.content 解析此音乐 21。这合适吗?

感谢您的帮助,我是 Music21 库的新手!

【问题讨论】:

【参考方案1】:

music21 肯定会从 MIDI 文件创建音符和休止符。你还有什么进一步的目标?

import music21
parsed = music21.converter.parse('source.mid')
for elem in parsed.flat.notesAndRests:
    print(elem)
    print(elem.pitch.name)
    print(elem.quarterLength)

【讨论】:

以上是关于使用 Music21(或替代方法)从 MIDI 中提取休止符并写入单独的 MIDI 轨道的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 中的长笛乐器从音符制作 MIDI 文件(music21 库)

使用 music21 显示 Mid 文件中的 midi 音高数字

使用带有 partitionByInstrument() 的 music21 读取 MIDI 文件以获取返回空列表的音符和和弦

保存到 MIDI 文件时,Music21 一次播放所有音符

music21:写入midi文件后和弦转音符?

music21 :给定 midi 输入,输出正确拼写的音高和八度数