pvrecorder/src/miniaudio/examples/simple_looping.c
Go to the documentation of this file.
1 /*
2 Shows one way to handle looping of a sound.
3 
4 This example uses a decoder as the data source. Decoders can be used with the `ma_data_source` API which, conveniently,
5 supports looping via the `ma_data_source_read_pcm_frames()` API. To use it, all you need to do is pass a pointer to the
6 decoder straight into `ma_data_source_read_pcm_frames()` and it will just work.
7 */
8 #define MINIAUDIO_IMPLEMENTATION
9 #include "../miniaudio.h"
10 
11 #include <stdio.h>
12 
13 void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount)
14 {
15  ma_bool32 isLooping = MA_TRUE;
16 
17  ma_decoder* pDecoder = (ma_decoder*)pDevice->pUserData;
18  if (pDecoder == NULL) {
19  return;
20  }
21 
22  /*
23  A decoder is a data source which means you can seemlessly plug it into the ma_data_source API. We can therefore take advantage
24  of the "loop" parameter of ma_data_source_read_pcm_frames() to handle looping for us.
25  */
26  ma_data_source_read_pcm_frames(pDecoder, pOutput, frameCount, NULL, isLooping);
27 
28  (void)pInput;
29 }
30 
31 int main(int argc, char** argv)
32 {
33  ma_result result;
35  ma_device_config deviceConfig;
37 
38  if (argc < 2) {
39  printf("No input file.\n");
40  return -1;
41  }
42 
43  result = ma_decoder_init_file(argv[1], NULL, &decoder);
44  if (result != MA_SUCCESS) {
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
ma_bool32
ma_uint32 ma_bool32
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1529
ma_data_source_read_pcm_frames
MA_API ma_result ma_data_source_read_pcm_frames(ma_data_source *pDataSource, void *pFramesOut, ma_uint64 frameCount, ma_uint64 *pFramesRead, ma_bool32 loop)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:37348
decoder
ma_decoder decoder
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:61
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
main
int main(int argc, char **argv)
Definition: pvrecorder/src/miniaudio/examples/simple_looping.c:31
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_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_TRUE
#define MA_TRUE
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1530
data_callback
void data_callback(ma_device *pDevice, void *pOutput, const void *pInput, ma_uint32 frameCount)
Definition: pvrecorder/src/miniaudio/examples/simple_looping.c:13
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


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