From 6aaedb813fa11ba0679c3051bc2eb28646b9506c Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 30 Aug 2025 16:53:58 -0700 Subject: Update to SDL3 --- src/contrib/SDL-3.2.20/test/loopwave.c | 137 +++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 src/contrib/SDL-3.2.20/test/loopwave.c (limited to 'src/contrib/SDL-3.2.20/test/loopwave.c') diff --git a/src/contrib/SDL-3.2.20/test/loopwave.c b/src/contrib/SDL-3.2.20/test/loopwave.c new file mode 100644 index 0000000..8a2d7a0 --- /dev/null +++ b/src/contrib/SDL-3.2.20/test/loopwave.c @@ -0,0 +1,137 @@ +/* + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Program to load a wave file and loop playing it using SDL audio */ + +/* loopwaves.c is much more robust in handling WAVE files -- + This is only for simple WAVEs +*/ +#include + +#define SDL_MAIN_USE_CALLBACKS 1 +#include +#include +#include +#include "testutils.h" + +static struct +{ + SDL_AudioSpec spec; + Uint8 *sound; /* Pointer to wave data */ + Uint32 soundlen; /* Length of wave data */ +} wave; + +static SDL_AudioStream *stream; +static SDLTest_CommonState *state; + +static int fillerup(void) +{ + const int minimum = (wave.soundlen / SDL_AUDIO_FRAMESIZE(wave.spec)) / 2; + if (SDL_GetAudioStreamQueued(stream) < minimum) { + SDL_PutAudioStreamData(stream, wave.sound, wave.soundlen); + } + return SDL_APP_CONTINUE; +} + +SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) +{ + int i; + char *filename = NULL; + + /* this doesn't have to run very much, so give up tons of CPU time between iterations. */ + SDL_SetHint(SDL_HINT_MAIN_CALLBACK_RATE, "5"); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, 0); + if (!state) { + return SDL_APP_SUCCESS; + } + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (!consumed) { + if (!filename) { + filename = argv[i]; + consumed = 1; + } + } + if (consumed <= 0) { + static const char *options[] = { "[sample.wav]", NULL }; + SDLTest_CommonLogUsage(state, argv[0], options); + exit(1); + } + + i += consumed; + } + + /* Load the SDL library */ + if (!SDL_Init(SDL_INIT_AUDIO | SDL_INIT_EVENTS)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError()); + return SDL_APP_FAILURE; + } + + filename = GetResourceFilename(filename, "sample.wav"); + + if (!filename) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s", SDL_GetError()); + return SDL_APP_FAILURE; + } + + /* Load the wave file into memory */ + if (!SDL_LoadWAV(filename, &wave.spec, &wave.sound, &wave.soundlen)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", filename, SDL_GetError()); + SDL_free(filename); + return SDL_APP_FAILURE; + } + + SDL_free(filename); + + /* Show the list of available drivers */ + SDL_Log("Available audio drivers:"); + for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + SDL_Log("%i: %s", i, SDL_GetAudioDriver(i)); + } + + SDL_Log("Using audio driver: %s", SDL_GetCurrentAudioDriver()); + + stream = SDL_OpenAudioDeviceStream(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &wave.spec, NULL, NULL); + if (!stream) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create audio stream: %s", SDL_GetError()); + return SDL_APP_FAILURE; + } + + SDL_ResumeAudioStreamDevice(stream); + + return SDL_APP_CONTINUE; +} + +SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) +{ + return (event->type == SDL_EVENT_QUIT) ? SDL_APP_SUCCESS : SDL_APP_CONTINUE; +} + +SDL_AppResult SDL_AppIterate(void *appstate) +{ + return fillerup(); +} + +void SDL_AppQuit(void *appstate, SDL_AppResult result) +{ + SDL_DestroyAudioStream(stream); + SDL_free(wave.sound); + SDL_Quit(); + SDLTest_CommonDestroyState(state); +} + -- cgit v1.2.3