pvrecorder/src/miniaudio/research/_extras/nodes/ma_delay_node/ma_delay_node_example.c
Go to the documentation of this file.
1 
2 #define MINIAUDIO_IMPLEMENTATION
3 #include "../../../../miniaudio.h"
4 #include "../../../miniaudio_engine.h"
5 
6 #include <stdio.h>
7 
8 #define DEVICE_FORMAT ma_format_f32 /* Must always be f32 for this example because the node graph system only works with this. */
9 #define DEVICE_CHANNELS 2
10 #define DEVICE_SAMPLE_RATE 48000
11 
12 static ma_audio_buffer_ref g_dataSupply; /* The underlying data source of the source node. */
13 static ma_data_source_node g_dataSupplyNode; /* The node that will sit at the root level. Will be reading data from g_dataSupply. */
14 static ma_delay_node g_delayNode; /* The delay node. */
15 static ma_node_graph g_nodeGraph; /* The main node graph that we'll be feeding data through. */
16 
17 void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount)
18 {
19  MA_ASSERT(pDevice->capture.format == pDevice->playback.format && pDevice->capture.format == ma_format_f32);
20  MA_ASSERT(pDevice->capture.channels == pDevice->playback.channels);
21 
22  /*
23  The node graph system is a pulling style of API. At the lowest level of the chain will be a
24  node acting as a data source for the purpose of delivering the initial audio data. In our case,
25  the data source is our `pInput` buffer. We need to update the underlying data source so that it
26  read data from `pInput`.
27  */
28  ma_audio_buffer_ref_set_data(&g_dataSupply, pInput, frameCount);
29 
30  /* With the source buffer configured we can now read directly from the node graph. */
31  ma_node_graph_read_pcm_frames(&g_nodeGraph, pOutput, frameCount, NULL);
32 }
33 
34 int main(int argc, char** argv)
35 {
36  ma_result result;
37  ma_device_config deviceConfig;
39  ma_node_graph_config nodeGraphConfig;
40  ma_delay_node_config delayNodeConfig;
41  ma_data_source_node_config dataSupplyNodeConfig;
42 
44  deviceConfig.capture.pDeviceID = NULL;
45  deviceConfig.capture.format = DEVICE_FORMAT;
46  deviceConfig.capture.channels = DEVICE_CHANNELS;
47  deviceConfig.capture.shareMode = ma_share_mode_shared;
48  deviceConfig.playback.pDeviceID = NULL;
49  deviceConfig.playback.format = DEVICE_FORMAT;
50  deviceConfig.playback.channels = DEVICE_CHANNELS;
51  deviceConfig.dataCallback = data_callback;
52  result = ma_device_init(NULL, &deviceConfig, &device);
53  if (result != MA_SUCCESS) {
54  return result;
55  }
56 
57 
58  /* Node graph. */
60 
61  result = ma_node_graph_init(&nodeGraphConfig, NULL, &g_nodeGraph);
62  if (result != MA_SUCCESS) {
63  printf("Failed to initialize node graph.");
64  goto done0;
65  }
66 
67 
68  /* Delay. Attached straight to the endpoint. */
69  delayNodeConfig = ma_delay_node_config_init(device.capture.channels, device.sampleRate, (100 * device.sampleRate) / 1000, 0.5f);
70 
71  result = ma_delay_node_init(&g_nodeGraph, &delayNodeConfig, NULL, &g_delayNode);
72  if (result != MA_SUCCESS) {
73  printf("Failed to initialize delay node.");
74  goto done1;
75  }
76 
78 
79 
80  /* Data supply. Attached to input bus 0 of the delay node. */
82  if (result != MA_SUCCESS) {
83  printf("Failed to initialize audio buffer for source.");
84  goto done2;
85  }
86 
87  dataSupplyNodeConfig = ma_data_source_node_config_init(&g_dataSupply, MA_FALSE);
88 
89  result = ma_data_source_node_init(&g_nodeGraph, &dataSupplyNodeConfig, NULL, &g_dataSupplyNode);
90  if (result != MA_SUCCESS) {
91  printf("Failed to initialize source node.");
92  goto done2;
93  }
94 
96 
97 
98 
99 
101 
102  printf("Press Enter to quit...\n");
103  getchar();
104 
105  /* It's important that we stop the device first or else we'll uninitialize the graph from under the device. */
107 
111 done0: ma_device_uninit(&device);
112 
113  (void)argc;
114  (void)argv;
115 
116  return 0;
117 }
ma_device_config::pDeviceID
ma_device_id * pDeviceID
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3127
ma_device_config::shareMode
ma_share_mode shareMode
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3131
DEVICE_FORMAT
#define DEVICE_FORMAT
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_delay_node/ma_delay_node_example.c:8
MA_FALSE
#define MA_FALSE
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1531
ma_data_source_node_config
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1073
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_device::channels
ma_uint32 channels
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3626
ma_format_f32
@ ma_format_f32
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1790
ma_node_graph_read_pcm_frames
MA_API ma_result ma_node_graph_read_pcm_frames(ma_node_graph *pNodeGraph, void *pFramesOut, ma_uint32 frameCount, ma_uint32 *pFramesRead)
ma_device_stop
ma_result ma_device_stop(ma_device *pDevice)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:27544
ma_device::format
ma_format format
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3625
g_nodeGraph
static ma_node_graph g_nodeGraph
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_delay_node/ma_delay_node_example.c:15
ma_audio_buffer_ref_set_data
MA_API ma_result ma_audio_buffer_ref_set_data(ma_audio_buffer_ref *pAudioBufferRef, const void *pData, ma_uint64 sizeInFrames)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:38077
ma_node_graph_config
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1045
g_delayNode
static ma_delay_node g_delayNode
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_delay_node/ma_delay_node_example.c:14
ma_delay_node_uninit
MA_API void ma_delay_node_uninit(ma_delay_node *pDelayNode, const ma_allocation_callbacks *pAllocationCallbacks)
ma_device_config::dataCallback
ma_device_callback_proc dataCallback
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3110
ma_node_graph_config_init
MA_API ma_node_graph_config ma_node_graph_config_init(ma_uint32 channels)
ma_delay_node
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:2359
device
ma_device device
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:57
data_callback
void data_callback(ma_device *pDevice, void *pOutput, const void *pInput, ma_uint32 frameCount)
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_delay_node/ma_delay_node_example.c:17
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
DEVICE_CHANNELS
#define DEVICE_CHANNELS
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_delay_node/ma_delay_node_example.c:9
ma_share_mode_shared
@ ma_share_mode_shared
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3020
ma_data_source_node_config_init
MA_API ma_data_source_node_config ma_data_source_node_config_init(ma_data_source *pDataSource, ma_bool32 looping)
ma_audio_buffer_ref_init
MA_API ma_result ma_audio_buffer_ref_init(ma_format format, ma_uint32 channels, const void *pData, ma_uint64 sizeInFrames, ma_audio_buffer_ref *pAudioBufferRef)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:38040
g_dataSupply
static ma_audio_buffer_ref g_dataSupply
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_delay_node/ma_delay_node_example.c:12
MA_ASSERT
#define MA_ASSERT(condition)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:770
ma_node_graph_get_endpoint
MA_API ma_node * ma_node_graph_get_endpoint(ma_node_graph *pNodeGraph)
ma_delay_node_config
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:2350
main
int main(int argc, char **argv)
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_delay_node/ma_delay_node_example.c:34
ma_node_graph_init
MA_API ma_result ma_node_graph_init(const ma_node_graph_config *pConfig, const ma_allocation_callbacks *pAllocationCallbacks, ma_node_graph *pNodeGraph)
ma_uint32
uint32_t ma_uint32
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1503
ma_audio_buffer_ref
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.h:4562
ma_device_config::format
ma_format format
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3128
ma_data_source_node_init
MA_API ma_result ma_data_source_node_init(ma_node_graph *pNodeGraph, const ma_data_source_node_config *pConfig, const ma_allocation_callbacks *pAllocationCallbacks, ma_data_source_node *pDataSourceNode)
ma_data_source_node_uninit
MA_API void ma_data_source_node_uninit(ma_data_source_node *pDataSourceNode, const ma_allocation_callbacks *pAllocationCallbacks)
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_node_attach_output_bus
MA_API ma_result ma_node_attach_output_bus(ma_node *pNode, ma_uint32 outputBusIndex, ma_node *pOtherNode, ma_uint32 otherNodeInputBusIndex)
ma_device_config::channels
ma_uint32 channels
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3129
ma_node_graph
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1053
ma_data_source_node
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1083
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::sampleRate
ma_uint32 sampleRate
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3588
ma_delay_node_config_init
MA_API ma_delay_node_config ma_delay_node_config_init(ma_uint32 channels, ma_uint32 sampleRate, ma_uint32 delayInFrames, float decay)
ma_device::capture
struct ma_device::@116 capture
ma_node_graph_uninit
MA_API void ma_node_graph_uninit(ma_node_graph *pNodeGraph, const ma_allocation_callbacks *pAllocationCallbacks)
MA_SUCCESS
#define MA_SUCCESS
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1659
g_dataSupplyNode
static ma_data_source_node g_dataSupplyNode
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_delay_node/ma_delay_node_example.c:13
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_delay_node_init
MA_API ma_result ma_delay_node_init(ma_node_graph *pNodeGraph, const ma_delay_node_config *pConfig, const ma_allocation_callbacks *pAllocationCallbacks, ma_delay_node *pDelayNode)
ma_device::playback
struct ma_device::@115 playback


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