问题标签 [mido]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ableton-live - 使用 python-mido 从 Ableton Live 11 MIDI 文件的“time_signature”和 BPM 的时间转换
我已经从 Ableton Live 11 导出了一个 MIDI 文件,我想以两列表的形式提取调制轮的变化,其中包含值和相应的时间戳(以秒为单位)。
为此,我使用 mido 编写了一个 Python 脚本来解析 MIDI 文件。在这个文件中,没有'set_tempo' MetaMessage 我将 BPM 值作为参数提供给我的脚本。使用'time_signature' MetaMessage,我正在考虑使用clocks_per_click 值将MIDI 时间转换为秒。如果我猜对了,clocks_per_click 是每四分之一音符的 MIDI 时钟滴答数。因此,我的 MIDI 时间到秒的转换应该是:
问题是来自 Ableton 的 MIDI 文件显示 36 个clocks_per_click,尽管它没有给我正确的结果。当clocks_per_click 设置为24 时得到正确的结果。
这是我指的 MIDI 文件:modramp.zip 它是第一个节拍期间调制轮从 0 到 255 的线性增加。MIDI 最后一个小节。
如果您能解释一下为什么clocks_per_click 似乎与那里的消息中显示的时间不对应,以及是否有另一种方法可以在不使用缺少的“set_tempo”元消息的情况下转换此时间值,我将不胜感激。
先感谢您,
乔尔
python - Kivy 减慢 MIDI 播放速度
我正在开发一个开源的 midi 合成器,每当我播放一首同时敲击多个音符的歌曲时,音乐都会变慢。
我知道我有一个非常不稳定的实现(代码中的第 140 行及以下),因为只要更新函数中有循环,kivy 就会挂起。我编写了一个解决方法,将 midi 文件拆分为一个列表,该列表在每次更新时都会被耗尽。我怀疑这个问题要么是 kivy 很慢,要么是 time.sleep() 因为它是同步的而弄乱了多次击键。
我可以在 Kivy 中使用一个单独的线程来“在后台”运行吗?这可以解决问题,但我不确定。
代码可以在这里找到: https ://github.com/DeWolfRobin/Pythesia/blob/main/gui.py