Skip to main content

BP1048音频处理文档

一、概述

本文档详细介绍BP1048芯片的音频处理流程,包括音频输入、处理和输出等各个环节。主要涵盖以下几个模块:

  • 麦克风输入处理
  • 音乐线性输入处理
  • 蓝牙音频输入处理
  • 音频输出处理

现在发现eq set是#ifdef CFG_FUNC_MUSIC_EQ_MODE_EN

/*


* EQ Mode调节函数


*/

void EqModeSet(uint8_t EqMode) 然后通过分析communication.c中的LoadEqMode函数和搜索相关文件,确认EQ参数存储在eq_params.c文件中,该文件定义了多种EQ风格的参数数组(如Classical、Vocal_Booster等),每个数组包含112字节的参数数据。这些参数通过buff指针传入LoadEqMode函数进行处理。

最后发现是在Communication_Effect_Config这里配置eq

从communication.c代码分析,EQ配置主要通过Communication_Effect_Config函数处理,该函数根据Control参数选择不同的处理分支。LoadEqMode调用此函数时,会传入特定的Control值和EQ参数缓冲区。建议查看Control值为0x80(对应Communication_Effect_0x80)和0x81-0xFE范围的处理逻辑,这些部分可能包含EQ频点增益的直接设置接口。可以进一步分析Communication_Effect_After_0x80函数的实现细节。

搜索communication.c文件中与EQ配置相关的函数实现,特别是Communication_Effect_0x80和Communication_Effect_After_0x80函数。

通过分析communication.c文件,EQ配置主要通过Communication_Effect_Config函数处理,当Control值为0x80时调用Communication_Effect_0x80函数,当Control值在0x81-0xFE范围时调用Communication_Effect_After_0x80函数。具体EQ参数配置在Communication_Effect_EQ函数中实现,该函数处理10个频段的EQ参数(enable/type/f0/Q/gain),并通过AudioEffectEQInit和AudioEffectEQPregainConfig等函数进行实际配置。

二、音频核心模块(audio_core_api.h)

2.1 数据类型定义

类型定义描述
AudioCoreDataGetFunc从音频源获取数据的函数指针,接收缓冲区指针和样本数量,返回获取到的样本数量
AudioCoreDataLenGetFunc获取音频源数据长度的函数指针,返回音频源数据的长度
AudioCoreDataSetFunc将数据设置到音频汇的函数指针,接收缓冲区指针和样本数量,返回设置成功的样本数量
AudioCoreDataSpaceLenSetFunc设置音频汇可用空间的函数指针,返回设置的可用空间大小
AudioCoreProcessFunc音效处理的主函数指针,接收一个通用指针作为参数

2.2 音频源枚举

枚举值描述
MIC_SOURCE_NUM麦克风输入通道,音效预处理必须为0
APP_SOURCE_NUM应用主要音源通道,可配音效
REMIND_SOURCE_NUM提示音使用固定混音通道,无音效
PLAYBACK_SOURCE_NUM录音回放通道,无音效(需启用CFG_FUNC_RECORDER_EN)
TWS_SOURCE_NUMTWS相关通道(需启用BT_TWS_SUPPORT)
AUDIO_CORE_SOURCE_MAX_MUN支持的音频源总数量

2.3 音频汇枚举

枚举值描述
AUDIO_DAC0_SINK_NUM主音频输出通道
AUDIO_RECORDER_SINK_NUM录音专用通道(需启用CFG_FUNC_RECORDER_EN)
AUDIO_HF_SCO_SINK_NUM蓝牙SCO发送数据通道
AUDIO_DACX_SINK_NUMDACX通道(需启用CFG_RES_AUDIO_DACX_EN)
AUDIO_I2SOUT_SINK_NUMI2S输出通道(需启用CFG_RES_AUDIO_I2SOUT_EN)
USB_AUDIO_SINK_NUMUSB音频输出通道(需启用CFG_APP_USB_AUDIO_MODE_EN)
AUDIO_CORE_SINK_MAX_NUM支持的音频汇总数量

三、音频处理流程

3.1 数据流向

Input Sources (ADC/BT/USB等)

Audio Core Processing

Effect Processing Chain

Output Sinks (DAC/I2S等)

3.2 音频效果配置

app_config.h中配置音频效果:

// 音频效果开关
#define CFG_AUDIO_EFFECT_MUSIC_NOISE_SUPPRESSOR_EN (1)
#define CFG_AUDIO_EFFECT_MUSIC_3D_EN (1)
#define CFG_AUDIO_EFFECT_MUSIC_VIRTUAL_BASS_EN (1)

// 音频通路配置
#define CFG_RES_AUDIO_DAC0_EN
#define CFG_RES_AUDIO_DACX_EN
#define CFG_RES_AUDIO_I2SOUT_EN

四、关键函数接口

4.1 音频源控制函数

函数名功能参数返回值
AudioCoreSourceFreqAdjustEnable使能系统音频分频微调AsyncIndex: 异步音频源混音信道编号<br>LevelLow: 低水位采样点值<br>LevelHigh: 高水位采样点值
AudioCoreSourceEnable启用指定音频源Index: 音频源编号
AudioCoreSourceMute静音指定音频源Index: 音频源编号<br>IsLeftMute: 左声道是否静音<br>IsRightMute: 右声道是否静音
AudioCoreSourceVolSet设置音频源音量Index: 音频源编号<br>LeftVol: 左声道音量<br>RightVol: 右声道音量

4.2 音频汇控制函数

函数名功能参数返回值
AudioCoreSinkEnable启用指定音频汇Index: 音频汇编号
AudioCoreSinkMute静音指定音频汇Index: 音频汇编号<br>IsLeftMute: 左声道是否静音<br>IsRightMute: 右声道是否静音
AudioCoreSinkVolSet设置音频汇音量Index: 音频汇编号<br>LeftVol: 左声道音量<br>RightVol: 右声道音量

五、音频资源初始化

main_task.c中进行音频资源初始化:

void AudioResInit(void)
{
// 初始化音频资源
// 配置DMA
// 启动DAC/ADC等
}

六、相关文件说明

  • audio_core_api.c: 音频核心处理实现
  • audio_core_api.h: 音频核心处理实现头文件
  • audio_effect.c: 音效处理链实现
  • main_task.c: 音频资源管理
  • app_config.h: 音频功能配置

音频处理过程通过DMA传输和中断处理来保证实时性,音频效果可通过配置文件和在线调音来调整参数。