python-rtmidi示例代码中的AttributeError

Fel*_*tha 5 python midi python-import python-3.x python-3.5

我为 python 安装了 rtmidi 并且能够导入它。但是,当我尝试运行此处给出的整个用法示例时:https : //pypi.python.org/pypi/python-rtmidi,出现此错误:

AttributeError: 'rtmidi_python.MidiOut' 对象没有属性 'get_ports'

这是完整的代码:

import time
import rtmidi_python as rtmidi

midiout = rtmidi.MidiOut()
available_ports = midiout.get_ports()

if available_ports:
    midiout.open_port(0)
else:
    midiout.open_virtual_port("My virtual output")

note_on = [0x90, 60, 112] # channel 1, middle C, velocity 112
note_off = [0x80, 60, 0]
midiout.send_message(note_on)
time.sleep(0.5)
midiout.send_message(note_off)

del midiout
Run Code Online (Sandbox Code Playgroud)

我在导入部分稍微修改了代码,因为不知何故,当我放入时它不起作用,import rtmidi但当我放入import rtmidi_python.

我正在使用 Python 3.5。任何帮助将不胜感激,谢谢!

Dav*_*idH 8

您遇到问题的原因是您正在运行python-rtmidi 的示例代码,但您安装了rtmidi-python。我不骗你,这是两个独立的库,它们用几乎相同的界面做同样的事情。真是疯了!您有两个选择:

  1. 您可以通过执行以下操作来安装正确的库: pip install python-rtmidi
  2. 您可以修改您的代码,使其工作rtmidi-python如下:

    import time
    import rtmidi_python as rtmidi
    
    midiout = rtmidi.MidiOut()
    available_ports = midiout.ports
    
    if available_ports:
        midiout.open_port(0)
    else:
        midiout.open_virtual_port("My virtual output")
    
    note_on = [0x90, 60, 112] # channel 1, middle C, velocity 112
    note_off = [0x80, 60, 0]
    midiout.send_message(note_on)
    time.sleep(0.5)
    midiout.send_message(note_off)
    
    del midiout
    
    Run Code Online (Sandbox Code Playgroud)

您会看到:您没有执行get_ports(),而是简单地引用了ports属性。