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

◆ loop()

static void loop ( void  )
static

Definition at line 27 of file testaudiocapture.c.

28{
29 SDL_bool please_quit = SDL_FALSE;
31
32 while (SDL_PollEvent(&e)) {
33 if (e.type == SDL_QUIT) {
34 please_quit = SDL_TRUE;
35 } else if (e.type == SDL_KEYDOWN) {
36 if (e.key.keysym.sym == SDLK_ESCAPE) {
37 please_quit = SDL_TRUE;
38 }
39 } else if (e.type == SDL_MOUSEBUTTONDOWN) {
40 if (e.button.button == 1) {
43 }
44 } else if (e.type == SDL_MOUSEBUTTONUP) {
45 if (e.button.button == 1) {
48 }
49 }
50 }
51
53 SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
54 } else {
55 SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
56 }
59
60 if (please_quit) {
61 /* stop playing back, quit. */
62 SDL_Log("Shutting down.\n");
69 SDL_Quit();
70 #ifdef __EMSCRIPTEN__
71 emscripten_cancel_main_loop();
72 #endif
73 exit(0);
74 }
75
76 /* Note that it would be easier to just have a one-line function that
77 calls SDL_QueueAudio() as a capture device callback, but we're
78 trying to test the API, so we use SDL_DequeueAudio() here. */
79 while (SDL_TRUE) {
80 Uint8 buf[1024];
81 const Uint32 br = SDL_DequeueAudio(devid_in, buf, sizeof (buf));
83 if (br < sizeof (buf)) {
84 break;
85 }
86 }
87}
@ SDL_AUDIO_PLAYING
Definition: SDL_audio.h:398
#define SDL_RenderPresent
#define SDL_DestroyWindow
#define SDL_PollEvent
#define SDL_DestroyRenderer
#define SDL_DequeueAudio
#define SDL_SetRenderDrawColor
#define SDL_RenderClear
#define SDL_QueueAudio
#define SDL_PauseAudioDevice
#define SDL_GetAudioDeviceStatus
#define SDL_Quit
#define SDL_CloseAudioDevice
#define SDL_Log
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
@ SDL_QUIT
Definition: SDL_events.h:60
@ SDL_MOUSEBUTTONUP
Definition: SDL_events.h:107
@ SDL_MOUSEBUTTONDOWN
Definition: SDL_events.h:106
@ SDL_KEYDOWN
Definition: SDL_events.h:96
@ SDLK_ESCAPE
Definition: SDL_keycode.h:55
GLenum GLuint GLenum GLsizei const GLchar * buf
SDL_bool
Definition: SDL_stdinc.h:162
@ SDL_TRUE
Definition: SDL_stdinc.h:164
@ SDL_FALSE
Definition: SDL_stdinc.h:163
uint32_t Uint32
Definition: SDL_stdinc.h:203
uint8_t Uint8
Definition: SDL_stdinc.h:179
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025
static SDL_AudioDeviceID devid_in
static SDL_AudioDeviceID devid_out
static SDL_Renderer * renderer
General event structure.
Definition: SDL_events.h:558

References devid_in, devid_out, e, renderer, 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, and SDLK_ESCAPE.

Referenced by main().

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 90 of file testaudiocapture.c.

