问题标签 [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.
midi - 如何处理多个音轨中重复的note_on、note_off、速度变化以及midi文件中没有program_change的轨道?
我正在使用Mido
python,将midi文件解析为<start_time, duration, program, pitch>
元组并遇到了一些问题。
我解析的一些文件有多个note_on
,导致同一音高的音符和同一程序被多次打开。
某些文件包含多个note_off
导致尝试关闭由于之前关闭而不再打开的音符(假设同一程序和相同音高只能打开一个音符)。
有些曲目在曲目的开头没有一个program_change
(或者更糟糕的是,甚至在整个曲目中都没有一个)。
某些文件有多个包含set_tempo
消息的轨道。
在每种情况下我应该怎么做才能确保我得到正确的解释?
python - 如何集成 Python mido 和 asyncio?
我有一个通过 MIDI 进行文件 I/O 的设备。我有一个使用 Mido 下载文件的脚本,但它是一堆全局变量。我想整理它以正确使用 asyncio 但我不确定如何集成 mido 回调。我认为文档说我应该使用 Future 对象,但我不确定 mido 回调函数如何获取该对象。
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 数据的代码:
python - 如何在 mido 中从 Message 中获取 note 属性?
我正在尝试在 .mid 文件中打印出 mido 输出的每条消息中的 note 属性。现在,我的代码如下所示:
但是,在运行代码时,我得到了错误:
我很困惑,因为文档显示相同的“msg.note”语法工作得很好。任何帮助将非常感激。
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 文件中的消息,并且在播放时它们仍然听起来错误(较慢)。
python - Mido - 如何从不同端口实时获取 midi 数据
我创建了 2 个端口作为输入,以从键盘和 midi 表面控制器(具有一堆滑块和旋钮)捕获数据。虽然我不确定如何从两者中获取数据
第一个 For 循环有效,我在弹奏键盘时打开和关闭 MIDI 音符,它与input_hw
端口绑定,但第二个循环永远不会通过。
python-2.7 - 无法在 conda 虚拟环境(python2.7)中运行 mido 和键盘模块
mido
在 Ubuntu 18.04 上,我正在尝试创建一个安装了模块的 conda 虚拟环境keyboard
。这是使用conda create -n my_env python=2.7
and pip install
for mido
and成功完成的keyboard
。当我从 conda 虚拟环境中运行 python 然后键入import mido
和import 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
有没有办法让我有一个虚拟环境可以让两个模块正常运行?
我感谢您的帮助。
python - 使用 Python Mido 库选择 GM MIDI Level 2 乐器
我正在使用 Python Mido
库来创建 MIDI 文件。我发现要更改乐器,您可以program_change
在给定频道的轨道上添加一条消息:
这可行,但我只能访问 GM MIDI Level 1 乐器。我也想访问 GM MIDI Level 2乐器。
请使用代码向我展示如何执行此操作。我通过谷歌搜索找到的所有 MIDI 文档都令人难以置信的混乱。
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。
python - 在特定的 MetaMessage 时间添加 MIDI 和弦
我有一个带有标记作为元消息的 MIDI 文件。
我已将元标记时间存储在列表“chordTimes”中。第一个制造商(和弦位置)不是从 0 开始。我制作了一个新的 MIDI 文件:
现在我通读了我想要的和弦列表,并将它们添加到要添加到 mo 的新曲目中。
但是当我显示它时,和弦似乎不正确并且位置错误,并且看起来比原来的长得多(大约 3 倍)。我检查了输出的标题块:
任何帮助将不胜感激。