implemented volume control, and restructured slightly
[dos_auplay] / src / audio.c
1 #include <stdio.h>\r
2 #include "audio.h"\r
3 #include "audrv.h"\r
4 \r
5 static struct audrv drv;\r
6 \r
7 static audio_callback_func cbfunc;\r
8 static void *cbcls;\r
9 \r
10 /* driver detect/init functions are defined in their respective source files */\r
11 int sb_detect(struct audrv *drv);\r
12 \r
13 \r
14 int audio_init(void)\r
15 {\r
16         if(sb_detect(&drv)) {\r
17                 return 0;\r
18         }\r
19 \r
20         fprintf(stderr, "No supported audio device detected\n");\r
21         return -1;\r
22 }\r
23 \r
24 void audio_set_callback(audio_callback_func func, void *cls)\r
25 {\r
26         cbfunc = func;\r
27         cbcls = cls;\r
28 }\r
29 \r
30 int audio_callback(void *buf, int sz)\r
31 {\r
32         if(!cbfunc) {\r
33                 return 0;\r
34         }\r
35         return cbfunc(buf, sz, cbcls);\r
36 }\r
37 \r
38 void audio_play(int rate, int bits, int nchan)\r
39 {\r
40         printf("play %d samples/s, %d bits, %s\n", rate, bits, nchan == 1 ? "mono" : "stereo");\r
41         drv.start(rate, bits, nchan);\r
42 }\r
43 \r
44 void audio_pause(void)\r
45 {\r
46         drv.pause();\r
47 }\r
48 \r
49 void audio_resume(void)\r
50 {\r
51         drv.cont();\r
52 }\r
53 \r
54 void audio_stop(void)\r
55 {\r
56         drv.stop();\r
57 }\r
58 \r
59 void audio_setvolume(int ctl, int vol)\r
60 {\r
61         drv.setvolume(ctl, vol);\r
62 }\r
63 \r
64 int audio_getvolume(int ctl)\r
65 {\r
66         return drv.getvolume(ctl);\r
67 }\r
68 \r
69 int audio_isplaying(void)\r
70 {\r
71         return drv.isplaying();\r
72 }\r