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_NUM | TWS相关通道(需启用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_NUM | DACX通道(需启用CFG_RES_AUDIO_DACX_EN) |
AUDIO_I2SOUT_SINK_NUM | I2S输出通道(需启用CFG_RES_AUDIO_I2SOUT_EN) |
USB_AUDIO_SINK_NUM | USB音频输出通道(需启用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传输和中断处理来保证实时性,音频效果可通过配置文件和在线调音来调整参数。