2
0
Эх сурвалжийг харах

Added specific miniaudio audio drivers.

Brucey 5 жил өмнө
parent
commit
b8682df85a

+ 3 - 1
soloud.mod/soloud/src/backend/miniaudio/soloud_miniaudio.cpp

@@ -43,6 +43,8 @@ namespace SoLoud
 #include "miniaudio.h"
 #include <math.h>
 
+extern ma_context * _bmx_ma_context;
+
 namespace SoLoud
 {
     ma_device gDevice;
@@ -68,7 +70,7 @@ namespace SoLoud
         config.dataCallback       = soloud_miniaudio_audiomixer;
         config.pUserData          = (void *)aSoloud;
 
-        if (ma_device_init(NULL, &config, &gDevice) != MA_SUCCESS)
+        if (ma_device_init(_bmx_ma_context, &config, &gDevice) != MA_SUCCESS)
         {
             return UNKNOWN_ERROR;
         }

+ 119 - 1
soloudaudiominiaudio.mod/soloudaudiominiaudio.bmx

@@ -34,14 +34,132 @@ Type TMiniAudioSoloudAudioDriver Extends TSoloudAudioDriver
 	End Method
 End Type
 
-Type TSoloudMiniAudioAudioDriver Extends TSoloudAudioDriver
+?win32
+New TWASAPISoloudAudioDriver
+New TDirectSoundSoloudAudioDriver
+New TWinmMMSoloudAudioDriver
+New TDefaultSoloudAudioDriver
+
+Type TWASAPISoloudAudioDriver Extends TMiniAudioSoloudAudioDriver
+
+	Method Name$()
+		Return "SoLoud::WASAPI"
+	End Method
+
+	Method Startup:Int()
+		MiniAudioInit(MA_BACKEND_WASAPI)
+		Return Super.Startup()
+	End Method
+	
+End Type
+
+Type TDirectSoundSoloudAudioDriver Extends TMiniAudioSoloudAudioDriver
+
+	Method Name$()
+		Return "SoLoud::DirectSound"
+	End Method
+
+	Method Startup:Int()
+		MiniAudioInit(MA_BACKEND_DSOUND)
+		Return Super.Startup()
+	End Method
+	
+End Type
+
+Type TWinmMMSoloudAudioDriver Extends TMiniAudioSoloudAudioDriver
+
+	Method Name$()
+		Return "SoLoud::WinMM"
+	End Method
+
+	Method Startup:Int()
+		MiniAudioInit(MA_BACKEND_WINMM)
+		Return Super.Startup()
+	End Method
+	
+End Type
+
+Type TDefaultSoloudAudioDriver Extends TDirectSoundSoloudAudioDriver
+
+	Method Name$()
+		Return "SoLoud"
+	End Method
+
+End Type
+?linux
+New TALSASoloudAudioDriver
+New TPulseAudioSoloudAudioDriver
+New TJACKSoloudAudioDriver
+New TDefaultSoloudAudioDriver
+
+Type TALSASoloudAudioDriver Extends TMiniAudioSoloudAudioDriver
+
+	Method Name$()
+		Return "SoLoud::ALSA"
+	End Method
+
+	Method Startup:Int()
+		MiniAudioInit(MA_BACKEND_ALSA)
+		Return Super.Startup()
+	End Method
+	
+End Type
+
+Type TPulseAudioSoloudAudioDriver Extends TMiniAudioSoloudAudioDriver
+
+	Method Name$()
+		Return "SoLoud::PulseAudio"
+	End Method
+
+	Method Startup:Int()
+		MiniAudioInit(MA_BACKEND_PULSEAUDIO)
+		Return Super.Startup()
+	End Method
+	
+End Type
+
+Type TJACKSoloudAudioDriver Extends TMiniAudioSoloudAudioDriver
+
+	Method Name$()
+		Return "SoLoud::JACK"
+	End Method
+
+	Method Startup:Int()
+		MiniAudioInit(MA_BACKEND_JACK)
+		Return Super.Startup()
+	End Method
+	
+End Type
+
+Type TDefaultSoloudAudioDriver Extends TPulseAudioSoloudAudioDriver
 
 	Method Name$()
 		Return "SoLoud"
 	End Method
 
+End Type
+?macos
+New TCoreAudioSoloudAudioDriver
+New TDefaultSoloudAudioDriver
+
+Type TCoreAudioSoloudAudioDriver Extends TMiniAudioSoloudAudioDriver
+
+	Method Name$()
+		Return "SoLoud::CoreAudio"
+	End Method
+
 	Method Startup:Int()
+		MiniAudioInit(MA_BACKEND_COREAUDIO)
 		Return Super.Startup()
 	End Method
+	
+End Type
+
+Type TDefaultSoloudAudioDriver Extends TCoreAudioSoloudAudioDriver
+
+	Method Name$()
+		Return "SoLoud"
+	End Method
 
 End Type
+?

+ 5 - 6
soloudaudiosdl.mod/soloudaudiosdl.bmx

@@ -26,18 +26,17 @@ Module Audio.SoloudAudioSDL
 Import Audio.SoloudSDL
 Import Audio.SoloudAudio
 
-
-?win32
-New TDirectSoundSoloudAudioDriver
-New TWinmMMSoloudAudioDriver
-New TDefaultSoloudAudioDriver
-
 Type TSDLSoloudAudioDriver Extends TSoloudAudioDriver
 	Method Backend:Int()
 		Return SOLOUD_SDL2
 	End Method
 End Type
 
+?win32
+New TDirectSoundSoloudAudioDriver
+New TWinmMMSoloudAudioDriver
+New TDefaultSoloudAudioDriver
+
 Type TDirectSoundSoloudAudioDriver Extends TSDLSoloudAudioDriver
 
 	Method Name$()

+ 18 - 0
soloudminiaudio.mod/common.bmx

@@ -28,8 +28,26 @@ Import "source.bmx"
 Private
 Extern
 	Function miniaudio_stub()
+	
 End Extern
 
 Function _miniaudio_stub()
 	miniaudio_stub()
 End Function
+
+Public
+
+Const MA_BACKEND_WASAPI:Int = 0
+Const MA_BACKEND_DSOUND:Int = 1
+Const MA_BACKEND_WINMM:Int = 2
+Const MA_BACKEND_COREAUDIO:Int = 4
+Const MA_BACKEND_SNDIO:Int = 5
+Const MA_BACKEND_AUDIO4:Int = 6
+Const MA_BACKEND_OSS:Int = 7
+Const MA_BACKEND_PULSEAUDIO:Int = 8
+Const MA_BACKEND_ALSA:Int = 9
+Const MA_BACKEND_JACK:Int = 10
+Const MA_BACKEND_AAUDIO:Int = 11
+Const MA_BACKEND_OPENSL:Int = 12
+Const MA_BACKEND_WEBAUDIO:Int = 13
+Const MA_BACKEND_NULL:Int = 14

+ 20 - 0
soloudminiaudio.mod/glue.cpp

@@ -1,4 +1,5 @@
 #include "soloud.h"
+#include "miniaudio.h"
 
 namespace SoLoud {
 
@@ -11,8 +12,27 @@ namespace SoLoud {
 
 }
 
+ma_context * _bmx_ma_context = 0;
+
 extern "C" {
 
+void bmx_soloud_miniaudio_context_deinit() {
+	ma_context_uninit(_bmx_ma_context);
+}
+
+void bmx_soloud_miniaudio_context_init(ma_backend backend) {
+	if (_bmx_ma_context) {
+		bmx_soloud_miniaudio_context_deinit();
+	} else {
+		_bmx_ma_context = (ma_context*)malloc(sizeof(ma_context));
+	}
+	
+	ma_backend backends[] = { backend };
+	
+	ma_context_init(backends, 1, NULL, _bmx_ma_context);
+}
+
+
 // linkage requires us to have a call to miniaudio_init
 void miniaudio_stub() {
 	SoLoud::miniaudio_init(0, 0, 0, 0);

+ 8 - 0
soloudminiaudio.mod/soloudminiaudio.bmx

@@ -48,3 +48,11 @@ ModuleInfo "CC_OPTS: -DWITH_MINIAUDIO"
 
 Import "common.bmx"
 
+Function MiniAudioInit(backend:Int)
+	bmx_soloud_miniaudio_context_init(backend)
+End Function
+
+Private
+Extern
+	Function bmx_soloud_miniaudio_context_init(backend:Int)
+End Extern

+ 1 - 0
soloudminiaudio.mod/source.bmx

@@ -22,6 +22,7 @@
 SuperStrict
 
 Import "../soloud.mod/soloud/include/*.h"
+Import "../soloud.mod/soloud/src/backend/miniaudio/*.h"
 
 ' backend - miniaudio
 Import "../soloud.mod/soloud/src/backend/miniaudio/soloud_miniaudio.cpp"