91{
92 /* (argv[1] == NULL means "open default device.") */
93 const char *devname = argv[1];
94 SDL_AudioSpec wanted;
95 int devcount;
96 int i;
97
98 /* Enable standard application logging */
100
101 /* Load the SDL library */
103 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
104 return (1);
105 }
106
107 window = SDL_CreateWindow("testaudiocapture", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 320, 240, 0);
109 SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
112
113 SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver());
114
116 for (i = 0; i < devcount; i++) {
117 SDL_Log(" Capture device #%d: '%s'\n", i, SDL_GetAudioDeviceName(i, SDL_TRUE));
118 }
119
120 SDL_zero(wanted);
121 wanted.freq = 44100;
122 wanted.format = AUDIO_F32SYS;
123 wanted.channels = 1;
124 wanted.samples = 4096;
125 wanted.callback = NULL;
126
127 SDL_zero(spec);
128
129 /* DirectSound can fail in some instances if you open the same hardware
130 for both capture and output and didn't open the output end first,
131 according to the docs, so if you're doing something like this, always
132 open your capture devices second in case you land in those bizarre
133 circumstances. */
134
135 SDL_Log("Opening default playback device...\n");
137 if (!devid_out) {
138 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open an audio device for playback: %s!\n", SDL_GetError());
139 SDL_Quit();
140 exit(1);
141 }
142
143 SDL_Log("Opening capture device %s%s%s...\n",
144 devname ? "'" : "",
145 devname ? devname : "[[default]]",
146 devname ? "'" : "");
147
148 devid_in = SDL_OpenAudioDevice(argv[1], SDL_TRUE, &spec, &spec, 0);
149 if (!devid_in) {
150 SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open an audio device for capture: %s!\n", SDL_GetError());
151 SDL_Quit();
152 exit(1);
153 }
154
155 SDL_Log("Ready! Hold down mouse or finger to record!\n");
156
157#ifdef __EMSCRIPTEN__
158 emscripten_set_main_loop(loop, 0, 1);
159#else
160 while (1) { loop(); SDL_Delay(16); }
161#endif
162
163 return 0;
164}
#define SDL_INIT_AUDIO
Definition: SDL.h:78
#define SDL_INIT_VIDEO
Definition: SDL.h:79
#define SDL_AUDIO_ALLOW_ANY_CHANGE
Definition: SDL_audio.h:144
#define AUDIO_F32SYS
Definition: SDL_audio.h:125
#define SDL_GetError
#define SDL_CreateWindow
#define SDL_GetAudioDeviceName
#define SDL_CreateRenderer
#define SDL_GetCurrentAudioDriver
#define SDL_LogSetPriority
#define SDL_OpenAudioDevice
#define SDL_LogError
#define SDL_Delay
#define SDL_Init
#define SDL_GetNumAudioDevices
@ SDL_LOG_PRIORITY_INFO
Definition: SDL_log.h:106
@ SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66
#define SDL_zero(x)
Definition: SDL_stdinc.h:416
#define SDL_WINDOWPOS_CENTERED
Definition: SDL_video.h:139
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:50
#define NULL
Definition: begin_code.h:167
SDL_AudioCallback callback
Definition: SDL_audio.h:187
Uint16 samples
Definition: SDL_audio.h:184
Uint8 channels
Definition: SDL_audio.h:182
SDL_AudioFormat format
Definition: SDL_audio.h:181
static void loop()
static SDL_AudioSpec spec

References AUDIO_F32SYS, SDL_AudioSpec::callback, SDL_AudioSpec::channels, devid_in, devid_out, SDL_AudioSpec::format, SDL_AudioSpec::freq, i, loop(), NULL, renderer, 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, SDL_zero, and spec.

Variable Documentation

◆ devid_in

SDL_AudioDeviceID devid_in = 0
static

Definition at line 23 of file testaudiocapture.c.

Referenced by loop(), and main().

◆ devid_out

SDL_AudioDeviceID devid_out = 0
static

Definition at line 24 of file testaudiocapture.c.

Referenced by loop(), and main().

◆ renderer

SDL_Renderer* renderer = NULL
static

Definition at line 21 of file testaudiocapture.c.

