[AD] WaveOut sounddriver

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


This adds 2 new drivers to allegro (win ver) which use WaveOut instead
of DirectSound. The attached file goes in allegro/src/win (wsndwo.c).
The diff makes minor changes to integrate the new drivers.

Please test compilation with MSVC, I used mingw only.

Reasons:
Works without DirectX
Some drivers work better with WaveOut than dsound
Negligible size increase
Selectable sound quality
Index: makefile.lst
===================================================================
RCS file: /cvsroot/alleg/allegro/makefile.lst,v
retrieving revision 1.7
diff -u -r1.7 makefile.lst
--- makefile.lst	2000/09/26 14:55:32	1.7
+++ makefile.lst	2000/10/08 21:23:00
@@ -166,6 +166,7 @@
 	src/win/update.s \
 	src/win/wdsound.c \
 	src/win/wdsndmix.c \
+	src/win/wsndwo.c \
 	src/win/wdxver.c \
 	src/win/wdispsw.c \
 	src/win/wfile.c \
Index: include/allegro/alwin.h
===================================================================
RCS file: /cvsroot/alleg/allegro/include/allegro/alwin.h,v
retrieving revision 1.2
diff -u -r1.2 alwin.h
--- include/allegro/alwin.h	2000/09/24 15:51:01	1.2
+++ include/allegro/alwin.h	2000/10/08 21:23:03
@@ -155,6 +155,7 @@
 /********************************************/
 #define DIGI_DIRECTX(n)          AL_ID('D','X','A'+(n),' ')
 #define DIGI_DIRECTAMX(n)        AL_ID('A','X','A'+(n),' ')
+#define DIGI_WAVOUTID(n)         AL_ID('W','O','A'+(n),' ')
 #define MIDI_WIN32(n)            AL_ID('W','3','2','A'+(n))
Index: src/win/wdsound.c
===================================================================
RCS file: /cvsroot/alleg/allegro/src/win/wdsound.c,v
retrieving revision 1.4
diff -u -r1.4 wdsound.c
--- src/win/wdsound.c	2000/09/24 15:51:01	1.4
+++ src/win/wdsound.c	2000/10/08 21:23:44
@@ -194,6 +194,9 @@
 /* Function from wdsndmix.c to get a driver */
 DIGI_DRIVER * _get_dsalmix_driver (char *, int);
 
+/* Function from wsndwo.c to get a driver */
+DIGI_DRIVER *_get_woalmix_driver (int);
+
 /* _get_digi_driver_list:
  *  System driver hook for listing the available sound drivers. This 
  *  generates the device list at runtime, to match whatever DirectSound
@@ -208,7 +211,8 @@
       DirectSoundEnumerate(DSEnumCallback, NULL);
 
 /* This function has to allocate drivers for wdsndmix.c as well */
-      driver_list = malloc(sizeof(_DRIVER_INFO) * ((num_drivers*2)+2));
+/* and also, wsndwo.c ASSUMES 2 DRIVERS */
+      driver_list = malloc(sizeof(_DRIVER_INFO) * ((num_drivers*2)+4));
 
 /* wdsound.c drivers */
       for (i=0; i<num_drivers; i++) {
@@ -232,17 +236,29 @@
          driver_list[i+num_drivers].driver = driver;
          driver_list[i+num_drivers].autodetect = TRUE;
       }
+
+      driver = _get_woalmix_driver (0);
+      driver_list[i+num_drivers].id = driver->id;
+      driver_list[i+num_drivers].driver = driver;
+      driver_list[i+num_drivers].autodetect = TRUE;
+	i++;
+      driver = _get_woalmix_driver (1);
+      driver_list[i+num_drivers].id = driver->id;
+      driver_list[i+num_drivers].driver = driver;
+      driver_list[i+num_drivers].autodetect = TRUE;
+	i++;
+
       driver_list[i+num_drivers].id = DIGI_NONE;
       driver_list[i+num_drivers].driver = &digi_none;
       driver_list[i+num_drivers].autodetect = TRUE;
+      i++;
  
-      driver_list[i+num_drivers+1].id = 0;
-      driver_list[i+num_drivers+1].driver = NULL;
-      driver_list[i+num_drivers+1].autodetect = FALSE;
+      driver_list[i+num_drivers].id = 0;
+      driver_list[i+num_drivers].driver = NULL;
+      driver_list[i+num_drivers].autodetect = FALSE;
    }
 
    return driver_list;
-
 }
 
 

Attachment: wsndwo.c
Description: application/unknown-content-type-devcpp.c



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/