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 void | iteration ()
int | main (int argc, char *argv[])

## Variables

static SDL_AudioSpec | spec
static Uint8 * | sound = NULL
static Uint32 | soundlen = 0
static int | posindex = 0
static Uint32 | positions [64]
static int | done = 0

## Function Documentation

void fillerup | ( | void * | _pos,
|  | Uint8 * | stream,
|  | int | len
| ) |  |

Definition at line 46 of file testaudiohotplug.c.

References SDL_memcpy, sound, and soundlen.

Referenced by iteration().

{
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;
}
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:157
stream
GLuint GLuint stream
Definition: SDL_opengl_glext.h:1776
len
GLenum GLsizei len
Definition: SDL_opengl_glext.h:2926
sound
static Uint8 * sound
Definition: testaudiohotplug.c:31
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:393
Uint8
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
soundlen
static Uint32 soundlen
Definition: testaudiohotplug.c:32

static void iteration | ( |  | ) |

static

Definition at line 78 of file testaudiohotplug.c.

References SDL_Event::adevice, SDL_AudioSpec::callback, done, e, fillerup(), SDL_AudioDeviceEvent::iscapture, loop(), NULL, posindex, positions, SDL_AUDIODEVICEADDED, SDL_AUDIODEVICEREMOVED, SDL_CloseAudioDevice, SDL_GetAudioDeviceName, SDL_GetError, SDL_Log, SDL_LOG_CATEGORY_APPLICATION, SDL_LogError, SDL_OpenAudioDevice, SDL_PauseAudioDevice, SDL_PollEvent, SDL_QUIT, SDL_Event::type, SDL_AudioSpec::userdata, and SDL_AudioDeviceEvent::which.

Referenced by main(), and video_getSetWindowData().

{
SDL_Event e;
SDL_AudioDeviceID dev;
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) {
done = 1;
} else if (e.type == SDL_AUDIODEVICEADDED) {
const char *name = SDL_GetAudioDeviceName(e.adevice.which, 0);
SDL_Log("New %s audio device: %s\n", e.adevice.iscapture ? "capture" : "output", name);
if (!e.adevice.iscapture) {
positions[posindex] = 0;
spec.userdata = &positions[posindex++];
spec.callback = fillerup;
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);
SDL_PauseAudioDevice(dev, 0);
}
}
} else if (e.type == SDL_AUDIODEVICEREMOVED) {
dev = (SDL_AudioDeviceID) e.adevice.which;
SDL_Log("%s device %u removed.\n", e.adevice.iscapture ? "capture" : "output", (unsigned int) dev);
SDL_CloseAudioDevice(dev);
}
}
}
SDL_PollEvent
#define SDL_PollEvent
Definition: SDL_dynapi_overrides.h:128
SDL_GetError
#define SDL_GetError
Definition: SDL_dynapi_overrides.h:119
SDL_CloseAudioDevice
#define SDL_CloseAudioDevice
Definition: SDL_dynapi_overrides.h:103
SDL_OpenAudioDevice
#define SDL_OpenAudioDevice
Definition: SDL_dynapi_overrides.h:87
spec
static SDL_AudioSpec spec
Definition: testaudiohotplug.c:30
e
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 SDL_AssertionHandler void SDL_SpinLock SDL_atomic_t int int return SDL_atomic_t return void void void return void return int return SDL_AudioSpec SDL_AudioSpec return int int return return int SDL_RWops int SDL_AudioSpec Uint8 Uint32 * e
Definition: SDL_dynapi_procs.h:121
SDL_QUIT
Definition: SDL_events.h:60
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_LogError
#define SDL_LogError
Definition: SDL_dynapi_overrides.h:42
SDL_GetAudioDeviceName
#define SDL_GetAudioDeviceName
Definition: SDL_dynapi_overrides.h:86
SDL_AUDIODEVICEREMOVED
Definition: SDL_events.h:142
SDL_Log
#define SDL_Log
Definition: SDL_dynapi_overrides.h:37
posindex
static int posindex
Definition: testaudiohotplug.c:34
SDL_AUDIODEVICEADDED
Definition: SDL_events.h:141
positions
static Uint32 positions[64]
Definition: testaudiohotplug.c:35
SDL_AudioSpec::callback
SDL_AudioCallback callback
Definition: SDL_audio.h:177
NULL
#define NULL
Definition: begin_code.h:143
SDL_Event::adevice
SDL_AudioDeviceEvent adevice
Definition: SDL_events.h:540
SDL_AudioDeviceID
Uint32 SDL_AudioDeviceID
Definition: SDL_audio.h:303
fillerup
void fillerup(void *_pos, Uint8 *stream, int len)
Definition: testaudiohotplug.c:46
SDL_AudioSpec::userdata
void * userdata
Definition: SDL_audio.h:178
SDL_Event
General event structure.
Definition: SDL_events.h:521
SDL_AudioDeviceEvent::which
Uint32 which
Definition: SDL_events.h:399
done
static int done
Definition: testaudiohotplug.c:70
SDL_AudioDeviceEvent::iscapture
Uint8 iscapture
Definition: SDL_events.h:400
SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66
SDL_Event::type
Uint32 type
Definition: SDL_events.h:523
SDL_PauseAudioDevice
#define SDL_PauseAudioDevice
Definition: SDL_dynapi_overrides.h:91

