diff win95kggui/dep/ft2play/audiodrivers/sdl/sdldriver.c @ 126:8e4ee43d3b81

remove submodules
author Paper <mrpapersonic@gmail.com>
date Sun, 01 Oct 2023 03:48:43 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/win95kggui/dep/ft2play/audiodrivers/sdl/sdldriver.c	Sun Oct 01 03:48:43 2023 -0400
@@ -0,0 +1,64 @@
+// SDL audio driver for ft2play
+
+#include <SDL2/SDL.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include "../../pmp_mix.h"
+
+static SDL_AudioDeviceID dev;
+
+static void SDLCALL audioCallback(void *userdata, Uint8 *stream, int len)
+{
+	mix_UpdateBuffer((int16_t *)stream, len / 4); // pmp_mix.c function
+	(void)userdata;
+}
+
+void lockMixer(void)
+{
+	if (dev != 0)
+		SDL_LockAudioDevice(dev);
+}
+
+void unlockMixer(void)
+{
+	if (dev != 0)
+		SDL_UnlockAudioDevice(dev);
+}
+
+bool openMixer(int32_t mixingFrequency, int32_t mixingBufferSize)
+{
+	SDL_AudioSpec want, have;
+
+	if (dev != 0)
+		return true;
+
+	if (SDL_Init(SDL_INIT_AUDIO) != 0)
+		return false;
+
+	memset(&want, 0, sizeof (want));
+	want.freq = mixingFrequency;
+	want.format = AUDIO_S16;
+	want.channels = 2;
+	want.samples = (uint16_t)mixingBufferSize;
+	want.callback = audioCallback;
+
+	dev = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
+	if (dev == 0)
+		return false;
+
+	SDL_PauseAudioDevice(dev, false);
+	return true;
+}
+
+void closeMixer(void)
+{
+	if (dev != 0)
+	{
+		SDL_PauseAudioDevice(dev, true);
+		SDL_CloseAudioDevice(dev);
+		dev = 0;
+	}
+
+	SDL_Quit();
+}