61.2. SMIX_DAO
61.2.1. 概述
该示例工程展示了使用SMIX(Sound Mixer)音频混音器配合DAO(Digital Audio Output)进行音频播放和音量控制的功能。 SMIX可以对不同采样率的音频进行采样率转换和混音处理,然后通过DAO输出差分PWM信号驱动CLASSD功放芯片。 该例程支持通过GPIO按键控制播放的暂停和恢复,以及通过按键切换SMIX混音器的增益。
61.2.2. 工作流程
根据目标采样率,配置系统音频时钟MCLK
初始化I2S外设和DAO外设:
配置I2S外设,包括音频数据格式(位宽、通道数、采样率)
使能I2S DMA发送请求
配置DAO外设
配置GPIO按键中断,用于控制音频播放的暂停、恢复和增益切换:
设置按键中断触发条件
配置按键防抖处理
使能GPIO中断(KEY1用于暂停/恢复,KEY2用于增益切换)
配置SMIX音频混音器:
配置源通道DMA,将音频数据从内存传输到SMIX源通道
配置目标通道DMA,将SMIX处理后的数据传输到I2S发送FIFO
配置突发传输模式(单声道:DMA_NUM_TRANSFER_PER_BURST_1T;立体声:DMA_NUM_TRANSFER_PER_BURST_2T)
设置采样率转换参数(支持1x、2x、3x、4x、6x、8x、12x倍率)
配置混音器增益和通道掩码
使能对应通道
启动I2S外设和DAO外设:
软件重置I2S外设和DAO外设
启动I2S外设和DAO外设
SMIX自动进行采样率转换和混音处理
SMIX DMA将处理后的音频数据传输到I2S的TX FIFO,DAO将I2S数据转换后输出
SMIX DMA完成后停止I2S外设、DAO外设和SMIX通道
支持通过KEY1按键暂停/恢复播放
支持通过KEY2按键切换SMIX混音器增益
61.2.3. 音频配置
音频格式配置
支持多种输入采样率(8kHz、16kHz等)
支持16位和32位音频深度
支持单声道(须支持HPM_IP_FEATURE_DAO_AUDIO_MONO_FIX)和立体声模式
根据编译选项选择音频数据源:
单声道模式:
audio_mono.h立体声模式:
audio_stereo.h
SMIX配置
支持多种采样率转换倍率:1x、2x、3x、4x、6x、8x、12x
支持多种增益调节:-12dB、-6dB、0dB、+6dB
声道配置
channel_slot_mask参数值
左声道:0x1
右声道:0x2
立体声:0x3
DAO必须配置为双声道模式(channel_slot_mask = 3),可通过配置I2S的声道模式,实现播放单双声道
需要支持HPM_IP_FEATURE_DAO_AUDIO_MONO_FIX
需要将I2S的channel_slot_mask设置为单声道, channel_slot_mask = 0x1, DAO的左声道播放声音, channel_slot_mask = 0x2, DAO的右声道播放声音。
如果不支持HPM_IP_FEATURE_DAO_AUDIO_MONO_FIX,可以单声道音频数据复制后形成立体声音频源,使用播放立体声音频方式播放。
DAO实现播放立体声音频源,设置I2S的channel_slot_mask = 0x3, DAO的左右声道同时播放声音。
61.2.4. 硬件设置
61.2.5. 已知问题
使用DAO播放某些音频时可能产生噪声
板上按键,受机械抖动影响,可能出现多次触发GPIO中断的情况
61.2.6. 运行现象
当工程正确运行后,可以观察到以下现象:
串口终端输出信息:
Sound mixer change DAO volume example Press Key1 will pause/resume audio play, Press Key2 will change audio play gain. -- Select audio play action -- 1 - audio play
选择选项1后:
串口显示”mixer play one sound”
显示输入和输出采样率信息
音频设备开始播放示例音频(初始增益为-12dB)
播放过程中的按键控制:
按下KEY1按键可以暂停播放,再次按下KEY1可以恢复播放
按下KEY2按键可以在-12dB和0dB之间切换SMIX混音器增益
串口会显示相应的控制信息:
“dao_i2s pause” - 暂停播放
“dao_i2s resume” - 恢复播放
“set SMIX gain to 0dB” - 设置增益为0dB
“set SMIX gain to -12dB” - 设置增益为-12dB