-
Notifications
You must be signed in to change notification settings - Fork 0
/
pa_client.c
58 lines (48 loc) · 1.26 KB
/
pa_client.c
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <pulse/pulseaudio.h>
#include "stdio_playback.h"
#include <stdio.h>
pa_sample_spec ss = {
.rate = 44100,
.channels = 2,
.format = PA_SAMPLE_S16LE
};
void context_state_cb(pa_context *c, void *userdata) {
pa_context_state_t state = pa_context_get_state(c);
FILE *file = (FILE *) userdata;
switch (state) {
case PA_CONTEXT_READY:
if (start_playback(c, file, &ss) < 0){
fprintf(stderr, "Couldn't open stream\n");
exit(1);
}
break;
case PA_CONTEXT_UNCONNECTED:
case PA_CONTEXT_CONNECTING:
case PA_CONTEXT_AUTHORIZING:
case PA_CONTEXT_SETTING_NAME:
case PA_CONTEXT_FAILED:
case PA_CONTEXT_TERMINATED:
default:
break;
}
}
int main(int argc, char **argv) {
FILE *file = stdin;
if (argc >= 2){
char *filename = argv[1];
file = fopen(filename, "r");
if (file == NULL) {
fprintf(stderr, "Couldn't open file %s\n", filename);
exit(1);
}
}
pa_mainloop *ml = pa_mainloop_new();
pa_mainloop_api *ml_api = pa_mainloop_get_api(ml);
pa_context *c = pa_context_new(ml_api, "My application");
pa_context_connect(c, NULL, PA_CONTEXT_NOFLAGS, NULL);
pa_context_set_state_callback(c, context_state_cb, file);
if (pa_mainloop_run(ml, NULL) < 0){
fprintf(stderr, "error\n");
}
pa_mainloop_free(ml);
}