簡體   English   中英

如何使用 python-rtmidi 獲取 midi 事件

[英]How do you get midi events using python-rtmidi

python-rtmidi的文檔基本上是有史以來最糟糕的。 我試圖弄清楚如何使用該程序獲取 midi 事件數據。 我想要的數據是這樣的

[1]

我什至不確定python-rtmidi可以獲取該數據,這就是他們的文檔有多糟糕,他們甚至沒有告訴您他們的應用程序是做什么的。 但在任何情況下,我都需要這些數據,並且我需要它在 python 程序中。 python-rtmidi網頁上存在的唯一示例似乎只顯示了如何 output 將 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 - 如何從不同端口實時獲取 midi 數據

好的,我解決了。

import mido

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

這將創建一個事件列表。 從那里您可以對事件進行計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM