pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.c
Go to the documentation of this file.
1 
2 #define VOCLIB_IMPLEMENTATION
3 #include "ma_vocoder_node.h"
4 
6 {
8 
10  config.nodeConfig = ma_node_config_init(); /* Input and output channels will be set in ma_vocoder_node_init(). */
11  config.channels = channels;
12  config.sampleRate = sampleRate;
13  config.bands = 16;
14  config.filtersPerBand = 6;
15 
16  return config;
17 }
18 
19 
20 static void ma_vocoder_node_process_pcm_frames(ma_node* pNode, const float** ppFramesIn, ma_uint32* pFrameCountIn, float** ppFramesOut, ma_uint32* pFrameCountOut)
21 {
22  ma_vocoder_node* pVocoderNode = (ma_vocoder_node*)pNode;
23 
24  (void)pFrameCountIn;
25 
26  voclib_process(&pVocoderNode->voclib, ppFramesIn[0], ppFramesIn[1], ppFramesOut[0], *pFrameCountOut);
27 }
28 
30 {
32  NULL,
33  2, /* 2 input channels. */
34  1, /* 1 output channel. */
35  0
36 };
37 
38 MA_API ma_result ma_vocoder_node_init(ma_node_graph* pNodeGraph, const ma_vocoder_node_config* pConfig, const ma_allocation_callbacks* pAllocationCallbacks, ma_vocoder_node* pVocoderNode)
39 {
40  ma_result result;
41  ma_node_config baseConfig;
42  ma_uint32 inputChannels[2];
43  ma_uint32 outputChannels[1];
44 
45  if (pVocoderNode == NULL) {
46  return MA_INVALID_ARGS;
47  }
48 
49  MA_ZERO_OBJECT(pVocoderNode);
50 
51  if (pConfig == NULL) {
52  return MA_INVALID_ARGS;
53  }
54 
55  if (voclib_initialize(&pVocoderNode->voclib, (unsigned char)pConfig->bands, (unsigned char)pConfig->filtersPerBand, (unsigned int)pConfig->sampleRate, (unsigned char)pConfig->channels) == 0) {
56  return MA_INVALID_ARGS;
57  }
58 
59  inputChannels [0] = pConfig->channels; /* Source/carrier. */
60  inputChannels [1] = 1; /* Excite/modulator. Must always be single channel. */
61  outputChannels[0] = pConfig->channels; /* Output channels is always the same as the source/carrier. */
62 
63  baseConfig = pConfig->nodeConfig;
64  baseConfig.vtable = &g_ma_vocoder_node_vtable;
65  baseConfig.pInputChannels = inputChannels;
66  baseConfig.pOutputChannels = outputChannels;
67 
68  result = ma_node_init(pNodeGraph, &baseConfig, pAllocationCallbacks, &pVocoderNode->baseNode);
69  if (result != MA_SUCCESS) {
70  return result;
71  }
72 
73  return MA_SUCCESS;
74 }
75 
76 MA_API void ma_vocoder_node_uninit(ma_vocoder_node* pVocoderNode, const ma_allocation_callbacks* pAllocationCallbacks)
77 {
78  /* The base node must always be initialized first. */
79  ma_node_uninit(pVocoderNode, pAllocationCallbacks);
80 }
MA_INVALID_ARGS
#define MA_INVALID_ARGS
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1661
NULL
#define NULL
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/extras/speex_resampler/thirdparty/resample.c:92
ma_vocoder_node_config::nodeConfig
ma_node_config nodeConfig
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.h:23
ma_vocoder_node_config::channels
ma_uint32 channels
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.h:24
ma_vocoder_node_uninit
MA_API void ma_vocoder_node_uninit(ma_vocoder_node *pVocoderNode, const ma_allocation_callbacks *pAllocationCallbacks)
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.c:76
voclib_initialize
int voclib_initialize(voclib_instance *instance, unsigned char bands, unsigned char filters_per_band, unsigned int sample_rate, unsigned char carrier_channels)
ma_vocoder_node.h
MA_API
#define MA_API
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.h:174
ma_node
void ma_node
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:874
ma_node_vtable
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:892
ma_allocation_callbacks
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1823
ma_vocoder_node
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.h:33
ma_result
int ma_result
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1658
ma_node_init
MA_API ma_result ma_node_init(ma_node_graph *pNodeGraph, const ma_node_config *pConfig, const ma_allocation_callbacks *pAllocationCallbacks, ma_node *pNode)
ma_node_config_init
MA_API ma_node_config ma_node_config_init(void)
ma_vocoder_node_config::bands
ma_uint32 bands
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.h:26
ma_node_config::vtable
const ma_node_vtable * vtable
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:937
ma_vocoder_node::baseNode
ma_node_base baseNode
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.h:35
ma_vocoder_node_process_pcm_frames
static void ma_vocoder_node_process_pcm_frames(ma_node *pNode, const float **ppFramesIn, ma_uint32 *pFrameCountIn, float **ppFramesOut, ma_uint32 *pFrameCountOut)
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.c:20
ma_node_config::pOutputChannels
const ma_uint32 * pOutputChannels
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:942
ma_node_uninit
MA_API void ma_node_uninit(ma_node *pNode, const ma_allocation_callbacks *pAllocationCallbacks)
ma_uint32
uint32_t ma_uint32
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1503
voclib_process
int voclib_process(voclib_instance *instance, const float *carrier_buffer, const float *modulator_buffer, float *output_buffer, unsigned int frames)
ma_vocoder_node_config::sampleRate
ma_uint32 sampleRate
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.h:25
ma_node_config
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:935
ma_node_graph
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:1053
ma_vocoder_node::voclib
voclib_instance voclib
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.h:36
ma_vocoder_node_init
MA_API ma_result ma_vocoder_node_init(ma_node_graph *pNodeGraph, const ma_vocoder_node_config *pConfig, const ma_allocation_callbacks *pAllocationCallbacks, ma_vocoder_node *pVocoderNode)
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.c:38
ma_node_config::pInputChannels
const ma_uint32 * pInputChannels
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/miniaudio_engine.h:941
ma_vocoder_node_config_init
MA_API ma_vocoder_node_config ma_vocoder_node_config_init(ma_uint32 channels, ma_uint32 sampleRate)
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.c:5
config
static sai_transceiver_t config
Definition: imxrt1050/imxrt1050-evkb/source/pv_audio_rec.c:75
MA_SUCCESS
#define MA_SUCCESS
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/miniaudio.h:1659
ma_vocoder_node_config
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.h:21
MA_ZERO_OBJECT
#define MA_ZERO_OBJECT(p)
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/extras/miniaudio_split/miniaudio.c:774
ma_vocoder_node_config::filtersPerBand
ma_uint32 filtersPerBand
Definition: porcupine/demo/c/pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.h:27
g_ma_vocoder_node_vtable
static ma_node_vtable g_ma_vocoder_node_vtable
Definition: pvrecorder/src/miniaudio/research/_extras/nodes/ma_vocoder_node/ma_vocoder_node.c:29


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