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

Go to the source code of this file.

Functions

static void loop ()
int main (int argc, char **argv)

Variables

static SDL_Windowwindow = NULL
static SDL_Rendererrenderer = NULL
static SDL_AudioSpec spec
static SDL_AudioDeviceID devid_in = 0
static SDL_AudioDeviceID devid_out = 0

Function Documentation

static void loop ( )
static

Definition at line 27 of file testaudiocapture.c.

References SDL_MouseButtonEvent::button, SDL_Event::button, devid_in, devid_out, e, SDL_Event::key, SDL_KeyboardEvent::keysym, SDL_AUDIO_PLAYING, SDL_CloseAudioDevice, SDL_DequeueAudio, SDL_DestroyRenderer, SDL_DestroyWindow, SDL_FALSE, SDL_GetAudioDeviceStatus, SDL_KEYDOWN, SDL_Log, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP, SDL_PauseAudioDevice, SDL_PollEvent, SDL_QueueAudio, SDL_Quit, SDL_QUIT, SDL_RenderClear, SDL_RenderPresent, SDL_SetRenderDrawColor, SDL_TRUE, SDLK_ESCAPE, SDL_Keysym::sym, and SDL_Event::type.

{
SDL_bool please_quit = SDL_FALSE;
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) {
please_quit = SDL_TRUE;
} else if (e.type == SDL_KEYDOWN) {
if (e.key.keysym.sym == SDLK_ESCAPE) {
please_quit = SDL_TRUE;
}
} else if (e.type == SDL_MOUSEBUTTONDOWN) {
if (e.button.button == 1) {
}
} else if (e.type == SDL_MOUSEBUTTONUP) {
if (e.button.button == 1) {
}
}
}
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
} else {
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
}
if (please_quit) {
/* stop playing back, quit. */
SDL_Log("Shutting down.\n");
#ifdef __EMSCRIPTEN__
emscripten_cancel_main_loop();
#endif
exit(0);
}
/* Note that it would be easier to just have a one-line function that
calls SDL_QueueAudio() as a capture device callback, but we're
trying to test the API, so we use SDL_DequeueAudio() here. */
while (SDL_TRUE) {
Uint8 buf[1024];
const Uint32 br = SDL_DequeueAudio(devid_in, buf, sizeof (buf));
if (br < sizeof (buf)) {
break;
}
}
}
int main ( int  argc,
char **  argv 
)

Definition at line 90 of file testaudiocapture.c.

References AUDIO_F32SYS, SDL_AudioSpec::callback, SDL_AudioSpec::channels, devid_in, devid_out, SDL_AudioSpec::format, SDL_AudioSpec::freq, i, loop(), NULL, SDL_AudioSpec::samples, SDL_AUDIO_ALLOW_ANY_CHANGE, SDL_CreateRenderer, SDL_CreateWindow, SDL_Delay, SDL_FALSE, SDL_GetAudioDeviceName, SDL_GetCurrentAudioDriver, SDL_GetError, SDL_GetNumAudioDevices, SDL_Init, SDL_INIT_AUDIO, SDL_INIT_VIDEO, SDL_Log, SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, SDL_LogError, SDL_LogSetPriority, SDL_OpenAudioDevice, SDL_Quit, SDL_RenderClear, SDL_RenderPresent, SDL_SetRenderDrawColor, SDL_TRUE, SDL_WINDOWPOS_CENTERED, and SDL_zero.

{
/* (argv[1] == NULL means "open default device.") */
const char *devname = argv[1];
SDL_AudioSpec wanted;
int devcount;
int i;
/* Enable standard application logging */
/* Load the SDL library */
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
return (1);
}
SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver());
for (i = 0; i < devcount; i++) {
SDL_Log(" Capture device #%d: '%s'\n", i, SDL_GetAudioDeviceName(i, SDL_TRUE));
}
SDL_zero(wanted);
wanted.freq = 44100;
wanted.format = AUDIO_F32SYS;
wanted.channels = 1;
wanted.samples = 4096;
wanted.callback = NULL;
/* DirectSound can fail in some instances if you open the same hardware
for both capture and output and didn't open the output end first,
according to the docs, so if you're doing something like this, always
open your capture devices second in case you land in those bizarre
circumstances. */
SDL_Log("Opening default playback device...\n");
if (!devid_out) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open an audio device for playback: %s!\n", SDL_GetError());
exit(1);
}
SDL_Log("Opening capture device %s%s%s...\n",
devname ? "'" : "",
devname ? devname : "[[default]]",
devname ? "'" : "");
if (!devid_in) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open an audio device for capture: %s!\n", SDL_GetError());
exit(1);
}
SDL_Log("Ready! Hold down mouse or finger to record!\n");
#ifdef __EMSCRIPTEN__
emscripten_set_main_loop(loop, 0, 1);
#else
while (1) { loop(); SDL_Delay(16); }
#endif
return 0;
}

Variable Documentation

SDL_AudioDeviceID devid_in = 0
static

Definition at line 23 of file testaudiocapture.c.

Referenced by loop(), and main().

SDL_AudioDeviceID devid_out = 0
static

Definition at line 24 of file testaudiocapture.c.

Referenced by loop(), and main().

SDL_AudioSpec spec
static

Definition at line 22 of file testaudiocapture.c.

SDL_Window* window = NULL
static

Definition at line 20 of file testaudiocapture.c.