python - 你如何使用 python-rtmidi 获取 midi 事件

python-rtmidi 的文档基本上是有史以来最糟糕的。我正在尝试弄清楚如何使用该程序获取 MIDI 事件数据。我要的数据是这样的

[

我什至不确定 python-rtmidi 是否可以获取该数据,这就是他们的文档有多糟糕,他们甚至没有告诉您他们的应用程序是做什么的。但无论如何我都需要这些数据,而且我需要它在 python 程序中。 python-rtmidi 网页上存在的唯一示例似乎只显示了如何将 midi 事件输出到外部乐器。我想要相反的。我想让仪器的数据显示在我的电脑上。我至少可以让软件来检测我的外部仪器。例如,当我使用下面的代码时

import logging
import sys
import time

from rtmidi.midiutil import open_midiport
from rtmidi.midiutil import open_midiinput

log = logging.getLogger('test_midiin_poll')

log = logging.getLogger('midiin_poll')
logging.basicConfig(level=logging.DEBUG)

# Prompts user for MIDI input port, unless a valid port number or name
# is given as the first argument on the command line.
# API backend defaults to ALSA on Linux.
port = sys.argv[1] if len(sys.argv) > 1 else None

try:
    midiin, port_name = open_midiport(port)
    midiin, port_name = open_midiinput(port)
except (EOFError, KeyboardInterrupt):
    sys.exit()

它可以检测到我的外部 Alesis 键盘,但我没有看到类似于在键盘上敲击某个键的变量。我还需要指出,我需要可以实时记录事件的python 软件。我的第一个目标是获取 MIDI 事件,然后编写一个程序来计算事件的时间是否正确。


更新

至少这家伙在做我想做的事情。他可以得到 midi 事件,但他没有说他是如何得到它们的。

Mido - How to get midi data in realtime from different ports

最佳答案

好的,我解决了。

import mido

instrument = mido.get_input_names()
inport = mido.open_input(instrument[0])
events = []
while 1:
    msg = inport.receive()
    events.append(msg)

这将创建一个事件列表。您可以从那里对事件进行计算。

https://stackoverflow.com/questions/61814607/

相关文章:

java - IntelliJ + Maven Shade : A JNI error has oc

angular - 如何从变量在 [innerHTML] 上启用 ngx-bootstrap 工具提

css - 有没有办法使用变换比例使内容自动适合父 div?

postman - 如何为 postman (表单数据)中的特定字段传递空数组?

laravel - Firefox 无法与 wss ://127. 0.0.1 的服务器建立连接

google-app-engine - 如何使用 Google Cloud Tasks 扩展拉取队列

java - Netbeans 中的 JUnit 5 测试

c# - w[警告]未找到测试结果文件 azure devops

spring-boot - 如何将Keycloak注册到Spring Eureka Server

karate - 在 Karate 中通过标签并行运行功能