2017-09-11 8 views
1

Je suis en utilisant cette fonction pour détecter des événements de mon clavier MIDI qui puis faire imprimer comme partition:Fonction Pygame MIDI pour appuyer simplement sur la touche ou sur la touche plutôt que sur MIDIIN?

for e in events: 
    if 
    if e.type in [pygame.midi.MIDIIN]: 

Cela renvoie 2 événements, une lorsque la touche est enfoncée et un quand il est pressé Cela fonctionne très bien pour les notes individuelles parce que je crée simplement une fonction pour que l'instruction if se déclenche à chaque fois qu'il y a un événement mais c'est difficile pour les accords car les événements pourraient se produire dans un ordre différent. keydown, note 41 touche en haut, note 40 touche en haut. ou notez 40 vers le bas, note 41 vers le haut, note 40 vers le bas, note 41 vers le haut. Etc etc. Sauf que ça ne dit pas 'key up' ou 'key down' ça déclenche juste l'instruction if. Ma question est la suivante: y a-t-il une fonction qui ne se déclenchera que si la touche est pressée vers le bas ou vers le haut? Quelque chose comme pygame.midi.MIDI_KEYDOWN

+0

Quels sont les attributs de l'événement midi? 'print (dir (e))' – skrx

+0

J'utilise juste e.data1 qui me dit quelle note a été jouée mais il y en a 4 ou 5 je pense –

+0

Les événements midi ont des attributs 'keydown' et' keyup' similaires au 'pygame Types d'événement .KEYDOWN' et 'KEYUP'? – skrx

Répondre

0

La fonction read() renvoie simplement les octets bruts d'un message MIDI, sans les analyser.

La fonction midis2events() ne fait pas vraiment quoi que ce soit avec ces octets soit:

((status,data1,data2,data3),timestamp) = midi 

    e = pygame.event.Event(MIDIIN, 
          status=status, 
          data1=data1, 
          data2=data2, 
          data3=data3, 
          timestamp=timestamp, 
          vice_id = device_id) 

Vous devez analyser les messages vous: tout octet d'état entre 0x90 et 0x9F est note sur et entre 0x80 et 0x8F, notez.

+0

ya que j'utilise juste l'attribut d'état thx –