默认 sdk 如果打开了混响的开关及硬件 eq,我们混响的数据是经过 EQ 处理的。如果需要不经过硬件 EQ 处
理需要以下处理:开启 EQ 的中断处理函数,将混响数据输出的函数放进 EQ 的中断中。
1、在混响同步采样率处理的函数里添加初始化混响 EQ 的代码。
a、audio_stream.h 文件中修改宏定义
#define AUDIO_EFFECT_ECHO (AUDIO_EFFECT_HW_EQ)
b、 在 echo_api.c 文件中的 void echo_dac_adc_sr_sync(void)函数中添加以下内容(主要是灰色部分):
AUDIO_STREAM *echo_stream_io = NULL;
void echo_dac_adc_sr_sync(void)
{
if (!echo_var.run_flag) {
return;
}
u16 ladc_sr = ladc_get_samplerate();
u16 dac_sr = dac_get_samplerate();
printf(“echo_sr_sync, ad_sr = %d, da_sr = %d\n”, ladc_sr, dac_sr);
if (ladc_sr != dac_sr) {
ladc_set_samplerate(dac_sr);
}
#if (EQ_RUN_SEL == EQ_RUN_HW)
AUDIO_STREAM_PARAM stream_param;
stream_param.ef = AUDIO_EFFECT_ECHO;
stream_param.ch = 2;
stream_param.sr = dac_sr;
echo_stream_io = audio_stream_init(&stream_param, NULL);
if (echo_stream_io) {
echo_stream_io->clear(echo_stream_io->priv);
echo_stream_io->set_sr(echo_stream_io->priv, dac_get_samplerate(), 1);
}
#endif
}
2、打开 EQ 的中断
3、EQ 中断函数如下(将混响数据处理放进 EQ 的中断回调函数中)
#include “echo_api.h”
void eq_isr(s16 *outbuf, u16 npoint)
{
//printf(“e”); //若发现程序在运行过程发现没有混响,可打开打印若没有就是因为 EQ 被关掉了
#if ECHO_EN
echo_output_mix_dac(outbuf, DAC_BUF_LEN);
#endif
}
4、注释掉原来 sdk 在 dac.c 中 DAC 中断回调 dac_isr_cb 中的混响数据处理函数:
杰里之混响声音不经过硬件 EQ 处理方法篇
最新推荐文章于 2022-08-20 08:31:52 发布