2016-07-03 3 views
3

J'ai installé rtmidi pour python et j'ai pu l'importer. Mais quand j'ai essayé d'exécuter l'ensemble de l'exemple d'utilisation donnée ici: https://pypi.python.org/pypi/python-rtmidi, je suis arrivé cette erreur:AttributeError dans l'exemple de code python-rtmidi

AttributeError: objet « rtmidi_python.MidiOut » n'a pas d'attribut « get_ports »

Voici le code complet:

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 

J'ai modifié le code un petit peu dans la partie import, parce que d'une certaine manière cela ne fonctionne pas quand je mets import rtmidi mais fonctionne quand je mets import rtmidi_python. Je utilise Python 3.5. Toute aide sera appréciée, merci!

Répondre

2

La raison pour laquelle vous rencontrez des problèmes est que vous exécutez un exemple de code pour python-rtmidi, mais que vous avez installé rtmidi-python. Je ne plaisante pas, ce sont deux bibliothèques séparées qui font la même chose avec presque la même interface. C'est fou! Vous avez deux options:

  1. vous pouvez installer la bibliothèque correcte en faisant: pip install python-rtmidi
  2. vous pouvez modifier votre code afin qu'il fonctionne avec rtmidi-python comme suit:

    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 
    

Vous voir: au lieu de faire get_ports(), vous référence simplement l'attribut ports.