pvrecorder/src/miniaudio/examples/simple_playback.c
Go to the documentation of this file.
1 /*
2 Demonstrates how to load a sound file and play it back using the low-level API.
3 
4 The low-level API uses a callback to deliver audio between the application and miniaudio for playback or recording. When
5 in playback mode, as in this example, the application sends raw audio data to miniaudio which is then played back through
6 the default playback device as defined by the operating system.
7 
8 This example uses the `ma_decoder` API to load a sound and play it back. The decoder is entirely decoupled from the
9 device and can be used independently of it. This example only plays back a single sound file, but it's possible to play
10 back multiple files by simple loading multiple decoders and mixing them (do not create multiple devices to do this). See
11 the simple_mixing example for how best to do this.
12 */
13 #define MINIAUDIO_IMPLEMENTATION
14 #include "../miniaudio.h"
15 
16 #include <stdio.h>
17 
18 void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount)
19 {
20  ma_decoder* pDecoder = (ma_decoder*)pDevice->pUserData;
21  if (pDecoder == NULL) {
22  return;
23  }
24 
25  ma_decoder_read_pcm_frames(pDecoder, pOutput, frameCount);
26 
27  (void)pInput;
28 }
29 
30 int main(int argc, char** argv)
31 {
32  ma_result result;
34  ma_device_config deviceConfig;
36 
37  if (argc < 2) {
38  printf("No input file.\n");
39  return -1;
40  }
41 
42  result = ma_decoder_init_file(argv[1], NULL, &decoder);
43  if (result != MA_SUCCESS) {
44  printf("Could not load file: %s\n", argv[1]);
45  return -2;
46  }
47 
49  deviceConfig.playback.format = decoder.outputFormat;
50  deviceConfig.playback.channels = decoder.outputChannels;
51  deviceConfig.sampleRate = decoder.outputSampleRate;
52  deviceConfig.dataCallback = data_callback;
53  deviceConfig.pUserData = &decoder;
54 
55  if (ma_device_init(NULL, &deviceConfig, &device) != MA_SUCCESS) {
56  printf("Failed to open playback device.\n");
58  return -3;
59  }
60 
62  printf("Failed to start playback device.\n");
65  return -4;
66  }
67 
68  printf("Press Enter to quit...");
69  getchar();
70 
73 
74  return 0;
75 }
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
NULL
#define NULL
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/extras/speex_resampler/thirdparty/resample.c:92
ma_decoder_uninit
ma_result ma_decoder_uninit(ma_decoder *pDecoder)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:44739
decoder
ma_decoder decoder
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:61
data_callback
void data_callback(ma_device *pDevice, void *pOutput, const void *pInput, ma_uint32 frameCount)
Definition: pvrecorder/src/miniaudio/examples/simple_playback.c:18
ma_device_type_playback
@ ma_device_type_playback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3012
ma_device_config::dataCallback
ma_device_callback_proc dataCallback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3110
ma_decoder::outputFormat
ma_format outputFormat
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5203
device
ma_device device
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:57
ma_result
int ma_result
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1658
ma_device::pUserData
void * pUserData
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3592
ma_decoder
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5193
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
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_device_config::channels
ma_uint32 channels
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3129
ma_decoder::outputChannels
ma_uint32 outputChannels
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5204
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_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_SUCCESS
#define MA_SUCCESS
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1659
ma_device_config::playback
struct ma_device_config::@97 playback
ma_decoder::outputSampleRate
ma_uint32 outputSampleRate
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:5205
ma_device_config::pUserData
void * pUserData
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3112
main
int main(int argc, char **argv)
Definition: pvrecorder/src/miniaudio/examples/simple_playback.c:30


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