问题标签 [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.

0 投票
1 回答
165 浏览

midi - 如何处理多个音轨中重复的note_on、note_off、速度变化以及midi文件中没有program_change的轨道?

我正在使用Midopython,将midi文件解析为<start_time, duration, program, pitch>元组并遇到了一些问题。

我解析的一些文件有多个note_on,导致同一音高的音符和同一程序被多次打开。

某些文件包含多个note_off导致尝试关闭由于之前关闭而不再打开的音符(假设同一程序和相同音高只能打开一个音符)。

有些曲目在曲目的开头没有一个program_change(或者更糟糕的是,甚至在整个曲目中都没有一个)。

某些文件有多个包含set_tempo消息的轨道。

在每种情况下我应该怎么做才能确保我得到正确的解释?

0 投票
1 回答
668 浏览

python - 如何集成 Python mido 和 asyncio?

我有一个通过 MIDI 进行文件 I/O 的设备。我有一个使用 Mido 下载文件的脚本,但它是一堆全局变量。我想整理它以正确使用 asyncio 但我不确定如何集成 mido 回调。我认为文档说我应该使用 Future 对象,但我不确定 mido 回调函数如何获取该对象。

0 投票
1 回答
139 浏览

python - Mido midi - 如果我在键盘上弹奏,找到两倍的 Note_On 事件,而不是在钢琴卷中绘制音符......?

我编写了一个程序来解析一个 midi 文件并找到所有 Note_On 事件。

我进入我的 DAW 钢琴卷并画出D4、D5、F4

我的程序正确找到 Note_One 事件并正确识别它们。

然后我去我的midi键盘弹奏完全相同的音符,然后保存midi文件。

我的程序发现,D4,D4,D5,D5,F4,F4

即它使音符翻倍!为什么我得到不同的结果?两个 MIDI 文件在 DAW 中看起来是一样的:它们都有三个音符。

这是两个midi文件:

https://drive.google.com/drive/folders/1CUgTJNH-jD5rPJEmT0aSwRp4PhaatxYq?usp=sharing

这是我从文件中读取 Midi 数据的代码:

0 投票
2 回答
567 浏览

python - 如何在 mido 中从 Message 中获取 note 属性?

我正在尝试在 .mid 文件中打印出 mido 输出的每条消息中的 note 属性。现在,我的代码如下所示:

但是,在运行代码时,我得到了错误:

我很困惑,因为文档显示相同的“msg.note”语法工作得很好。任何帮助将非常感激。

0 投票
1 回答
714 浏览

python - 为什么干净的 Midi 文件播放不同?(与米多)

我编写了一个接收 MIDI 文件的程序,然后使用 Mido,它通过删除特定类型的元数据、重复消息等来清理数据。它还计算了累积时间(因为每个 midi 消息中的时间都是 delta时间)。然后使用它创建一个新的 mido 文件(从头开始),我将所有这些消息附加到一个轨道中(因此基本上轨道被合并)并按累积时间对它们进行排序。然后相应地调整增量时间(请记住,每个新的 midi 轨道从累积时间 0 开始)。我意识到这可能看起来毫无意义(因为我试图构建更干净的同一首歌曲),但目的是拥有更好的数据然后做其他事情。

我已将我的代码分成两部分。第一个执行所有过滤并构造一个大列表,其中每个子列表中的第一项是消息本身,每个子列表中的第二项是累积时间(如上所述,这是按累积时间排序的)。代码的第二部分调整此列表中每个项目的增量时间,然后将列表中的所有消息按顺序(具有更正的增量时间)附加到从头开始创建的轨道上。然后它使用 pygame 播放该曲目。

我似乎遇到的主要问题是时间/节奏。重建的曲目似乎播放得太快或太慢。在某些文件(例如 Bohemian Rhapsody 文件)的情况下,乐器部分也似乎是分离和混乱的。

这是解构和列表构建代码:

这是重构代码:

示例文件:

波西米亚狂想曲:https ://bitmidi.com/queen-bohemian-rhapsody-mid

河流在你心中流淌:http ://midicollection.net/songs/index.php?id=13

谢谢

编辑:

这似乎是空白 MIDI 创建和附加的问题,因为我创建了此代码,该代码手动复制了短 MIDI 文件中的消息,并且在播放时它们仍然听起来错误(较慢)。

0 投票
1 回答
593 浏览

python - Mido - 如何从不同端口实时获取 midi 数据

我创建了 2 个端口作为输入,以从键盘和 midi 表面控制器(具有一堆滑块和旋钮)捕获数据。虽然我不确定如何从两者中获取数据

第一个 For 循环有效,我在弹奏键盘时打开和关闭 MIDI 音符,它与input_hw端口绑定,但第二个循环永远不会通过。

0 投票
0 回答
694 浏览

python-2.7 - 无法在 conda 虚拟环境(python2.7)中运行 mido 和键盘模块

mido在 Ubuntu 18.04 上,我正在尝试创建一个安装了模块的 conda 虚拟环境keyboard。这是使用conda create -n my_env python=2.7and pip installfor midoand成功完成的keyboard。当我从 conda 虚拟环境中运行 python 然后键入import midoimport keyboard.

问题是当我尝试运行我在单独线程中编写的keyboard.on_press(keyboard_thread)调用keyboard_thread函数时,我收到此错误:

我尝试运行sudo python my_code.py,没有错误出现 keyboard.on_press(keyboard_thread),但随后import mido返回ImportError: No module named mido

有没有办法让我有一个虚拟环境可以让两个模块正常运行?

我感谢您的帮助。

0 投票
1 回答
435 浏览

python - 使用 Python Mido 库选择 GM MIDI Level 2 乐器

我正在使用 Python Mido 库来创建 MIDI 文件。我发现要更改乐器,您可以program_change在给定频道的轨道上添加一条消息:

这可行,但我只能访问 GM MIDI Level 1 乐器。我也想访问 GM MIDI Level 2乐器。

请使用代码向我展示如何执行此操作。我通过谷歌搜索找到的所有 MIDI 文档都令人难以置信的混乱。

0 投票
2 回答
579 浏览

python - 使用 mido 库的绝对 MIDI 刻度值

我正在使用Mido 库在 python 中读取一个简单的 MIDI 文件。

我的 MIDI 文件如下:https://www.dropbox.com/s/t80kg9l2k525g0h/file.mid?dl=0

这只是一个我用基本音符创建的虚拟 MIDI 文件。

我用 Mido 库打开它并打印它的内容:

这就是我得到的:

做一些实验我有点明白时间是用相对于前一个事件(note_on - note_off)的刻度表示的。

如何使用绝对时间参考(以滴答声)重新排序笔记?

我想有一个我的笔记的绝对时间线,但我不知道如何从我拥有的数据中“提取”它。

有没有其他库已经实现了这个功能?我看到了这个库:Python-midi,但不幸的是它只适用于 Python 2。

0 投票
0 回答
66 浏览

python - 在特定的 MetaMessage 时间添加 MIDI 和弦

我有一个带有标记作为元消息的 MIDI 文件。

我已将元标记时间存储在列表“chordTimes”中。第一个制造商(和弦位置)不是从 0 开始。我制作了一个新的 MIDI 文件:

现在我通读了我想要的和弦列表,并将它们添加到要添加到 mo 的新曲目中。

但是当我显示它时,和弦似乎不正确并且位置错误,并且看起来比原来的长得多(大约 3 倍)。我检查了输出的标题块:

任何帮助将不胜感激。