73746090
aarnaude
midi vivian
|
1
2
3
|
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
|
30f3c908
aarnaude
analyse flux midi
|
4
5
6
|
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
|
73746090
aarnaude
midi vivian
|
7
8
9
10
11
12
13
14
|
#include <string.h>
#include <signal.h>
#include <getopt.h>
#include <sys/poll.h>
#include <alsa/asoundlib.h>
|
8ebe9c5f
aarnaude
analyse midi
|
15
|
//#define NUM_PORT 20
|
73746090
aarnaude
midi vivian
|
16
|
|
30f3c908
aarnaude
analyse flux midi
|
17
|
|
8ebe9c5f
aarnaude
analyse midi
|
18
19
20
21
22
23
24
|
static snd_seq_t *seq;
int NUM_PORT;
typedef struct {
int type;
int note;
int velocity;
} Evenement;
|
30f3c908
aarnaude
analyse flux midi
|
25
26
27
|
void recup_num(){
FILE* fd;
|
8ebe9c5f
aarnaude
analyse midi
|
28
|
//int NUM_PORT;
|
30f3c908
aarnaude
analyse flux midi
|
29
|
fd=fopen("num_count2.txt","r");
|
8ebe9c5f
aarnaude
analyse midi
|
30
|
fscanf(fd, "%d", &NUM_PORT);
|
9517040e
aarnaude
live avec le clav...
|
31
|
//printf("num = %d \n", NUM_PORT);
|
30f3c908
aarnaude
analyse flux midi
|
32
33
34
35
|
fclose(fd);
}
|
9517040e
aarnaude
live avec le clav...
|
36
|
void init_seq(void)
|
73746090
aarnaude
midi vivian
|
37
38
39
40
41
42
43
44
45
46
47
48
|
{
int err;
/* open sequencer */
err = snd_seq_open(&seq, "default", SND_SEQ_OPEN_DUPLEX, 0);
if (err<0) printf("open sequencer");
/* set our client's name */
err = snd_seq_set_client_name(seq, "analyseurmidi");
if (err<0) printf("set client name");
}
|
9517040e
aarnaude
live avec le clav...
|
49
|
void create_port(void)
|
73746090
aarnaude
midi vivian
|
50
51
52
53
|
{
int err;
err = snd_seq_create_simple_port(seq, "analyseurmidi",
|
8ebe9c5f
aarnaude
analyse midi
|
54
55
56
57
|
SND_SEQ_PORT_CAP_WRITE |
SND_SEQ_PORT_CAP_SUBS_WRITE,
SND_SEQ_PORT_TYPE_MIDI_GENERIC |
SND_SEQ_PORT_TYPE_APPLICATION);
|
73746090
aarnaude
midi vivian
|
58
|
if (err<0)
|
8ebe9c5f
aarnaude
analyse midi
|
59
|
printf("Port non créé \n");
|
73746090
aarnaude
midi vivian
|
60
61
|
}
|
9517040e
aarnaude
live avec le clav...
|
62
|
void connect_port(void)
|
73746090
aarnaude
midi vivian
|
63
64
65
66
|
{
int err;
err = snd_seq_connect_from(seq, 0, NUM_PORT, 0);
if (err < 0)
|
8ebe9c5f
aarnaude
analyse midi
|
67
|
printf("Impossible de se connecter au port \n");
|
30f3c908
aarnaude
analyse flux midi
|
68
69
|
}
|
73746090
aarnaude
midi vivian
|
70
|
|
8ebe9c5f
aarnaude
analyse midi
|
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
Evenement action(snd_seq_event_t *event){
Evenement k;
if (event->type == SND_SEQ_EVENT_NOTEON)
{
k.type=0;
k.note=event->data.note.note;
k.velocity=event->data.note.velocity;
//printf("note : %d , velocite : %d\n",event->data.note.note, event->data.note.velocity);
return k;
}
if (event->type == SND_SEQ_EVENT_NOTEOFF)
{
k.type=1;
k.note=event->data.note.note;
k.velocity=event->data.note.velocity;
//printf("noteOFF : %2d , %d velocite : %d\n", event->data.note.channel, event->data.note.note, event->data.note.velocity);
return k;
}
/* if (event->type == SND_SEQ_EVENT_CONTROLLER)
{
printf("programme : %2d, %d %d\n", event->data.control.channel, event->data.control.param, event->data.control.value);
}*/
return k;
}
|
73746090
aarnaude
midi vivian
|
95
|
|
9517040e
aarnaude
live avec le clav...
|
96
|
Evenement wait_event(){
|
8ebe9c5f
aarnaude
analyse midi
|
97
98
|
struct pollfd *pfds;
int npfds, err;
|
73746090
aarnaude
midi vivian
|
99
100
101
102
103
104
105
106
107
108
109
110
|
npfds = snd_seq_poll_descriptors_count(seq, POLLIN);
pfds = alloca(sizeof(*pfds) * npfds);
for (;;) {
snd_seq_poll_descriptors(seq, pfds, npfds, POLLIN);
if (poll(pfds, npfds, -1) < 0)
break;
do {
snd_seq_event_t *event;
err = snd_seq_event_input(seq, &event);
if (err < 0)
break;
if (event)
|
8ebe9c5f
aarnaude
analyse midi
|
111
|
{
|
9517040e
aarnaude
live avec le clav...
|
112
|
return action(event);
|
8ebe9c5f
aarnaude
analyse midi
|
113
|
}
|
73746090
aarnaude
midi vivian
|
114
115
|
} while (err > 0);
fflush(stdout);
|
8ebe9c5f
aarnaude
analyse midi
|
116
|
}
|
9517040e
aarnaude
live avec le clav...
|
117
|
|
73746090
aarnaude
midi vivian
|
118
|
|
8ebe9c5f
aarnaude
analyse midi
|
119
|
}
|
30f3c908
aarnaude
analyse flux midi
|
120
121
|
|
9517040e
aarnaude
live avec le clav...
|
122
|
void close_sequencer(){
|
8ebe9c5f
aarnaude
analyse midi
|
123
|
snd_seq_close(seq);
|
73746090
aarnaude
midi vivian
|
124
|
}
|