python-rtmidi示例代码中的AttributeError

时间:2016-07-03 02:59:27

标签: python python-3.x python-import midi 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

我在导入部分中稍微修改了一下代码,因为当我放import rtmidi时它不起作用,但是当我放import rtmidi_python时它会起作用。

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

1 个答案:

答案 0 :(得分:3)

您遇到问题的原因是您正在运行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
    
  3. 您会看到:您只需引用get_ports()属性,而不是ports