CRI ADX  Last Updated: 2024-07-17 10:48 p
频谱分析仪

示例目录

/cri/pc/samples/criatomex/spectrum_analyzer


示例描述

对总线中流动的音频进行频率分析的示例。
使用::criAtomDspSpectra_Create函数创建频谱分析仪。
可以通过配置构件(::CriAtomDspSpectraConfig)指定分析频段数量。
要获取总线的声音,请注册::criAtomExAsr_SetBusFilterCallback回调函数。
每次执行音频处理时,都会从音频线程调用此回调函数。
用频谱分析仪分析总线声音的代码如下。
void main()
{
/* 创建频谱分析仪 */
app_obj->dsp_hn = criAtomDspSpectra_Create(NULL, NULL, 0);
/* 注册总线滤波器回调 */
/* 备注)在下面的示例中,对通过总线7的信号执行分析。 */
criAtomExAsr_SetBusFilterCallback(7, app_filter_callback, NULL, app_obj);
for (;;) {
/* 获取频谱信息 */
spectra_ptr = criAtomDspSpectra_GetLevels(app_obj->dsp_hn);
for (i = 0; i < NUM_BANDS; i++) {
/* 将值转换为分贝值 */
decibel = 20.0f * log10f(spectra_ptr[i]);
/* 选择显示范围 */
/* 在下面的示例中,显示-96dB以上的值 */
graph[i] = (CriSint32)(decibel + 96.0f);
}
Sleep(10);
}
}
/* 滤波器回调 */
static void app_filter_callback(void *obj, CriAtomPcmFormat format,
CriSint32 num_channels, CriSint32 num_samples, void *data[])
{
AppObj *app_obj = (AppObj*)obj;
/* 除音频播放期间以外,不做任何操作 */
if ((num_channels <= 0) || (num_samples <= 0)) {
criAtomDspSpectra_Reset(app_obj->dsp_hn);
return;
}
/* 频谱分析 */
criAtomDspSpectra_Process(app_obj->dsp_hn, num_channels, num_samples, (CriFloat32 **)data);
}
void criAtomExAsr_SetBusFilterCallback(CriSint32 bus_no, CriAtomExAsrBusFilterCbFunc pre_func, CriAtomExAsrBusFilterCbFunc post_func, void *obj)
void criAtomDspSpectra_Reset(CriAtomDspSpectraHn spectra)
Reset spectrum analyzer
void criAtomDspSpectra_Process(CriAtomDspSpectraHn spectra, CriUint32 num_channels, CriUint32 num_samples, CriFloat32 *pcm[])
Spectrum analysis
CriAtomDspSpectraHn criAtomDspSpectra_Create(const CriAtomDspSpectraConfig *config, void *work, CriSint32 work_size)
Spectrum analyzer creation
const CriFloat32 * criAtomDspSpectra_GetLevels(CriAtomDspSpectraHn spectra)
Acquire spectral analysis results
enum CriAtomPcmFormatTag CriAtomPcmFormat
PCM format


示例使用的数据中AtomCraft项目的目录

/cri/tools/criatomex/examples/tutorial_data_for_runtime