| // | |
| // Copyright © 2025 Agora | |
| // This file is part of TEN Framework, an open source project. | |
| // Licensed under the Apache License, Version 2.0, with certain conditions. | |
| // Refer to the "LICENSE" file in the root directory for more information. | |
| // | |
| // Configuration Parameters, which impacts dynamic memory occupation, can only | |
| // be set during allocation | |
| typedef struct Aed_StaticCfg_ { | |
| int enableFlag; // flag to enable or disable this module | |
| // 0: disable, o.w.: enable | |
| size_t fftSz; // fft-size, only support: 128, 256, 512, 1024 | |
| size_t hopSz; // fft-Hop Size, will be used to check | |
| size_t anaWindowSz; // fft-window Size, will be used to calc rms | |
| int frqInputAvailableFlag; // whether Aed_InputData will contain external | |
| // freq. power-sepctra | |
| } Aed_StaticCfg; | |
| // Configuraiton parameters which can be modified/set every frames | |
| typedef struct Aed_DynamCfg_ { | |
| float extVoiceThr; // threshold for ai based voice decision [0,1] | |
| float extMusicThr; // threshold for ai based music decision [0,1] | |
| float extEnergyThr; // threshold for energy based vad decision [0, ---] | |
| size_t resetFrameNum; // frame number for aivad reset [1875, 75000] | |
| float pitchEstVoicedThr; // threshold for pitch-estimator to output estimated | |
| // pitch | |
| } Aed_DynamCfg; | |
| // Spectrum are assumed to be generated with time-domain samples in [-32768, | |
| // 32767] with or without pre-emphasis operation | |
| typedef struct Aed_InputData_ { | |
| const float* binPower; // [NBins], power spectrum of 16KHz samples | |
| int nBins; | |
| const float* | |
| timeSignal; // [hopSz] // this frame's input signal, in [-32768, 32767] | |
| int hopSz; // should be equal to StaticCfg->hopSz | |
| } Aed_InputData; | |
| // return data from statistical ns module | |
| typedef struct Aed_OutputData_ { | |
| float frameEnergy; // frame energy for input normalized data | |
| float frameRms; // rms for input int16 data | |
| int energyVadRes; // vad res 0/1 with extEnergyThreshold based on input frame | |
| // energy | |
| float voiceProb; // vad score [0,1] | |
| int vadRes; // vad res 0/1 with extVoiceThr based on ai method, t + 16ms res | |
| // correspond to the t input | |
| float pitchFreq; // estimated pitch freq. | |
| } Aed_OutputData; | |
| extern "C" { | |
| /**************************************************************************** | |
| * AUP_Aed_Create(...) | |
| * | |
| * This function creats a state handler from nothing, which is NOT ready for | |
| * processing | |
| * | |
| * Input: | |
| * | |
| * Output: | |
| * - stPtr : buffer to store the returned state handler | |
| * | |
| * Return value : 0 - Ok | |
| * -1 - Error | |
| */ | |
| int AUP_Aed_create(void** stPtr); | |
| /**************************************************************************** | |
| * AUP_Aed_Destroy(...) | |
| * | |
| * destroy VAD instance, and releasing all the dynamically allocated memory | |
| * this interface will also release ainsFactory, which was | |
| * created externally and passed to VAD module through memAllocate interface | |
| * | |
| * Input: | |
| * - stPtr : buffer of State Handler, after this method, this | |
| * handler won't be usable anymore | |
| * | |
| * Output: | |
| * | |
| * Return value : 0 - Ok | |
| * -1 - Error | |
| */ | |
| int AUP_Aed_destroy(void** stPtr); | |
| /**************************************************************************** | |
| * AUP_Aed_MemAllocate(...) | |
| * | |
| * This function sets Static Config params and does memory allocation | |
| * operation, will lose the dynamCfg values | |
| * | |
| * Input: | |
| * - stPtr : State Handler which was returned by _create | |
| * - pCfg : static configuration parameters | |
| * | |
| * Output: | |
| * | |
| * Return value : 0 - Ok | |
| * -1 - Error | |
| */ | |
| int AUP_Aed_memAllocate(void* stPtr, const Aed_StaticCfg* pCfg); | |
| /**************************************************************************** | |
| * AUP_Aed_init(...) | |
| * | |
| * This function resets (initialize) the VAD module and gets it prepared for | |
| * processing | |
| * | |
| * Input: | |
| * - stPtr : State Handler which has gone through create and | |
| * memAllocate | |
| * | |
| * Output: | |
| * | |
| * Return value : 0 - Ok | |
| * -1 - Error | |
| */ | |
| int AUP_Aed_init(void* stPtr); | |
| /**************************************************************************** | |
| * AUP_Aed_setDynamCfg(...) | |
| * | |
| * This function set dynamic (per-frame variable) configuration | |
| * | |
| * Input: | |
| * - stPtr : State Handler which has gone through create and | |
| * memAllocate | |
| * - pCfg : configuration content | |
| * | |
| * Output: | |
| * | |
| * Return value : 0 - Ok | |
| * -1 - Error | |
| */ | |
| int AUP_Aed_setDynamCfg(void* stPtr, const Aed_DynamCfg* pCfg); | |
| /**************************************************************************** | |
| * AUP_Aed_getStaticCfg(...) | |
| * | |
| * This function get static configuration status from VAD module | |
| * | |
| * Input: | |
| * - stPtr : State Handler which has gone through create and | |
| * memAllocate | |
| * | |
| * Output: | |
| * - pCfg : configuration content | |
| * | |
| * Return value : 0 - Ok | |
| * -1 - Error | |
| */ | |
| int AUP_Aed_getStaticCfg(const void* stPtr, Aed_StaticCfg* pCfg); | |
| /**************************************************************************** | |
| * AUP_Aed_getDynamCfg(...) | |
| * | |
| * This function get dynamic (per-frame variable) configuration status from | |
| * VAD module | |
| * | |
| * Input: | |
| * - stPtr : State Handler which has gone through create and | |
| * memAllocate | |
| * | |
| * Output: | |
| * - pCfg : configuration content | |
| * | |
| * Return value : 0 - Ok | |
| * -1 - Error | |
| */ | |
| int AUP_Aed_getDynamCfg(const void* stPtr, Aed_DynamCfg* pCfg); | |
| /**************************************************************************** | |
| * AUP_Aed_getAlgDelay(...) | |
| * | |
| * This function get algorithm delay from VAD module | |
| * | |
| * Input: | |
| * - stPtr : State Handler which has gone through create and | |
| * memAllocate | |
| * | |
| * Output: | |
| * - delayInFrms : algorithm delay in terms of frames | |
| * | |
| * Return value : 0 - Ok | |
| * -1 - Error | |
| */ | |
| int AUP_Aed_getAlgDelay(const void* stPtr, int* delayInFrms); | |
| /**************************************************************************** | |
| * AUP_Aed_proc(...) | |
| * | |
| * process a single frame | |
| * | |
| * Input: | |
| * - stPtr : State Handler which has gone through create and | |
| * memAllocate and reset | |
| * - pCtrl : per-frame variable control parameters | |
| * - pIn : input data stream | |
| * | |
| * Output: | |
| * - pOut : output data (mask, highband time-domain gain etc.) | |
| * | |
| * Return value : 0 - Ok | |
| * -1 - Error | |
| */ | |
| int AUP_Aed_proc(void* stPtr, const Aed_InputData* pIn, Aed_OutputData* pOut); | |
| } | |