pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c
Go to the documentation of this file.
1 #define MINIAUDIO_IMPLEMENTATION
2 #include "../../../../miniaudio.h"
3 #include "../../../miniaudio_engine.h"
4 #include "ma_reverb_node.c"
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 1 /* For this example, always set to 1. */
10 #define DEVICE_SAMPLE_RATE 48000 /* Cannot be less than 22050 for this example. */
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_reverb_node g_reverbNode; /* The reverb 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_reverb_node_config reverbNodeConfig;
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.sampleRate = DEVICE_SAMPLE_RATE;
52  deviceConfig.dataCallback = data_callback;
53  result = ma_device_init(NULL, &deviceConfig, &device);
54  if (result != MA_SUCCESS) {
55  return result;
56  }
57 
58 
59  /* Node graph. */
61 
62  result = ma_node_graph_init(&nodeGraphConfig, NULL, &g_nodeGraph);
63  if (result != MA_SUCCESS) {
64  printf("Failed to initialize node graph.");
65  goto done0;
66  }
67 
68 
69  /* Reverb. Attached straight to the endpoint. */
71 
72  result = ma_reverb_node_init(&g_nodeGraph, &reverbNodeConfig, NULL, &g_reverbNode);
73  if (result != MA_SUCCESS) {
74  printf("Failed to initialize reverb node.");
75  goto done1;
76  }
77 
79 
80 
81  /* Data supply. Attached to input bus 0 of the reverb node. */
83  if (result != MA_SUCCESS) {
84  printf("Failed to initialize audio buffer for source.");
85  goto done2;
86  }
87 
88  dataSupplyNodeConfig = ma_data_source_node_config_init(&g_dataSupply, MA_FALSE);
89 
90  result = ma_data_source_node_init(&g_nodeGraph, &dataSupplyNodeConfig, NULL, &g_dataSupplyNode);
91  if (result != MA_SUCCESS) {
92  printf("Failed to initialize source node.");
93  goto done2;
94  }
95 
97 
98 
99 
100  /* Now we just start the device and wait for the user to terminate the program. */
102 
103  printf("Press Enter to quit...\n");
104  getchar();
105 
106  /* It's important that we stop the device first or else we'll uninitialize the graph from under the device. */
108 
109 
113 done0: ma_device_uninit(&device);
114 
115  (void)argc;
116  (void)argv;
117 
118  return 0;
119 }
ma_device_config::pDeviceID
ma_device_id * pDeviceID
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3127
ma_reverb_node.c
ma_device_config::shareMode
ma_share_mode shareMode
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3131
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
DEVICE_CHANNELS
#define DEVICE_CHANNELS
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c:9
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
g_dataSupplyNode
static ma_data_source_node g_dataSupplyNode
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c:13
ma_reverb_node
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node.h:30
ma_device::format
ma_format format
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3625
ma_reverb_node_config
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node.h:14
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
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)
g_nodeGraph
static ma_node_graph g_nodeGraph
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c:15
ma_reverb_node_uninit
MA_API void ma_reverb_node_uninit(ma_reverb_node *pReverbNode, const ma_allocation_callbacks *pAllocationCallbacks)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node.c:74
g_reverbNode
static ma_reverb_node g_reverbNode
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c:14
g_dataSupply
static ma_audio_buffer_ref g_dataSupply
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c:12
device
ma_device device
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/tests/test_deviceio/ma_test_deviceio.c:57
DEVICE_FORMAT
#define DEVICE_FORMAT
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c:8
main
int main(int argc, char **argv)
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c:34
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
ma_reverb_node_init
MA_API ma_result ma_reverb_node_init(ma_node_graph *pNodeGraph, const ma_reverb_node_config *pConfig, const ma_allocation_callbacks *pAllocationCallbacks, ma_reverb_node *pReverbNode)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node.c:42
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
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_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_reverb_node_config_init
MA_API ma_reverb_node_config ma_reverb_node_config_init(ma_uint32 channels, ma_uint32 sampleRate)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node.c:5
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_config::sampleRate
ma_uint32 sampleRate
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3103
ma_device::sampleRate
ma_uint32 sampleRate
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:3588
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)
DEVICE_SAMPLE_RATE
#define DEVICE_SAMPLE_RATE
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c:10
data_callback
void data_callback(ma_device *pDevice, void *pOutput, const void *pInput, ma_uint32 frameCount)
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_reverb_node/ma_reverb_node_example.c:17
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_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


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