int main | ( | int | argc,
|  | char * | argv[]
| ) |  |

Definition at line 120 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_strlcpy, SDL_WINDOWPOS_UNDEFINED, sound, and soundlen.

{
int i;
char filename[4096];
/* Enable standard application logging */
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
/* Load the SDL library */
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) {
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. */
SDL_MinimizeWindow(SDL_CreateWindow("testaudiohotplug", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0));
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("Using audio driver: %s\n", SDL_GetCurrentAudioDriver());
#ifdef __EMSCRIPTEN__
emscripten_set_main_loop(loop, 0, 1);
#else
while (!done) {
SDL_Delay(100);
iteration();
}
#endif
/* Clean up on signal */
SDL_FreeWAV(sound);
SDL_Quit();
return (0);
}
SDL_GetNumAudioDrivers
#define SDL_GetNumAudioDrivers
Definition: SDL_dynapi_overrides.h:79
SDL_strlcpy
#define SDL_strlcpy
Definition: SDL_dynapi_overrides.h:400
loop
void loop()
Definition: checkkeys.c:152
SDL_GetError
#define SDL_GetError
Definition: SDL_dynapi_overrides.h:119
spec
static SDL_AudioSpec spec
Definition: testaudiohotplug.c:30
poked
void poked(int sig)
Definition: testaudiohotplug.c:72
SDL_FreeWAV
#define SDL_FreeWAV
Definition: SDL_dynapi_overrides.h:93
SDL_CreateWindow
#define SDL_CreateWindow
Definition: SDL_dynapi_overrides.h:518
SDL_WINDOWPOS_UNDEFINED
#define SDL_WINDOWPOS_UNDEFINED
Definition: SDL_video.h:120
SDL_MinimizeWindow
#define SDL_MinimizeWindow
Definition: SDL_dynapi_overrides.h:541
quit
static void quit(int rc)
Definition: testaudiohotplug.c:39
iteration
static void iteration()
Definition: testaudiohotplug.c:78
SDL_LogError
#define SDL_LogError
Definition: SDL_dynapi_overrides.h:42
sound
static Uint8 * sound
Definition: testaudiohotplug.c:31
SDL_Log
#define SDL_Log
Definition: SDL_dynapi_overrides.h:37
sort_controllers.filename
string filename
Definition: sort_controllers.py:8
SDL_Quit
#define SDL_Quit
Definition: SDL_dynapi_overrides.h:64
SDL_LoadWAV
#define SDL_LoadWAV(file, spec, audio_buf, audio_len)
Definition: SDL_audio.h:424
SDL_GetAudioDriver
#define SDL_GetAudioDriver
Definition: SDL_dynapi_overrides.h:80
SDL_LOG_PRIORITY_INFO
Definition: SDL_log.h:106
soundlen
static Uint32 soundlen
Definition: testaudiohotplug.c:32
SDL_Delay
#define SDL_Delay
Definition: SDL_dynapi_overrides.h:490
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
SDL_LogSetPriority
#define SDL_LogSetPriority
Definition: SDL_dynapi_overrides.h:242
SDL_GetCurrentAudioDriver
#define SDL_GetCurrentAudioDriver
Definition: SDL_dynapi_overrides.h:83
NULL
#define NULL
Definition: begin_code.h:143
SDL_INIT_AUDIO
#define SDL_INIT_AUDIO
Definition: SDL.h:76
SDL_Init
#define SDL_Init
Definition: SDL_dynapi_overrides.h:60
done
static int done
Definition: testaudiohotplug.c:70
SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66
SDL_INIT_VIDEO
#define SDL_INIT_VIDEO
Definition: SDL.h:77

void poked | ( | int | sig | ) |

Definition at line 72 of file testaudiohotplug.c.

References done.

Referenced by main().

{
done = 1;
}
done
static int done
Definition: testaudiohotplug.c:70

static void quit | ( | int | rc | ) |

static

Definition at line 39 of file testaudiohotplug.c.

References SDL_Quit, and SDLCALL.

Referenced by main().

{
SDL_Quit();
exit(rc);
}
SDL_Quit
#define SDL_Quit
Definition: SDL_dynapi_overrides.h:64

## Variable Documentation

int done = 0

static

Definition at line 70 of file testaudiohotplug.c.

Referenced by iteration(), main(), and poked().

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.

Referenced by fillerup(), and main().

Uint32 soundlen = 0

static

Definition at line 32 of file testaudiohotplug.c.

Referenced by fillerup(), and main().

SDL_AudioSpec spec

static

Definition at line 30 of file testaudiohotplug.c.