Salut !
Alors je suis bien embêtté, j'ai trouvé le moyen d'envoyer des messages midi avec python grâce à pygame.
Jusqu'ici tout vas bien, ça fonctionne bien.
Maintenant, je souhaiterais envoyer des messages SysEx, et là ya un problème.
Selon la doc :
Très bien. Je choisi le deuxième example de rédaction en remplaçant les valeurs héxadécimales par ce que je veux, je lance et... :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 (assuming o is an onput MIDI stream) o.write_sys_ex(0,'\xF0\x7D\x10\x11\x12\x13\xF7') is equivalent to o.write_sys_ex(pygame.midi.time(), [0xF0,0x7D,0x10,0x11,0x12,0x13,0xF7])
Rien à faire... c'est un bug ou c'est moi qui ai merdé quelque part ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Traceback (most recent call last): File "/home/ronan/Projets/Python/test_midi.py", line 28, in <module> chgShape() File "/home/ronan/Projets/Python/test_midi.py", line 22, in chgShape [0xF0, 0x3E, 0x13, 0x00, 0x20, 0x00, 0x00, 0x08, value, 0xF7]) File "/usr/lib/python3.4/site-packages/pygame/midi.py", line 519, in write_sys_ex self._output.WriteSysEx(when, msg) File "pypm.pyx", line 495, in pypm.Output.WriteSysEx (src/pypm.c:2556) TypeError: must be a unicode character, not bytes
Voici mon programme actuel qui ne fait qu'envoyer 100 notes au hasard et qui a 1 chance sur 10 d'envoyer un message de changement de forme d'onde (dans mon synthé).
Avez-vous une idée de ce qu'il se passe s'il vous plait ?
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 #!/usr/bin/python from pygame import midi from time import sleep from random import randint midi.init() noteOn = midi.Output(4) # choisi périf n°4 def playNote(): "joue une note au hasard" note = randint(36, 64) velo = randint(0, 127) dur = randint(1, 10) noteOn.note_on(note, 127, 0) sleep(1/dur) noteOn.note_off(note, 0, 0) def chgShape(): # changement de waveform value = hex(randint(0, 72)) noteOn.write_sys_ex(midi.time(), [0xF0, 0x3E, 0x13, 0x00, 0x20, 0x00, 0x00, 0x08, value, 0xF7]) i = 0 while i < 100: playNote() if randint(0, 10) == 0: chgShape() i += 1
Merci !![]()
Partager