rhino/demo/c/dr_libs/tests/external/miniaudio/examples/simple_loopback.c
Go to the documentation of this file.
1 /*
2 This example simply captures data from your default playback device until you press Enter. The output is saved to the file
3 specified on the command line.
4 
5 The use loopback mode you just need to set the device type to ma_device_type_loopback and set the capture device config
6 properties. The output buffer in the callback will be null whereas the input buffer will be valid.
7 */
8 
9 #define MINIAUDIO_IMPLEMENTATION
10 #include "../miniaudio.h"
11 
12 #define DR_WAV_IMPLEMENTATION
13 #include "../extras/dr_wav.h"
14 
15 #include <stdlib.h>
16 #include <stdio.h>
17 
18 void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount)
19 {
20  drwav* pWav = (drwav*)pDevice->pUserData;
21  MA_ASSERT(pWav != NULL);
22 
23  drwav_write_pcm_frames(pWav, frameCount, pInput);
24 
25  (void)pOutput;
26 }
27 
28 int main(int argc, char** argv)
29 {
30  ma_result result;
31  drwav_data_format wavFormat;
32  drwav wav;
33  ma_device_config deviceConfig;
35 
36  /* Loopback mode is currently only supported on WASAPI. */
37  ma_backend backends[] = {
39  };
40 
41  if (argc < 2) {
42  printf("No input file.\n");
43  return -1;
44  }
45 
46  wavFormat.container = drwav_container_riff;
48  wavFormat.channels = 2;
49  wavFormat.sampleRate = 44100;
50  wavFormat.bitsPerSample = 32;
51 
52  if (drwav_init_file_write(&wav, argv[1], &wavFormat, NULL) == DRWAV_FALSE) {
53  printf("Failed to initialize output file.\n");
54  return -1;
55  }
56 
58  deviceConfig.capture.pDeviceID = NULL; /* Use default device for this example. Set this to the ID of a _playback_ device if you want to capture from a specific device. */
59  deviceConfig.capture.format = ma_format_f32;
60  deviceConfig.capture.channels = wavFormat.channels;
61  deviceConfig.sampleRate = wavFormat.sampleRate;
62  deviceConfig.dataCallback = data_callback;
63  deviceConfig.pUserData = &wav;
64 
65  result = ma_device_init_ex(backends, sizeof(backends)/sizeof(backends[0]), NULL, &deviceConfig, &device);
66  if (result != MA_SUCCESS) {
67  printf("Failed to initialize loopback device.\n");
68  return -2;
69  }
70 
71  result = ma_device_start(&device);
72  if (result != MA_SUCCESS) {
74  printf("Failed to start device.\n");
75  return -3;
76  }
77 
78  printf("Press Enter to stop recording...\n");
79  getchar();
80 
82  drwav_uninit(&wav);
83 
84  return 0;
85 }
ma_device_init_ex
ma_result ma_device_init_ex(const ma_backend backends[], ma_uint32 backendCount, const ma_context_config *pContextConfig, const ma_device_config *pConfig, ma_device *pDevice)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:27362
ma_device_config::pDeviceID
ma_device_id * pDeviceID
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3127
DRWAV_FALSE
#define DRWAV_FALSE
Definition: porcupine/demo/c/dr_libs/dr_wav.h:165
data_callback
void data_callback(ma_device *pDevice, void *pOutput, const void *pInput, ma_uint32 frameCount)
Definition: rhino/demo/c/dr_libs/tests/external/miniaudio/examples/simple_loopback.c:18
ma_device_type_loopback
@ ma_device_type_loopback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3015
ma_device_uninit
void ma_device_uninit(ma_device *pDevice)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:27425
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_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_format_f32
@ ma_format_f32
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1790
ma_device_config::dataCallback
ma_device_callback_proc dataCallback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3110
device
ma_device device
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:57
ma_device_config::capture
struct ma_device_config::@98 capture
ma_result
int ma_result
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1658
drwav_data_format::format
drwav_uint32 format
Definition: porcupine/demo/c/dr_libs/dr_wav.h:438
drwav_data_format::channels
drwav_uint32 channels
Definition: porcupine/demo/c/dr_libs/dr_wav.h:439
ma_device::pUserData
void * pUserData
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3592
MA_ASSERT
#define MA_ASSERT(condition)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:770
drwav_data_format::container
drwav_container container
Definition: porcupine/demo/c/dr_libs/dr_wav.h:437
drwav_container_riff
@ drwav_container_riff
Definition: porcupine/demo/c/dr_libs/dr_wav.h:276
main
int main(int argc, char **argv)
Definition: rhino/demo/c/dr_libs/tests/external/miniaudio/examples/simple_loopback.c:28
drwav_data_format::bitsPerSample
drwav_uint32 bitsPerSample
Definition: porcupine/demo/c/dr_libs/dr_wav.h:441
drwav_uninit
DRWAV_API drwav_result drwav_uninit(drwav *pWav)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:49216
ma_uint32
uint32_t ma_uint32
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1503
ma_device_config::format
ma_format format
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3128
drwav_init_file_write
DRWAV_API drwav_bool32 drwav_init_file_write(drwav *pWav, const char *filename, const drwav_data_format *pFormat, const drwav_allocation_callbacks *pAllocationCallbacks)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:49030
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
drwav
Definition: porcupine/demo/c/dr_libs/dr_wav.h:805
ma_device_config::channels
ma_uint32 channels
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3129
python.test_porcupine.argv
argv
Definition: test_porcupine.py:158
drwav_data_format::sampleRate
drwav_uint32 sampleRate
Definition: porcupine/demo/c/dr_libs/dr_wav.h:440
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
DR_WAVE_FORMAT_IEEE_FLOAT
#define DR_WAVE_FORMAT_IEEE_FLOAT
Definition: porcupine/demo/c/dr_libs/dr_wav.h:256
MA_SUCCESS
#define MA_SUCCESS
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1659
ma_backend
ma_backend
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:2793
drwav_data_format
Definition: porcupine/demo/c/dr_libs/dr_wav.h:435
drwav_write_pcm_frames
DRWAV_API drwav_uint64 drwav_write_pcm_frames(drwav *pWav, drwav_uint64 framesToWrite, const void *pData)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:49558
ma_device_config::pUserData
void * pUserData
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3112


picovoice_driver
Author(s):
autogenerated on Fri Apr 1 2022 02:14:50