Bonjour,
je suis entrain d'essayer de programmer un player midi en ligne de commande sous linux.
Voici une partie de code (désolé je débute ;-) )
En gros je definit le port d'entre et de sortie midi ..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 outport = mido.open_output('MIDISPORT 2x2 Anniv:MIDISPORT 2x2 Anniv MIDI 1 28:0') songlist = (glob.glob("/home/pi/Documents/song/*.mid")); def songplay(song): with outport as output: try: midifile = MidiFile(song) while True: for message in midifile.play(): output.send(message) except KeyboardInterrupt: print() output.reset() try: with mido.open_input('arduino_midi:arduino_midi MIDI 1 20:0') as port: for message in port: print(message) if message.type in ('note_on') and message.note == 36: print(songlist[i]) if i == (nbrsong-1): i = 0 else: i += 1 if message.type in ('note_on') and message.note == 37: songplay(songlist[i]) sys.stdout.flush() except KeyboardInterrupt: pass
Je definit une fonction songplay qui lit le fichier midi en boucle
et dans le try , j'écout ce qui entre sur le port d'entrée midi ... SI note 36 on change de chanson dans la liste ... si note 37 on lance la fonction songplay ...
Mon problème , une fois que le fichier midi se lit (quand je suis dans la fonction songplay) , il ne reagit plus à mes entrée midi, il n'interprete plus le code du try ...
A mon avis c'est une betise et je n'utilise pas les bons truc (try, fonction, with ...) mais je suis perdu
Partager