Referenced by _Redraw(), AllocateRenderCommand(), AllocateVertexGap(), DrawLines(), DrawOnViewport(), DrawPoints(), DrawRectLineIntersections(), DrawRectRectIntersections(), DrawRects(), FlushRenderCommands(), FlushRenderCommandsIfNotBatching(), FlushRenderCommandsIfTextureNeeded(), GetClosestSupportedFormat(), GetWindowViewportValues(), IsSupportedBlendMode(), IsSupportedFormat(), LoadSprite(), LoadTexture(), loop(), main(), MoveSprites(), PrepQueueCmdDraw(), PrepQueueCmdDrawSolid(), PrepQueueCmdDrawTexture(), QueueCmdClear(), QueueCmdCopy(), QueueCmdCopyEx(), QueueCmdDrawLines(), QueueCmdDrawPoints(), QueueCmdFillRects(), QueueCmdSetClipRect(), QueueCmdSetDrawColor(), QueueCmdSetViewport(), Redraw(), render(), RenderDrawLinesWithRects(), RenderDrawLinesWithRectsF(), RenderDrawPointsWithRects(), RenderDrawPointsWithRectsF(), SDL_AllocateRenderVertices(), SDL_CreateRenderer(), SDL_CreateSoftwareRenderer(), SDL_CreateTexture(), SDL_CreateTextureFromSurface(), SDL_CreateWindowAndRenderer(), SDL_CreateWindowTexture(), SDL_DestroyRenderer(), SDL_DestroyTexture(), SDL_GetRenderDrawBlendMode(), SDL_GetRenderDrawColor(), SDL_GetRendererInfo(), SDL_GetRendererOutputSize(), SDL_GetRenderTarget(), SDL_GL_BindTexture(), SDL_GL_UnbindTexture(), SDL_LockTexture(), SDL_RenderClear(), SDL_RenderCopy(), SDL_RenderCopyEx(), SDL_RenderCopyExF(), SDL_RenderCopyF(), SDL_RenderDrawLine(), SDL_RenderDrawLineF(), SDL_RenderDrawLines(), SDL_RenderDrawLinesF(), SDL_RenderDrawPoint(), SDL_RenderDrawPointF(), SDL_RenderDrawPoints(), SDL_RenderDrawPointsF(), SDL_RenderDrawRect(), SDL_RenderDrawRectF(), SDL_RenderDrawRects(), SDL_RenderDrawRectsF(), SDL_RendererEventWatch(), SDL_RenderFillRect(), SDL_RenderFillRectF(), SDL_RenderFillRects(), SDL_RenderFillRectsF(), SDL_RenderFlush(), SDL_RenderGetClipRect(), SDL_RenderGetIntegerScale(), SDL_RenderGetLogicalSize(), SDL_RenderGetMetalCommandEncoder(), SDL_RenderGetMetalLayer(), SDL_RenderGetScale(), SDL_RenderGetViewport(), SDL_RenderIsClipEnabled(), SDL_RenderPresent(), SDL_RenderReadPixels(), SDL_RenderSetClipRect(), SDL_RenderSetIntegerScale(), SDL_RenderSetLogicalSize(), SDL_RenderSetScale(), SDL_RenderSetViewport(), SDL_RenderTargetSupported(), SDL_SetRenderDrawBlendMode(), SDL_SetRenderDrawColor(), SDL_SetRenderTarget(), SDL_SetTextureBlendMode(), SDL_UnlockTexture(), SDL_UpdateTexture(), SDL_UpdateYUVTexture(), SDLTest_DrawCharacter(), SDLTest_DrawString(), SDLTest_ScreenShot(), SW_ActivateRenderer(), SW_CreateRendererForSurface(), SW_DestroyRenderer(), SW_GetOutputSize(), SW_QueueCopy(), SW_QueueCopyEx(), SW_QueueDrawPoints(), SW_QueueFillRects(), SW_RenderPresent(), SW_RenderReadPixels(), SW_RunCommandQueue(), SW_SetRenderTarget(), SW_WindowEvent(), unifont_cleanup(), unifont_load_texture(), UpdateLogicalSize(), and VerifyDrawQueueFunctions().

◆ spec

SDL_AudioSpec spec
static

Definition at line 22 of file testaudiocapture.c.

Referenced by main().

◆ window

SDL_Window* window = NULL
static

Definition at line 20 of file testaudiocapture.c.