from ctypes import * from RPi import GPIO from threading import Thread from threading import Event import dico_akai import ctypes as ct import signal import sys _lib = ct.cdll.LoadLibrary("./libanalysemidi.so") class Evenement(Structure): _fields_ = [("type", ct.c_int),("note", ct.c_int), ("velocity",ct.c_int)] _lib.wait_event.restype = Evenement class FD(Thread): def __init__(self, pin): Thread.__init__(self); self.pin = pin self.running = False def run(self): p = GPIO.PWM(self.pin,1) p.start(50) self.running = True while self.running: if b == 1: if r.type == 0: p.ChangeFrequency(dico_akai.midi_note[r.note]) if r.type == 1: p.ChangeFrequency(1) def stop(self): self.running = False def fin_du_live(signal, frame): print("fin du live") fd1.stop() fd2.stop() fd1.join() fd2.join() GPIO.cleanup() _lib.close() sys.exit(0) signal.signal(signal.SIGINT, fin_du_live) _lib.recup_num() _lib.init_seq() _lib.create_port() _lib.connect_port() #Initialisation des FDs GPIO.setmode(GPIO.BCM) #FD1 GPIO.setup(23,GPIO.OUT) GPIO.setup(24,GPIO.OUT) GPIO.setup(25,GPIO.OUT) #FD2 GPIO.setup(16,GPIO.OUT) GPIO.setup(20,GPIO.OUT) GPIO.setup(21,GPIO.OUT) #PWM GPIO.setup(18,GPIO.OUT) GPIO.setup(13,GPIO.OUT) #Act FD1 GPIO.output(23,GPIO.LOW) GPIO.output(24,GPIO.LOW) GPIO.output(25,GPIO.LOW) #Act FD2 GPIO.output(16,GPIO.LOW) GPIO.output(20,GPIO.LOW) GPIO.output(21,GPIO.LOW) r = _lib.wait_event() b = 1 fd1 = FD(13) fd2 = FD(18) fd1.start() fd2.start() while(True): prev = r.type r = _lib.wait_event() if r.type != prev: b=1 else: b=0