python - 使用 Music21(或替代方法)从 MIDI 中提取休止符并写入单独的 MIDI 轨道
问题描述
我正在尝试将一个简单的单通道、单乐器 MIDI 文件解析为音符和休止符。我知道“休息”不是直接编码成 MIDI,而是缺少 NoteOn/NoteOff 对。
我要做的是从第一个(也是唯一的)MIDI 通道(0)读取数据,并使用 Python 中的 Music21 提取音符和休止符。一旦我这样做了:
- 我将把笔记留在频道 0
- 我将在单独的通道通道 1 上将其余部分编码为正常的 NoteOn/NoteOff 对。我还可以在此处捕获其余部分的持续时间。
然后,我可以使用这些数据在稍后构建的前端中显示音符和休止符。
所以我的问题:
- Music21 适合这个吗?或者有没有更简单的方法?
- 如果 Music21 合适,这样做的好策略是什么?
- 我目前正在使用从 URL 下载示例 MIDI 文件,
requests
并尝试使用requests.content
. 这合适吗?
感谢您的帮助,我对 Music21 库很陌生!
解决方案
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)
推荐阅读
- javascript - 如何使用 Try and Catch 在异步函数中“成功”做某事?
- list - 如何在列表中获取映射值(键值对)
- git - 有没有办法从我以前的 git 提交中更改我的姓名和电子邮件历史记录?
- php - PHP 7 致命错误:未捕获的 TypeError:传递给 Some2::send() 的参数 1 必须是 Path\To 的实例,Path\To\Some 的实例
- python - pytest 在给定函数中使用字符串时出现断言错误
- css - 将第 3 个 div 居中在其他 2 个下方?
- java - 如何从 url Android Studio 下载我的位图到画廊
- java - 从 CompletableFuture 线程中的主线程访问 SessionScoped bean 不起作用
- ionic-framework - 应用程序最小化离子科尔多瓦插件在 iONIC5 应用程序中不起作用
- c++ - 在链表类中实现 removeDuplicates() 方法