porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c
Go to the documentation of this file.
1 /*
2 USAGE: ma_test_deviceio [input/output file] [mode] [backend] [waveform] [noise]
3 
4 In playback mode the input file is optional, in which case a waveform or noise source will be used instead. For capture and loopback modes
5 it must specify an output parameter, and must be specified. In duplex mode it is optional, but if specified will be an output file that
6 will receive the captured audio.
7 
8 "mode" can be one of the following:
9  playback
10  capture
11  duplex
12  loopback
13 
14 "backend" is one of the miniaudio backends:
15  wasapi
16  dsound
17  winmm
18  coreaudio
19  sndio
20  audio4
21  oss
22  pulseaudio
23  alsa
24  jack
25  aaudio
26  opensl
27  webaudio
28  null
29 
30 "waveform" can be one of the following:
31  sine
32  square
33  triangle
34  sawtooth
35 
36 "noise" can be one of the following:
37  white
38  pink
39  brownian or brown
40 
41 If multiple backends are specified, the priority will be based on the order in which you specify them. If multiple waveform or noise types
42 are specified the last one on the command line will have priority.
43 */
44 
45 #include "../test_common/ma_test_common.c"
46 
47 typedef enum
48 {
52 } source_type;
53 
54 static struct
55 {
63  ma_bool32 hasEncoder; /* Used for duplex mode to determine whether or not audio data should be written to a file. */
64 } g_State;
65 
66 const char* get_mode_description(ma_device_type deviceType)
67 {
68  if (deviceType == ma_device_type_playback) {
69  return "Playback";
70  }
71  if (deviceType == ma_device_type_capture) {
72  return "Capture";
73  }
74  if (deviceType == ma_device_type_duplex) {
75  return "Duplex";
76  }
77  if (deviceType == ma_device_type_loopback) {
78  return "Loopback";
79  }
80 
81  /* Should never get here. */
82  return "Unknown";
83 }
84 
85 ma_bool32 try_parse_mode(const char* arg, ma_device_type* pDeviceType)
86 {
87  MA_ASSERT(arg != NULL);
88  MA_ASSERT(pDeviceType != NULL);
89 
90  if (strcmp(arg, "playback") == 0) {
91  *pDeviceType = ma_device_type_playback;
92  return MA_TRUE;
93  }
94  if (strcmp(arg, "capture") == 0) {
95  *pDeviceType = ma_device_type_capture;
96  return MA_TRUE;
97  }
98  if (strcmp(arg, "duplex") == 0) {
99  *pDeviceType = ma_device_type_duplex;
100  return MA_TRUE;
101  }
102  if (strcmp(arg, "loopback") == 0) {
103  *pDeviceType = ma_device_type_loopback;
104  return MA_TRUE;
105  }
106 
107  return MA_FALSE;
108 }
109 
110 ma_bool32 try_parse_backend(const char* arg, ma_backend* pBackends, ma_uint32 backendCap, ma_uint32* pBackendCount)
111 {
112  ma_uint32 backendCount;
113 
114  MA_ASSERT(arg != NULL);
115  MA_ASSERT(pBackends != NULL);
116  MA_ASSERT(pBackendCount != NULL);
117 
118  backendCount = *pBackendCount;
119  if (backendCount == backendCap) {
120  return MA_FALSE; /* No more room. */
121  }
122 
123  if (strcmp(arg, "wasapi") == 0) {
124  pBackends[backendCount++] = ma_backend_wasapi;
125  goto done;
126  }
127  if (strcmp(arg, "dsound") == 0) {
128  pBackends[backendCount++] = ma_backend_dsound;
129  goto done;
130  }
131  if (strcmp(arg, "winmm") == 0) {
132  pBackends[backendCount++] = ma_backend_winmm;
133  goto done;
134  }
135  if (strcmp(arg, "coreaudio") == 0) {
136  pBackends[backendCount++] = ma_backend_coreaudio;
137  goto done;
138  }
139  if (strcmp(arg, "sndio") == 0) {
140  pBackends[backendCount++] = ma_backend_sndio;
141  goto done;
142  }
143  if (strcmp(arg, "audio4") == 0) {
144  pBackends[backendCount++] = ma_backend_audio4;
145  goto done;
146  }
147  if (strcmp(arg, "oss") == 0) {
148  pBackends[backendCount++] = ma_backend_oss;
149  goto done;
150  }
151  if (strcmp(arg, "pulseaudio") == 0) {
152  pBackends[backendCount++] = ma_backend_pulseaudio;
153  goto done;
154  }
155  if (strcmp(arg, "alsa") == 0) {
156  pBackends[backendCount++] = ma_backend_alsa;
157  goto done;
158  }
159  if (strcmp(arg, "jack") == 0) {
160  pBackends[backendCount++] = ma_backend_jack;
161  goto done;
162  }
163  if (strcmp(arg, "aaudio") == 0) {
164  pBackends[backendCount++] = ma_backend_aaudio;
165  goto done;
166  }
167  if (strcmp(arg, "opensl") == 0) {
168  pBackends[backendCount++] = ma_backend_opensl;
169  goto done;
170  }
171  if (strcmp(arg, "webaudio") == 0) {
172  pBackends[backendCount++] = ma_backend_webaudio;
173  goto done;
174  }
175  if (strcmp(arg, "null") == 0) {
176  pBackends[backendCount++] = ma_backend_null;
177  goto done;
178  }
179 
180 done:
181  if (*pBackendCount < backendCount) {
182  *pBackendCount = backendCount;
183  return MA_TRUE; /* This argument was a backend. */
184  } else {
185  return MA_FALSE; /* This argument was not a backend. */
186  }
187 }
188 
189 ma_bool32 try_parse_waveform(const char* arg, ma_waveform_type* pWaveformType)
190 {
191  MA_ASSERT(arg != NULL);
192  MA_ASSERT(pWaveformType != NULL);
193 
194  if (strcmp(arg, "sine") == 0) {
195  *pWaveformType = ma_waveform_type_sine;
196  return MA_TRUE;
197  }
198  if (strcmp(arg, "square") == 0) {
199  *pWaveformType = ma_waveform_type_square;
200  return MA_TRUE;
201  }
202  if (strcmp(arg, "triangle") == 0) {
203  *pWaveformType = ma_waveform_type_triangle;
204  return MA_TRUE;
205  }
206  if (strcmp(arg, "sawtooth") == 0) {
207  *pWaveformType = ma_waveform_type_sawtooth;
208  return MA_TRUE;
209  }
210 
211  return MA_FALSE;
212 }
213 
214 ma_bool32 try_parse_noise(const char* arg, ma_noise_type* pNoiseType)
215 {
216  MA_ASSERT(arg != NULL);
217  MA_ASSERT(pNoiseType != NULL);
218 
219  if (strcmp(arg, "white") == 0) {
220  *pNoiseType = ma_noise_type_white;
221  return MA_TRUE;
222  }
223  if (strcmp(arg, "pink") == 0) {
224  *pNoiseType = ma_noise_type_pink;
225  return MA_TRUE;
226  }
227  if (strcmp(arg, "brownian") == 0 || strcmp(arg, "brown") == 0) {
228  *pNoiseType = ma_noise_type_brownian;
229  return MA_TRUE;
230  }
231 
232  return MA_FALSE;
233 }
234 
235 void on_log(ma_context* pContext, ma_device* pDevice, ma_uint32 logLevel, const char* message)
236 {
237  (void)pContext;
238  (void)pDevice;
239 
240  printf("%s: %s\n", ma_log_level_to_string(logLevel), message);
241 }
242 
243 void on_stop(ma_device* pDevice)
244 {
245  (void)pDevice;
246  printf("Stopped\n");
247 }
248 
249 void on_data(ma_device* pDevice, void* pFramesOut, const void* pFramesIn, ma_uint32 frameCount)
250 {
251  switch (pDevice->type)
252  {
254  {
255  /* In the playback case we just read from our input source. */
256  if (g_State.sourceType == source_type_decoder) {
257  ma_decoder_read_pcm_frames(&g_State.decoder, pFramesOut, frameCount);
258  } else if (g_State.sourceType == source_type_waveform) {
259  ma_waveform_read_pcm_frames(&g_State.waveform, pFramesOut, frameCount);
260  } else if (g_State.sourceType == source_type_noise) {
261  ma_noise_read_pcm_frames(&g_State.noise, pFramesOut, frameCount);
262  }
263  } break;
264 
267  {
268  /* In the capture and loopback cases we just output straight to a file. */
269  ma_encoder_write_pcm_frames(&g_State.encoder, pFramesIn, frameCount);
270  } break;
271 
273  {
274  /* The duplex case is easy. We just move from pFramesIn to pFramesOut. */
275  MA_ASSERT(pDevice->playback.format == pDevice->capture.format);
276  MA_ASSERT(pDevice->playback.channels == pDevice->capture.channels);
277  MA_COPY_MEMORY(pFramesOut, pFramesIn, ma_get_bytes_per_frame(pDevice->playback.format, pDevice->playback.channels) * frameCount);
278 
279  /* Also output to the encoder if necessary. */
280  if (g_State.hasEncoder) {
281  ma_encoder_write_pcm_frames(&g_State.encoder, pFramesIn, frameCount);
282  }
283  } break;
284 
285  default:
286  {
287  /* Should never hit this. */
289  } break;
290  }
291 }
292 
293 int main(int argc, char** argv)
294 {
295  int iarg;
296  ma_result result;
297  ma_backend backends[ma_backend_null+1];
298  ma_uint32 backendCount = 0;
299  ma_context_config contextConfig;
301  ma_format deviceFormat = ma_format_unknown;
302  ma_uint32 deviceChannels = 0;
303  ma_uint32 deviceSampleRate = 0;
304  ma_device_config deviceConfig;
307  const char* pFilePath = NULL; /* Input or output file path, depending on the mode. */
308 
309  /* Default to a sine wave if nothing is passed into the command line. */
310  waveformType = ma_waveform_type_sine;
311  g_State.sourceType = source_type_waveform;
312 
313  /* We need to iterate over the command line arguments and gather our settings. */
314  for (iarg = 1; iarg < argc; iarg += 1) {
315  /* mode */
316  if (try_parse_mode(argv[iarg], &deviceType)) {
317  continue;
318  }
319 
320  /* backend */
321  if (try_parse_backend(argv[iarg], backends, ma_countof(backends), &backendCount)) {
322  continue;
323  }
324 
325  /* waveform */
326  if (try_parse_waveform(argv[iarg], &waveformType)) {
327  g_State.sourceType = source_type_waveform;
328  continue;
329  }
330 
331  /* noise */
332  if (try_parse_noise(argv[iarg], &noiseType)) {
333  g_State.sourceType = source_type_noise;
334  continue;
335  }
336 
337  /* Getting here means the argument should be considered the input or output file. */
338  pFilePath = argv[iarg];
339  g_State.sourceType = source_type_decoder;
340  }
341 
342  /* Initialize the context first. If no backends were passed into the command line we just use defaults. */
343  contextConfig = ma_context_config_init();
344  contextConfig.logCallback = on_log;
345  result = ma_context_init((backendCount == 0) ? NULL : backends, backendCount, &contextConfig, &g_State.context);
346  if (result != MA_SUCCESS) {
347  printf("Failed to initialize context.\n");
348  return -1;
349  }
350 
351  /*
352  Now that the context has been initialized we can do the device. In duplex mode we want to use the same format for both playback and capture so we don't need
353  to do any data conversion between the two.
354  */
355  if (deviceType == ma_device_type_duplex) {
356  if (deviceFormat == ma_format_unknown) {
357  deviceFormat = ma_format_f32;
358  }
359  if (deviceChannels == 0) {
360  deviceChannels = 0;
361  }
362  if (deviceSampleRate == 0) {
363  deviceSampleRate = 48000;
364  }
365  }
366 
367  deviceConfig = ma_device_config_init(deviceType);
368  deviceConfig.playback.format = deviceFormat;
369  deviceConfig.playback.channels = deviceChannels;
370  deviceConfig.capture.format = deviceFormat;
371  deviceConfig.capture.channels = deviceChannels;
372  deviceConfig.sampleRate = deviceSampleRate;
373  deviceConfig.dataCallback = on_data;
374  deviceConfig.stopCallback = on_stop;
375  result = ma_device_init(&g_State.context, &deviceConfig, &g_State.device);
376  if (result != MA_SUCCESS) {
377  printf("Failed to initialize device.\n");
378  ma_context_uninit(&g_State.context);
379  return -1;
380  }
381 
382  /* We can now initialize our input and output sources. */
383  if (deviceType == ma_device_type_playback) {
384  if (g_State.sourceType == source_type_decoder) {
385  ma_decoder_config decoderConfig;
386  decoderConfig = ma_decoder_config_init(g_State.device.playback.format, g_State.device.playback.channels, g_State.device.sampleRate);
387  result = ma_decoder_init_file(pFilePath, &decoderConfig, &g_State.decoder);
388  if (result != MA_SUCCESS) {
389  printf("Failed to open file for decoding \"%s\".\n", pFilePath);
390  ma_device_uninit(&g_State.device);
391  ma_context_uninit(&g_State.context);
392  return -1;
393  }
394  }
395 
396  if (g_State.sourceType == source_type_waveform) {
397  ma_waveform_config waveformConfig;
398  waveformConfig = ma_waveform_config_init(g_State.device.playback.format, g_State.device.playback.channels, g_State.device.sampleRate, waveformType, 0.1, 220);
399  result = ma_waveform_init(&waveformConfig, &g_State.waveform);
400  if (result != MA_SUCCESS) {
401  printf("Failed to initialize waveform.\n");
402  ma_device_uninit(&g_State.device);
403  ma_context_uninit(&g_State.context);
404  return -1;
405  }
406  }
407 
408  if (g_State.sourceType == source_type_noise) {
409  ma_noise_config noiseConfig;
410  noiseConfig = ma_noise_config_init(g_State.device.playback.format, g_State.device.playback.channels, noiseType, 0, 0.1);
411  result = ma_noise_init(&noiseConfig, &g_State.noise);
412  if (result != MA_SUCCESS) {
413  printf("Failed to initialize noise.\n");
414  ma_device_uninit(&g_State.device);
415  ma_context_uninit(&g_State.context);
416  return -1;
417  }
418  }
419  }
420 
421  if (deviceType == ma_device_type_capture || deviceType == ma_device_type_loopback || (deviceType == ma_device_type_duplex && pFilePath != NULL && pFilePath[0] != '\0')) {
422  ma_encoder_config encoderConfig;
423  encoderConfig = ma_encoder_config_init(ma_resource_format_wav, g_State.device.capture.format, g_State.device.capture.channels, g_State.device.sampleRate);
424  result = ma_encoder_init_file(pFilePath, &encoderConfig, &g_State.encoder);
425  if (result != MA_SUCCESS) {
426  printf("Failed to initialize output file for capture \"%s\".\n", pFilePath);
427  ma_device_uninit(&g_State.device);
428  ma_context_uninit(&g_State.context);
429  return -1;
430  }
431 
432  g_State.hasEncoder = MA_TRUE;
433  }
434 
435 
436  /* Here we'll print some info about what we're doing. */
437  printf("Backend: %s\n", ma_get_backend_name(g_State.context.backend));
438  printf("Mode: %s\n", get_mode_description(deviceType));
439  if (deviceType == ma_device_type_playback || deviceType == ma_device_type_duplex) {
440  printf("Playback Device: %s\n", g_State.device.playback.name);
441  }
442  if (deviceType == ma_device_type_capture || deviceType == ma_device_type_duplex || deviceType == ma_device_type_loopback) {
443  printf("Capture Device: %s\n", g_State.device.capture.name);
444  }
445 
446 
447  /* Everything should be initialized at this point so we can now print our configuration and start the device. */
448  result = ma_device_start(&g_State.device);
449  if (result != MA_SUCCESS) {
450  printf("Failed to start device.\n");
451  goto done;
452  }
453 
454  /* Now we just keep looping and wait for user input. */
455  for (;;) {
456  int c;
457 
458  if (ma_device_is_started(&g_State.device)) {
459  printf("Press Q to quit, P to pause.\n");
460  } else {
461  printf("Press Q to quit, P to resume.\n");
462  }
463 
464  for (;;) {
465  c = getchar();
466  if (c != '\n') {
467  break;
468  }
469  }
470 
471  if (c == 'q' || c == 'Q') {
472  break;
473  }
474  if (c == 'p' || c == 'P') {
475  if (ma_device_is_started(&g_State.device)) {
476  ma_device_stop(&g_State.device);
477  } else {
478  ma_device_start(&g_State.device);
479  }
480  }
481  }
482 
483 done:
484  ma_device_uninit(&g_State.device);
485  ma_context_uninit(&g_State.context);
486  if (g_State.sourceType == source_type_decoder) {
487  ma_decoder_uninit(&g_State.decoder);
488  }
489  if (g_State.hasEncoder) {
490  ma_encoder_uninit(&g_State.encoder);
491  }
492 
493  return 0;
494 }
ma_backend_audio4
@ ma_backend_audio4
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2800
ma_get_bytes_per_frame
static MA_INLINE ma_uint32 ma_get_bytes_per_frame(ma_format format, ma_uint32 channels)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2673
ma_noise_config
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5400
ma_get_backend_name
const char * ma_get_backend_name(ma_backend backend)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:5055
MA_FALSE
#define MA_FALSE
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1531
ma_device_type_loopback
@ ma_device_type_loopback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3015
try_parse_mode
ma_bool32 try_parse_mode(const char *arg, ma_device_type *pDeviceType)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:85
ma_device_uninit
void ma_device_uninit(ma_device *pDevice)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:27425
ma_noise
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5412
ma_device_start
ma_result ma_device_start(ma_device *pDevice)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:27485
ma_encoder_config
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5313
context
ma_context context
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:56
ma_noise_type_brownian
@ ma_noise_type_brownian
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5397
ma_backend_wasapi
@ ma_backend_wasapi
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2795
NULL
#define NULL
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/extras/speex_resampler/thirdparty/resample.c:92
ma_resource_format_wav
@ ma_resource_format_wav
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5147
ma_device_type_capture
@ ma_device_type_capture
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3013
ma_decoder_uninit
ma_result ma_decoder_uninit(ma_decoder *pDecoder)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:44739
ma_decoder_config
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5170
ma_device::channels
ma_uint32 channels
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3626
ma_bool32
ma_uint32 ma_bool32
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1529
sourceType
source_type sourceType
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:58
ma_waveform_config
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5361
ma_countof
#define ma_countof(x)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:776
ma_format_f32
@ ma_format_f32
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1790
g_State
static struct @130 g_State
ma_backend_opensl
@ ma_backend_opensl
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2806
ma_decoder_config_init
ma_decoder_config ma_decoder_config_init(ma_format outputFormat, ma_uint32 outputChannels, ma_uint32 outputSampleRate)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:40646
ma_device_stop
ma_result ma_device_stop(ma_device *pDevice)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:27544
decoder
ma_decoder decoder
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:61
ma_device_config::stopCallback
ma_stop_proc stopCallback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3111
get_mode_description
const char * get_mode_description(ma_device_type deviceType)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:66
ma_format
ma_format
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1779
ma_device::format
ma_format format
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3625
ma_device_type_playback
@ ma_device_type_playback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3012
on_stop
void on_stop(ma_device *pDevice)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:243
ma_device_config::dataCallback
ma_device_callback_proc dataCallback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3110
source_type
source_type
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:47
ma_noise_read_pcm_frames
ma_uint64 ma_noise_read_pcm_frames(ma_noise *pNoise, void *pFramesOut, ma_uint64 frameCount)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:46227
on_data
void on_data(ma_device *pDevice, void *pFramesOut, const void *pFramesIn, ma_uint32 frameCount)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:249
on_log
void on_log(ma_context *pContext, ma_device *pDevice, ma_uint32 logLevel, const char *message)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:235
ma_format_unknown
@ ma_format_unknown
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1785
ma_encoder_write_pcm_frames
ma_uint64 ma_encoder_write_pcm_frames(ma_encoder *pEncoder, const void *pFramesIn, ma_uint64 frameCount)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:45351
device
ma_device device
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:57
encoder
ma_encoder encoder
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:62
ma_waveform_type_sawtooth
@ ma_waveform_type_sawtooth
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5362
try_parse_noise
ma_bool32 try_parse_noise(const char *arg, ma_noise_type *pNoiseType)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:214
ma_device_config::capture
struct ma_device_config::@98 capture
MA_COPY_MEMORY
#define MA_COPY_MEMORY(dst, src, sz)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:754
ma_noise_type_pink
@ ma_noise_type_pink
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5396
ma_backend_dsound
@ ma_backend_dsound
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2796
ma_context_uninit
ma_result ma_context_uninit(ma_context *pContext)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:26757
ma_result
int ma_result
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1658
ma_context_config_init
ma_context_config ma_context_config_init(void)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:26542
source_type_decoder
@ source_type_decoder
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:51
ma_noise_config_init
ma_noise_config ma_noise_config_init(ma_format format, ma_uint32 channels, ma_noise_type type, ma_int32 seed, double amplitude)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:45801
try_parse_backend
ma_bool32 try_parse_backend(const char *arg, ma_backend *pBackends, ma_uint32 backendCap, ma_uint32 *pBackendCount)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:110
ma_backend_winmm
@ ma_backend_winmm
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2797
ma_waveform_init
ma_result ma_waveform_init(const ma_waveform_config *pConfig, ma_waveform *pWaveform)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:45445
ma_backend_coreaudio
@ ma_backend_coreaudio
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2798
ma_encoder_uninit
void ma_encoder_uninit(ma_encoder *pEncoder)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:45334
source_type_waveform
@ source_type_waveform
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:49
ma_waveform_type_triangle
@ ma_waveform_type_triangle
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5361
ma_encoder
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5324
try_parse_waveform
ma_bool32 try_parse_waveform(const char *arg, ma_waveform_type *pWaveformType)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:189
ma_noise_init
ma_result ma_noise_init(const ma_noise_config *pConfig, ma_noise *pNoise)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:45865
ma_encoder_init_file
ma_result ma_encoder_init_file(const char *pFilePath, const ma_encoder_config *pConfig, ma_encoder *pEncoder)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:45279
ma_encoder_config_init
ma_encoder_config ma_encoder_config_init(ma_resource_format resourceFormat, ma_format format, ma_uint32 channels, ma_uint32 sampleRate)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:45183
ma_decoder
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5193
MA_ASSERT
#define MA_ASSERT(condition)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:770
ma_waveform_config_init
ma_waveform_config ma_waveform_config_init(ma_format format, ma_uint32 channels, ma_uint32 sampleRate, ma_waveform_type type, double amplitude, double frequency)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:45369
hasEncoder
ma_bool32 hasEncoder
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:63
waveform
ma_waveform waveform
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:59
ma_waveform_type_sine
@ ma_waveform_type_sine
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5359
ma_device_is_started
ma_bool32 ma_device_is_started(ma_device *pDevice)
ma_backend_sndio
@ ma_backend_sndio
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2799
ma_uint32
uint32_t ma_uint32
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1503
ma_waveform
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5373
ma_context_config::logCallback
ma_log_proc logCallback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3162
ma_device_config::format
ma_format format
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3128
ma_decoder_read_pcm_frames
ma_uint64 ma_decoder_read_pcm_frames(ma_decoder *pDecoder, void *pFramesOut, ma_uint64 frameCount)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:44808
ma_device_config_init
ma_device_config ma_device_config_init(ma_device_type deviceType)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:27034
ma_backend_null
@ ma_backend_null
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2808
ma_device_config::channels
ma_uint32 channels
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3129
ma_waveform_read_pcm_frames
ma_uint64 ma_waveform_read_pcm_frames(ma_waveform *pWaveform, void *pFramesOut, ma_uint64 frameCount)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:45751
ma_waveform_type
ma_waveform_type
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5353
ma_decoder_init_file
ma_result ma_decoder_init_file(const char *pFilePath, const ma_decoder_config *pConfig, ma_decoder *pDecoder)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:44687
python.test_porcupine.argv
argv
Definition: test_porcupine.py:158
ma_context
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3210
source_type_noise
@ source_type_noise
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:50
ma_backend_pulseaudio
@ ma_backend_pulseaudio
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2802
ma_device_init
ma_result ma_device_init(ma_context *pContext, const ma_device_config *pConfig, ma_device *pDevice)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:27048
ma_device
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3584
ma_device_config
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3100
ma_device_config::sampleRate
ma_uint32 sampleRate
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3103
ma_waveform_type_square
@ ma_waveform_type_square
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5360
ma_device::capture
struct ma_device::@116 capture
main
int main(int argc, char **argv)
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:293
ma_device_type
ma_device_type
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3010
MA_TRUE
#define MA_TRUE
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1530
ma_context_init
ma_result ma_context_init(const ma_backend backends[], ma_uint32 backendCount, const ma_context_config *pConfig, ma_context *pContext)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:26550
noise
ma_noise noise
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:60
MA_SUCCESS
#define MA_SUCCESS
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1659
ma_backend_oss
@ ma_backend_oss
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2801
ma_backend_jack
@ ma_backend_jack
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2804
ma_backend_alsa
@ ma_backend_alsa
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2803
ma_log_level_to_string
const char * ma_log_level_to_string(ma_uint32 logLevel)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:1953
ma_noise_type
ma_noise_type
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5393
ma_backend
ma_backend
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2793
ma_noise_type_white
@ ma_noise_type_white
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5395
ma_backend_webaudio
@ ma_backend_webaudio
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2807
ma_device_config::playback
struct ma_device_config::@97 playback
ma_device_type_duplex
@ ma_device_type_duplex
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3014
ma_device::playback
struct ma_device::@115 playback
ma_backend_aaudio
@ ma_backend_aaudio
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2805
ma_device::type
ma_device_type type
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3587
ma_context_config
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3160


picovoice_driver
Author(s):
autogenerated on Fri Apr 1 2022 02:13:56