2.3. 应用示例

2.3.1. 初始化

// 初始化接口
gx_aout_init()

其中已包含时钟开启、中断注册等操作,需要关注返回值

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(); //销毁播放