2.3. 应用示例¶
2.3.2. 设置输出声道和输出端口¶
输出声道模式详见 \ref GX_AOUT_CH_MODE
gx_hal_aout_route_set_channel_mode(GX_HAL_AOUT_CH_MODE_STEREO);
输出端口模式详见 \ref GX_AOUT_OUT_PORT
gx_hal_aout_set_out_source(GX_HAL_AOUT_OUT_PORT_LODAC, GX_HAL_AOUT_OUT_SRC_AFTER_EQ_DRC); //选择输出端口LoDAC
2.3.3. 设置数据类型和数据地址¶
配置采样率、通道数、数据存放格式、大小端、数据位宽、存储空间
GX_AOUT_PCM pcm = {0};
pcm.left_buffer = ((unsigned int)addr & 0x0fffffff); //设置数据地址时,需将虚拟地址转化为物理地址
pcm.right_buffer = ((unsigned int)addr+offset & 0x0fffffff); //交织数据右声道地址配置为0
gx_aout_route_set_pcm(&pcm);
结构体中其他内容见 \ref GX_AOUT_PCM
2.3.4. 淡入淡出¶
//淡入速度配置,淡入速度为每持续2^4,即每16个样点音量下降1dB
gx_aout_route_set_fade_in_speed(4);
//淡出速度同理
gx_aout_route_set_fade_out_speed(4);
//开启淡入淡出使能
gx_aout_route_set_fade(1);
2.3.5. 播放配置¶
GX_AOUT_FRAME frame = {0};
frame.saddr = 0; //播放数据的起始地址;该地址为相对于物理地址的相对地址
frame.eaddr = frame.saddr + period_size - 1; //播放数据的结束地址
gx_aout_route_push_frame(&frame);
2.3.6. 应用中断回调函数¶
注册中断回调函数
GX_AOUT_CB cb = {0};
cb.newframe_cb_func = _aout_new_frame_callback; //注册帧锁存中断处理函数
cb.fifo_empty_cb_func = _aout_fifo_empty_callback; //注册FIFO空中断处理函数
cb.fade_done_cb_func = _aout_fade_done_callback; //注册淡入淡出完成中断处理函数
ret = gx_aout_set_cb(&cb);
中断回调函数处理
依靠帧锁存中断,可继续配置新的播放帧数据
依靠FIFO为空中断,可以控制播放结束相关操作
在淡入淡出完成中断,可以感知当前播放状态
2.3.7. 播放停止和恢复¶
播放停止
gx_aout_route_request_stop(); //申请播放停止,阻塞接口;申请成功才能正确关闭
gx_aout_route_enable(0); //停止播放功能
此时播放器处于暂停状态,播放buffer的起始地址和大小仍然有效
播放恢复
gx_aout_route_enable(1); //开启播放功能
...
gx_aout_route_push_frame(&frame); //推出播放帧
2.3.8. 播放结束¶
gx_aout_exit(); //销毁播放