【问题标题】:AttributeError in python-rtmidi sample codepython-rtmidi 示例代码中的 AttributeError
【发布时间】:2016-07-03 02:59:26
【问题描述】:

我为 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。任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: python python-3.x python-import midi python-3.5


    【解决方案1】:

    您遇到问题的原因是您正在运行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
      

    你看:你没有做get_ports(),而是简单地引用ports属性。

    【讨论】:

    • 它实际上比这更疯狂,还有pyrtmidi 有第三种略有不同的语法。更糟糕的是,现在 pyrtmidipython-rtmidi 都使用相同的模块名称:rtmidi。我一直在为我的程序寻找区分两者的方法......
    猜你喜欢
    • 2014-04-15
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2016-05-27
    相关资源
    最近更新 更多