Commit 9517040e20820ebb65f5a3250a0843fb091e99f8
1 parent
876963c4
live avec le clavier midi
Showing
3 changed files
with
92 additions
and
16 deletions
Show diff stats
analyse_midi_keyboard.c
@@ -28,12 +28,12 @@ void recup_num(){ | @@ -28,12 +28,12 @@ void recup_num(){ | ||
28 | //int NUM_PORT; | 28 | //int NUM_PORT; |
29 | fd=fopen("num_count2.txt","r"); | 29 | fd=fopen("num_count2.txt","r"); |
30 | fscanf(fd, "%d", &NUM_PORT); | 30 | fscanf(fd, "%d", &NUM_PORT); |
31 | - printf("num = %d \n", NUM_PORT); | 31 | + //printf("num = %d \n", NUM_PORT); |
32 | fclose(fd); | 32 | fclose(fd); |
33 | 33 | ||
34 | } | 34 | } |
35 | 35 | ||
36 | -static void init_seq(void) | 36 | +void init_seq(void) |
37 | { | 37 | { |
38 | int err; | 38 | int err; |
39 | 39 | ||
@@ -46,7 +46,7 @@ static void init_seq(void) | @@ -46,7 +46,7 @@ static void init_seq(void) | ||
46 | if (err<0) printf("set client name"); | 46 | if (err<0) printf("set client name"); |
47 | } | 47 | } |
48 | 48 | ||
49 | -static void create_port(void) | 49 | +void create_port(void) |
50 | { | 50 | { |
51 | int err; | 51 | int err; |
52 | 52 | ||
@@ -59,7 +59,7 @@ static void create_port(void) | @@ -59,7 +59,7 @@ static void create_port(void) | ||
59 | printf("Port non créé \n"); | 59 | printf("Port non créé \n"); |
60 | } | 60 | } |
61 | 61 | ||
62 | -static void connect_port(void) | 62 | +void connect_port(void) |
63 | { | 63 | { |
64 | int err; | 64 | int err; |
65 | err = snd_seq_connect_from(seq, 0, NUM_PORT, 0); | 65 | err = snd_seq_connect_from(seq, 0, NUM_PORT, 0); |
@@ -93,8 +93,7 @@ Evenement action(snd_seq_event_t *event){ | @@ -93,8 +93,7 @@ Evenement action(snd_seq_event_t *event){ | ||
93 | return k; | 93 | return k; |
94 | } | 94 | } |
95 | 95 | ||
96 | -void boucle(){ | ||
97 | - Evenement k; | 96 | +Evenement wait_event(){ |
98 | struct pollfd *pfds; | 97 | struct pollfd *pfds; |
99 | int npfds, err; | 98 | int npfds, err; |
100 | npfds = snd_seq_poll_descriptors_count(seq, POLLIN); | 99 | npfds = snd_seq_poll_descriptors_count(seq, POLLIN); |
@@ -110,21 +109,16 @@ void boucle(){ | @@ -110,21 +109,16 @@ void boucle(){ | ||
110 | break; | 109 | break; |
111 | if (event) | 110 | if (event) |
112 | { | 111 | { |
113 | - action(event); | 112 | + return action(event); |
114 | } | 113 | } |
115 | } while (err > 0); | 114 | } while (err > 0); |
116 | fflush(stdout); | 115 | fflush(stdout); |
117 | } | 116 | } |
117 | + | ||
118 | 118 | ||
119 | } | 119 | } |
120 | 120 | ||
121 | 121 | ||
122 | -int lancer(){ | ||
123 | - recup_num(); | ||
124 | - init_seq(); | ||
125 | - create_port(); | ||
126 | - connect_port(); | ||
127 | - boucle(); | 122 | +void close_sequencer(){ |
128 | snd_seq_close(seq); | 123 | snd_seq_close(seq); |
129 | - return 0; | ||
130 | } | 124 | } |
test.py
1 | +from ctypes import * | ||
2 | +from RPi import GPIO | ||
3 | +from threading import Thread | ||
4 | +from threading import Event | ||
5 | +import dico_akai | ||
1 | import ctypes as ct | 6 | import ctypes as ct |
2 | -_lib = ct.cdll.LoadLibrary("./analyse.so") | 7 | +import signal |
8 | +import sys | ||
3 | 9 | ||
4 | -_lib.lancer() | 10 | +_lib = ct.cdll.LoadLibrary("./libanalysemidi.so") |
5 | 11 | ||
12 | +class Evenement(Structure): | ||
13 | + _fields_ = [("type", ct.c_int),("note", ct.c_int), ("velocity",ct.c_int)] | ||
6 | 14 | ||
15 | +_lib.wait_event.restype = Evenement | ||
16 | + | ||
17 | +class FD(Thread): | ||
18 | + | ||
19 | + def __init__(self, pin): | ||
20 | + Thread.__init__(self); | ||
21 | + self.pin = pin | ||
22 | + self.running = False | ||
23 | + | ||
24 | + def run(self): | ||
25 | + p = GPIO.PWM(self.pin,1) | ||
26 | + p.start(50) | ||
27 | + self.running = True | ||
28 | + while self.running: | ||
29 | + if b == 1: | ||
30 | + if r.type == 0: | ||
31 | + p.ChangeFrequency(dico_akai.midi_note[r.note]) | ||
32 | + if r.type == 1: | ||
33 | + p.ChangeFrequency(1) | ||
34 | + | ||
35 | + def stop(self): | ||
36 | + self.running = False | ||
37 | + | ||
38 | +def fin_du_live(signal, frame): | ||
39 | + print("fin du live") | ||
40 | + fd1.stop() | ||
41 | + fd2.stop() | ||
42 | + fd1.join() | ||
43 | + fd2.join() | ||
44 | + GPIO.cleanup() | ||
45 | + _lib.close() | ||
46 | + sys.exit(0) | ||
47 | + | ||
48 | +signal.signal(signal.SIGINT, fin_du_live) | ||
49 | +_lib.recup_num() | ||
50 | +_lib.init_seq() | ||
51 | +_lib.create_port() | ||
52 | +_lib.connect_port() | ||
53 | +#Initialisation des FDs | ||
54 | +GPIO.setmode(GPIO.BCM) | ||
55 | +#FD1 | ||
56 | +GPIO.setup(23,GPIO.OUT) | ||
57 | +GPIO.setup(24,GPIO.OUT) | ||
58 | +GPIO.setup(25,GPIO.OUT) | ||
59 | +#FD2 | ||
60 | +GPIO.setup(16,GPIO.OUT) | ||
61 | +GPIO.setup(20,GPIO.OUT) | ||
62 | +GPIO.setup(21,GPIO.OUT) | ||
63 | +#PWM | ||
64 | +GPIO.setup(18,GPIO.OUT) | ||
65 | +GPIO.setup(13,GPIO.OUT) | ||
66 | +#Act FD1 | ||
67 | +GPIO.output(23,GPIO.LOW) | ||
68 | +GPIO.output(24,GPIO.LOW) | ||
69 | +GPIO.output(25,GPIO.LOW) | ||
70 | +#Act FD2 | ||
71 | +GPIO.output(16,GPIO.LOW) | ||
72 | +GPIO.output(20,GPIO.LOW) | ||
73 | +GPIO.output(21,GPIO.LOW) | ||
74 | +r = _lib.wait_event() | ||
75 | +b = 1 | ||
76 | +fd1 = FD(13) | ||
77 | +fd2 = FD(18) | ||
78 | +fd1.start() | ||
79 | +fd2.start() | ||
80 | +while(True): | ||
81 | + prev = r.type | ||
82 | + r = _lib.wait_event() | ||
83 | + if r.type != prev: | ||
84 | + b=1 | ||
85 | + else: | ||
86 | + b=0 |