implemented volume control, and restructured slightly
[dos_auplay] / src / audio.c
index 51a3521..0e16101 100644 (file)
@@ -1,32 +1,19 @@
 #include <stdio.h>\r
 #include "audio.h"\r
-#include "au_sb.h"\r
-\r
-struct audrv {\r
-       void *(*get_buffer)(int *size);\r
-       void (*start)(int rate, int bits, int nchan);\r
-       void (*pause)(void);\r
-       void (*cont)(void);\r
-       void (*stop)(void);\r
-       void (*volume)(int vol);\r
-       int (*isplaying)(void);\r
-};\r
+#include "audrv.h"\r
 \r
 static struct audrv drv;\r
 \r
 static audio_callback_func cbfunc;\r
 static void *cbcls;\r
 \r
+/* driver detect/init functions are defined in their respective source files */\r
+int sb_detect(struct audrv *drv);\r
+\r
+\r
 int audio_init(void)\r
 {\r
-       if(sb_detect()) {\r
-               drv.get_buffer = sb_buffer;\r
-               drv.start = sb_start;\r
-               drv.pause = sb_pause;\r
-               drv.cont = sb_continue;\r
-               drv.stop = sb_stop;\r
-               drv.volume = sb_volume;\r
-               drv.isplaying = sb_isplaying;\r
+       if(sb_detect(&drv)) {\r
                return 0;\r
        }\r
 \r
@@ -69,9 +56,14 @@ void audio_stop(void)
        drv.stop();\r
 }\r
 \r
-void audio_volume(int vol)\r
+void audio_setvolume(int ctl, int vol)\r
+{\r
+       drv.setvolume(ctl, vol);\r
+}\r
+\r
+int audio_getvolume(int ctl)\r
 {\r
-       drv.volume(vol);\r
+       return drv.getvolume(ctl);\r
 }\r
 \r
 int audio_isplaying(void)\r