如何使用pythontmidi获取midi事件

2024-06-02 14:14:02 发布

您现在位置:Python中文网/ 问答频道 /正文

python-rtmidi的文档基本上是有史以来最糟糕的。我正试图找出如何使用该程序获取midi事件数据。我想要的数据是这样的

[1]

我甚至不确定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


Tags: 数据namefrom文档import程序portlogging
1条回答
网友
1楼 · 发布于 2024-06-02 14:14:02

好的,我解决了

import mido

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

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

相关问题 更多 >