SDL  2.0
testaudiohotplug.c File Reference
#include "SDL_config.h"
#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
+ Include dependency graph for testaudiohotplug.c:

Go to the source code of this file.

Functions

static void quit (int rc)
void fillerup (void *_pos, Uint8 *stream, int len)
void poked (int sig)
static const char * devtypestr (int iscapture)
static void iteration ()
int main (int argc, char *argv[])

Variables

static SDL_AudioSpec spec
static Uint8sound = NULL
static Uint32 soundlen = 0
static int posindex = 0
static Uint32 positions [64]
static int done = 0

Function Documentation

static const char* devtypestr ( int  iscapture)
static

Definition at line 78 of file testaudiohotplug.c.

Referenced by iteration().

{
return iscapture ? "capture" : "output";
}
void fillerup ( void _pos,
Uint8 stream,
int  len 
)

Definition at line 46 of file testaudiohotplug.c.

References SDL_memcpy, sound, and soundlen.

{
Uint32 pos = *((Uint32 *) _pos);
Uint8 *waveptr;
int waveleft;
/* Set up the pointers */
waveptr = sound + pos;
waveleft = soundlen - pos;
/* Go! */
while (waveleft <= len) {
SDL_memcpy(stream, waveptr, waveleft);
stream += waveleft;
len -= waveleft;
waveptr = sound;
waveleft = soundlen;
pos = 0;
}
SDL_memcpy(stream, waveptr, len);
pos += len;
*((Uint32 *) _pos) = pos;
}
static void iteration ( )
static

Definition at line 84 of file testaudiohotplug.c.

References SDL_Event::adevice, SDL_AudioSpec::callback, devtypestr(), done, e, fillerup(), SDL_AudioDeviceEvent::iscapture, SDL_Event::key, SDL_KeyboardEvent::keysym, NULL, posindex, positions, SDL_AUDIODEVICEADDED, SDL_AUDIODEVICEREMOVED, SDL_CloseAudioDevice, SDL_GetAudioDeviceName, SDL_GetError, SDL_KEYUP, SDL_Log, SDL_LOG_CATEGORY_APPLICATION, SDL_LogError, SDL_OpenAudioDevice, SDL_PauseAudioDevice, SDL_PollEvent, SDL_QUIT, SDLK_ESCAPE, SDL_Keysym::sym, SDL_Event::type, SDL_AudioSpec::userdata, and SDL_AudioDeviceEvent::which.

Referenced by main(), and video_getSetWindowData().

{
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) {
done = 1;
} else if (e.type == SDL_KEYUP) {
done = 1;
} else if (e.type == SDL_AUDIODEVICEADDED) {
int index = e.adevice.which;
int iscapture = e.adevice.iscapture;
const char *name = SDL_GetAudioDeviceName(index, iscapture);
if (name != NULL)
SDL_Log("New %s audio device at index %u: %s\n", devtypestr(iscapture), (unsigned int) index, name);
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Got new %s device at index %u, but failed to get the name: %s\n",
devtypestr(iscapture), (unsigned int) index, SDL_GetError());
continue;
}
if (!iscapture) {
dev = SDL_OpenAudioDevice(name, 0, &spec, NULL, 0);
if (!dev) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open '%s': %s\n", name, SDL_GetError());
} else {
SDL_Log("Opened '%s' as %u\n", name, (unsigned int) dev);
}
}
} else if (e.type == SDL_AUDIODEVICEREMOVED) {
SDL_Log("%s device %u removed.\n", devtypestr(e.adevice.iscapture), (unsigned int) dev);
}
}
}
int main ( int  argc,
char *  argv[] 
)

Definition at line 137 of file testaudiohotplug.c.

References done, sort_controllers::filename, i, iteration(), loop(), NULL, poked(), quit(), SDL_CreateWindow, SDL_Delay, SDL_FreeWAV, SDL_GetAudioDriver, SDL_GetCurrentAudioDriver, SDL_GetError, SDL_GetNumAudioDrivers, SDL_Init, SDL_INIT_AUDIO, SDL_INIT_VIDEO, SDL_LoadWAV, SDL_Log, SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, SDL_LogError, SDL_LogSetPriority, SDL_MinimizeWindow, SDL_Quit, SDL_QuitSubSystem, SDL_strlcpy, SDL_WINDOWPOS_UNDEFINED, sound, and soundlen.

{
int i;
char filename[4096];
/* Enable standard application logging */
/* Load the SDL library */
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
return (1);
}
/* Some targets (Mac CoreAudio) need an event queue for audio hotplug, so make and immediately hide a window. */
if (argc > 1) {
SDL_strlcpy(filename, argv[1], sizeof(filename));
} else {
SDL_strlcpy(filename, "sample.wav", sizeof(filename));
}
/* Load the wave file into memory */
if (SDL_LoadWAV(filename, &spec, &sound, &soundlen) == NULL) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, SDL_GetError());
quit(1);
}
#if HAVE_SIGNAL_H
/* Set the signals */
#ifdef SIGHUP
signal(SIGHUP, poked);
#endif
signal(SIGINT, poked);
#ifdef SIGQUIT
signal(SIGQUIT, poked);
#endif
signal(SIGTERM, poked);
#endif /* HAVE_SIGNAL_H */
/* 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("Select a driver with the SDL_AUDIODRIVER environment variable.\n");
SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver());
#ifdef __EMSCRIPTEN__
emscripten_set_main_loop(loop, 0, 1);
#else
while (!done) {
SDL_Delay(100);
}
#endif
/* Clean up on signal */
/* Quit audio first, then free WAV. This prevents access violations in the audio threads. */
return (0);
}
void poked ( int  sig)

Definition at line 72 of file testaudiohotplug.c.

References done.

{
done = 1;
}
static void quit ( int  rc)
static

Definition at line 39 of file testaudiohotplug.c.

References SDL_Quit.

{
exit(rc);
}

Variable Documentation

int done = 0
static

Definition at line 70 of file testaudiohotplug.c.

int posindex = 0
static

Definition at line 34 of file testaudiohotplug.c.

Referenced by iteration().

Uint32 positions[64]
static

Definition at line 35 of file testaudiohotplug.c.

Referenced by iteration().

Uint8* sound = NULL
static

Definition at line 31 of file testaudiohotplug.c.

Uint32 soundlen = 0
static

Definition at line 32 of file testaudiohotplug.c.

SDL_AudioSpec spec
static

Definition at line 30 of file testaudiohotplug.c.