IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Pygame, midi et SysEx


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Pygame, midi et SysEx
    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 :

    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])
    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
    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
    Rien à faire... c'est un bug ou c'est moi qui ai merdé quelque part ?

    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é).
    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
    Avez-vous une idée de ce qu'il se passe s'il vous plait ?
    Merci !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon, j'ai trouvé déjà un indice.
    Il semble que pygame fonctionne mal avec Python 3, me trompe-je ou c'est mon installation qui est foireuse ?

    J'ai essayé avec python 2 et pour le moment pas de message d'erreur impromptus...

  3. #3
    Membre du Club

    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Points : 52
    Points
    52
    Par défaut
    j'ai eu le même pb quand j'ai créé un éditeur de synthé hardware avec Kivy.

    finalement j'utilise rtmidi-python 0.2.2 https://pypi.python.org/pypi/rtmidi-python depuis pas mal de temps

    il fonctionne nickel avec python 3 (testé 3.5 et windows 7, 8 et 10)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ah merci beaucoup !
    La doc n'explique pas comment envoyer du SysEx, est-ce possible ?

  5. #5
    Membre du Club

    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Points : 52
    Points
    52
    Par défaut
    aucun pb , un extrait de mon app ( tu peux aussi mettre les valeurs en decimal ca marche aussi)

    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
    import rtmidi_python as rtmidi
     
    midi_out = rtmidi.MidiOut()
    midi_out.open_port(1)
     
    midi_in = rtmidi.MidiIn()
    midi_in.open_port(0)
    midi_in.ignore_types(midi_sysex=False)
     
    start = [0xF0, 0x01, 0x20, 0x01, 0x5]
    data = [bk, pg]
    end = [0xF7]
     
    sysex_string = start + data + end
     
    midi_out.send_message(sysex_string)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ptain, ya un truc que j'ai encore pas pigé avec Python moi.
    L'exemple que tu me donne là, après coup il est évident... mais j'y avais pas pensé :-(

    Merci beaucoup, je vire donc pygame au profit de rtmidi :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [pygame] entrée midi
    Par pfeuh dans le forum Programmation multimédia/Jeux
    Réponses: 10
    Dernier message: 23/08/2013, 19h43
  2. Jouer un son MIDI
    Par Slock dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2003, 11h02
  3. La structure du format midi
    Par Bubonik software dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 27/09/2003, 13h17
  4. Son Midi
    Par carlg dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 09/05/2003, 22h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo