在音频处理中,DEC 和 ENC 是两个核心概念:

DEC - Decoder(解码器)

  • 功能:将压缩的音频格式还原为原始PCM数据

  • 方向:压缩 → 原始

  • 使用场景

    • 播放音乐文件(MP3 → PCM → DAC)

    • 蓝牙接收音频数据(SBC → PCM → 播放)

    • 网络音频流解码

ENC - Encoder(编码器)

  • 功能:将原始PCM数据压缩为特定格式

  • 方向:原始 → 压缩

  • 使用场景

    • 录音保存(PCM → MP3 存储)

    • 蓝牙发送音频(PCM → SBC 传输)

    • 语音传输(PCM → Opus 网络传输)

配置代码中的实际应用

// ========== 编码器(ENC)==========
// 将PCM音频压缩为其他格式
#define CONFIG_PCM_ENC_ENABLE        // PCM编码(实际是封装,非压缩)
#define CONFIG_OPUS_ENC_ENABLE       // Opus编码(语音通话/传输)
#define CONFIG_SBC_ENC_ENABLE        // SBC编码(蓝牙发送)
#define CONFIG_AAC_ENC_ENABLE        // AAC编码(高质量音频)
#define CONFIG_MP3_ENC_ENABLE        // MP3编码(音乐存储)

// ========== 解码器(DEC)==========
// 将压缩格式还原为PCM
#define CONFIG_AAC_DEC_ENABLE        // AAC解码(播放AAC文件)
#define CONFIG_SBC_DEC_ENABLE        // SBC解码(蓝牙接收)
#define CONFIG_MP3_DEC_ENABLE        // MP3解码(播放MP3)
#define CONFIG_OPUS_DEC_ENABLE       // Opus解码(接收语音)

数据处理流程对比

录音/发送流程(ENC方向)

麦克风 → ADC → PCM原始数据 → ENC编码器 → 压缩格式
                                          ↓
                                      存储/传输

播放/接收流程(DEC方向)

存储/传输 → 压缩格式 → DEC解码器 → PCM原始数据 → DAC → 扬声器

具体场景示例

场景1:蓝牙音乐播放

// 手机发送SBC编码的音乐
手机:PCM → SBC_ENC → 蓝牙传输
设备:蓝牙接收 → SBC_DEC → PCM → DAC → 扬声器

需要配置:
#define CONFIG_SBC_DEC_ENABLE  // 设备需要SBC解码

场景2:录音保存为MP3

// 麦克风录音保存
麦克风 → ADC → PCM → MP3_ENC → 存储为MP3文件

需要配置:
#define CONFIG_MP3_ENC_ENABLE  // 需要MP3编码

场景3:网络语音通话

// 双向语音通信
A端说话:PCM → Opus_ENC → 网络传输
B端收听:网络 → Opus_DEC → PCM → 播放

// B端回应:PCM → Opus_ENC → 网络传输
// A端收听:网络 → Opus_DEC → PCM → 播放

需要配置:
#define CONFIG_OPUS_ENC_ENABLE  // 发送需要编码
#define CONFIG_OPUS_DEC_ENABLE  // 接收需要解码

编解码器类型说明

编解码器 ENC用途 DEC用途 特点
PCM 原始数据封装 原始数据提取 无压缩,高质量,体积大
SBC 蓝牙发送编码 蓝牙接收解码 蓝牙标准,音质一般
AAC 高质量录音 音乐播放 高效率,音质好
MP3 音乐录制 音乐播放 通用,兼容性好
Opus 语音通话 语音接收 低延迟,适合实时
CVSD 蓝牙通话发送 蓝牙通话接收 传统蓝牙通话
mSBC 宽带语音发送 宽带语音接收 高质量蓝牙通话

配置建议

1. 按需启用

// 如果只是播放音乐
#define CONFIG_MP3_DEC_ENABLE
#define CONFIG_AAC_DEC_ENABLE
#define CONFIG_SBC_DEC_ENABLE  // 蓝牙音乐

// 如果需要录音
#define CONFIG_MP3_ENC_ENABLE
#define CONFIG_OPUS_ENC_ENABLE  // 如果用于语音传输

// 如果需要双向通话
#define CONFIG_OPUS_ENC_ENABLE
#define CONFIG_OPUS_DEC_ENABLE

2. 内存考量

  • 编码器通常比解码器占用更多资源

  • 每个编解码器都需要额外的ROM/RAM空间

  • 只启用真正需要的编解码器

3. 性能平衡

// 高质量音乐:AAC
#define CONFIG_AAC_DEC_ENABLE
#define CONFIG_AAC_ENC_ENABLE

// 实时通话:Opus
#define CONFIG_OPUS_ENC_ENABLE
#define CONFIG_OPUS_DEC_ENABLE

// 兼容性:MP3
#define CONFIG_MP3_DEC_ENABLE
#define CONFIG_MP3_ENC_ENABLE

// 蓝牙必须:SBC
#define CONFIG_SBC_DEC_ENABLE
#define CONFIG_SBC_ENC_ENABLE

常见误解

  1. PCM不是压缩格式,PCM编解码器只是数据格式转换

  2. ENC和DEC通常成对出现,但根据应用可能只需要一个

  3. 编码质量 ≠ 解码质量,编码是压缩,解码是还原

总结

  • ENC = 压缩/发送 = 减小体积便于存储/传输

  • DEC = 解压/接收 = 还原音频用于播放

注意:启用过多的编解码器可能会增加代码空间和内存占用,因此需要根据实际需求进行选择。

一、音频开关

#define CONFIG_AUDIO_ENABLE // 音频系统总开关


二、灯光

#define CONFIG_SPECTRUM_FFT_EFFECT_ENABLE // 频谱分析/灯光效果


启用音频频谱分析功能,通常用于视觉特效(如RGB灯光随音乐跳动)。
音频信号 → ADC采样 → PCM数据 → FFT变换 → 频域数据 → 提取各频段能量 → 控制灯光/显示
             ↓
          实时分析
             ↓
          可视化效果
分组说明:

一、通用音频编解码器(音乐播放和录音)

MP3: 最常见的音频格式
#define CONFIG_MP3_DEC_ENABLE // MP3解码(播放MP3文件)
#define CONFIG_MP3_ENC_ENABLE // MP3编码(录制MP3)

AAC: 高级音频编码,常用于高质量音频
#define CONFIG_AAC_DEC_ENABLE // AAC解码(播放AAC文件,如m4a)
#define CONFIG_AAC_ENC_ENABLE // AAC编码(录制AAC)

WMA: Windows Media Audio
#define CONFIG_WMA_DEC_ENABLE // WMA解码(播放WMA文件)

M4A: 通常使用AAC编码,所以可能和AAC有关
#define CONFIG_M4A_DEC_ENABLE // M4A容器格式解码(可能基于AAC)
#define CONFIG_NEW_M4A_DEC_ENABLE // 新的M4A解码器

WAV: 无损音频格式,实际上就是PCM加上一个文件头
#define CONFIG_WAV_DEC_ENABLE // WAV文件解码(播放WAV)
#define CONFIG_WAV_ENC_ENABLE // WAV文件编码(录制WAV)

FLAC: 无损音频压缩格式
#define CONFIG_FLAC_DEC_ENABLE // FLAC解码(播放FLAC文件)

APE: 另一种无损音频压缩格式
#define CONFIG_APE_DEC_ENABLE // APE解码(播放APE文件)

AMR: 自适应多速率,主要用于语音
#define CONFIG_AMR_DEC_ENABLE // AMR解码(播放AMR文件)
#define CONFIG_AMR_ENC_ENABLE // AMR编码(录制AMR,用于语音记录)

ADPCM: 自适应差分脉冲编码调制,一种简单的有损压缩
#define CONFIG_ADPCM_DEC_ENABLE // ADPCM解码
#define CONFIG_ADPCM_ENC_ENABLE // ADPCM编码

二、语音编解码器(主要用于通话和语音识别)

Opus: 一种有损音频编码格式,适用于网络语音传输
#define CONFIG_OPUS_DEC_ENABLE // Opus解码
#define CONFIG_OPUS_ENC_ENABLE // Opus编码

Speex: 专注于语音的编解码器,也适用于网络
#define CONFIG_SPEEX_DEC_ENABLE // Speex解码
#define CONFIG_SPEEX_ENC_ENABLE // Speex编码

CVSD: 连续可变斜率增量调制,用于蓝牙语音(SCO)
#define CONFIG_CVSD_DEC_ENABLE // CVSD解码(蓝牙通话接收)
#define CONFIG_CVSD_ENC_ENABLE // CVSD编码(蓝牙通话发送)

mSBC: 宽带语音编解码器,用于蓝牙高质量语音通话(SCO)
#define CONFIG_MSBC_DEC_ENABLE // mSBC解码
#define CONFIG_MSBC_ENC_ENABLE // mSBC编码

SBC: 子带编码,蓝牙A2DP音频传输的标准编码
#define CONFIG_SBC_DEC_ENABLE // SBC解码(蓝牙音乐接收)
#define CONFIG_SBC_ENC_ENABLE // SBC编码(蓝牙音乐发送)

VAD: 语音活动检测,用于检测是否有语音,以便进行静音压缩等
#define CONFIG_VAD_ENC_ENABLE // VAD编码(不是编解码器,而是辅助功能)

AEC: 回声消除,用于通话中消除回声
#define CONFIG_AEC_ENC_ENABLE // AEC编码(实际上是回声消除处理)

DNS: 可能是指降噪(Denoise)
#define CONFIG_DNS_ENC_ENABLE // 降噪处理

三、特定功能或虚拟设备

VIRTUAL_DEV: 虚拟设备编码
#define CONFIG_VIRTUAL_DEV_ENC_ENABLE // 可能是用于虚拟声卡或录音设备

DTS: 数字影院系统,一种多声道音频格式
#define CONFIG_DTS_DEC_ENABLE // DTS解码(播放DTS音频)

JLA: 可能是项目特定的编解码器,或者是某个算法的缩写
#define CONFIG_JLA_ENC_ENABLE // JLA编码
#define CONFIG_JLA_DEC_ENABLE // JLA解码

四、PCM(原始音频数据)
#define CONFIG_PCM_DEC_ENABLE // PCM解码(实际上就是读取PCM数据)
#define CONFIG_PCM_ENC_ENABLE // PCM编码(实际上就是保存PCM数据)

总结:这些宏定义涵盖了非常广泛的音频编解码器,从通用的音乐格式到语音通话,再到一些特定功能。
这样的配置通常出现在一个功能丰富的音频处理芯片或嵌入式音频解决方案中,例如智能音箱、录音笔、
蓝牙音频设备等。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