CI130X SDK API手册  2.2.0
本手册用于描述CI130X SDK各个组件和驱动API
宏定义 | 枚举 | 函数 | 变量
audio_play_process.c 文件参考

播放器 更多...

#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "sdk_default_config.h"
#include "audio_play_process.h"
#include "audio_play_device.h"
#include "audio_play_api.h"
#include "audio_play_decoder.h"
#include "get_play_data.h"
#include "debug_time_consuming.h"
#include "ci130x_system.h"
#include "ci_log.h"
#include "parse_m4a_atom_containers_port.h"
#include "parse_m4a_atom_containers.h"
#include "adpcmdec.h"
#include "ci_system_info.h"
#include "ci130x_core_misc.h"
#include "codec_manager.h"
#include "codec_manage_outside_port.h"
#include "romlib_runtime.h"
#include "FreeRTOS.h"
#include "task.h"
#include "status_share.h"
#include "ci130x_gpio.h"

宏定义

#define READBUF_SIZE   (576U)
 
#define MAX_OUTPUTBUFF_SIZE   (1152U)
 
#define MIN_OUTPUTBUFF_SIZE   (576U)
 
#define PCM_BUF_COUNT   (4)
 
#define MIN_VALID_DATA_SIZE   (20U)
 
#define TIMEOUT_CNT   (40000)
 
#define M4A_HEAD_SIZE   (GET_PLAY_DATA_BUFF_SIZE*20)
 

枚举

enum  {
  AUDIO_PLAY_FLAG_REL_END = 0,
  AUDIO_PLAY_FLAG_WILL_END = 1,
  AUDIO_PLAY_FLAG_DATA_END = 2,
  AUDIO_PLAY_FLAG_RESTART = 0xff
}
 

函数

static int32_t task_audio_play_init_step (void)
 初始化播放任务所需资源 更多...
 
static uint16_t * get_pcm_buff_addr (void)
 获取最小单位的下一个pcm buff地址 更多...
 
static uint16_t * get_next_pcm_buff (uint32_t num)
 获取PCM下一个缓冲区地址 更多...
 
static int32_t find_decoder_ops (const char *decoder_name)
 检索解码器 更多...
 
static void para_recover_default (void)
 发送静音数据 更多...
 
static int32_t cheak_play_event (void)
 检查是否有播放暂停/停止事件 更多...
 
static void free_bak_data (void)
 释放备份数据区 更多...
 
static int32_t audio_play_decode_continue (void)
 数据处理调用解码器解码递交声卡驱动 更多...
 
static void audio_play_playing_deal (uint32_t uxBits)
 播放事件处理 更多...
 
static int32_t audio_play_start (void)
 启动播放 更多...
 
static int32_t send_get_data_msg (audio_play_msg_t *play_msg)
 向数据获取task发送请求数据消息 更多...
 
uint32_t get_audio_play_state (void)
 返回播放器task状态 更多...
 
void get_audio_format_info (audio_format_info_t *format)
 返回当前音频信息 更多...
 
int32_t fastset_audio_end_callback (CALLBACK_END_PLAY callback)
 快速设置end回调函数 更多...
 
uint32_t get_decode_sync_word_offset (void)
 返回当前播放位置 更多...
 
void clean_decode_sync_word_offset (void)
 清理当前播放位置 更多...
 
void set_play_will_finish_threshold_data_size (int size)
 设置播放data发送will finsh信号阈值 更多...
 
void do_call_callback_fun (void)
 调用用户回调 更多...
 
void registe_decoder_ops (audio_play_decoder_ops_t *registe_ops)
 注册解码器到解码器链表 更多...
 
int32_t audio_play_init (void)
 初始化播放任务 更多...
 
void set_play_speed (float play_speed)
 设置播放倍速 更多...
 
void task_audio_play (void *pvParameters)
 播放器调度任务 更多...
 

变量

audio_play_os_event_group_t audio_play_cmd_event_group = NULL
 
audio_play_os_queue_t audio_play_queue = NULL
 
audio_play_os_task_t audio_play_task_handle
 
int sg_play_device_index
 
static audio_play_state_t audio_play_state = AUDIO_PLAY_STATE_IDLE
 
static void * decoder_ops = NULL
 
static audio_play_decoder_ops_tcurr_decoder_ops = NULL
 
static audio_play_decoder_ops_thistory_decoder_ops = NULL
 
static CALLBACK_END_PLAY g_end_paly_callback = NULL
 
static bool end_paly_callback_flag = false
 
static int32_t play_end_cb_flag = AUDIO_PLAY_CB_STATE_UNKNOWN_ERR
 
audio_format_info_t audio_format_info
 播音配置参数表 更多...
 
static uint32_t audio_decode_offset = 0
 
static uint32_t audio_read_offset = 0
 
static uint32_t audio_play_output_size = 0
 
static uint16_t * pcm_buf_base
 
static uint32_t pcm_buf_wp = 0
 
static uint16_t * decbuf = NULL
 
uint8_t * wav_buf = NULL
 
static uint8_t * data_in_buffer
 
static uint32_t play_end_flag = AUDIO_PLAY_FLAG_RESTART
 
static uint32_t no_use_size
 
static uint32_t temp_wave_read_size = 0
 
static uint32_t valid_data = (576U)
 
static bool valid_flag = false
 
static uint32_t receive_timeout_ticks = 2
 
static uint16_t pcm_buf_no_cache [(1152U)]
 
m4a_file_info_t m4a_file_info = {0}
 
uint8_t * bak_data = NULL
 
mem_file_tbak_data_fp = NULL
 
void * decoder_config_arg = NULL
 
static int play_will_finish_threshold_ms = 0
 
static int play_will_finish_threshold_data_size = 0
 
static int play_pcm_size = 0
 
static int play_will_finish_curr_play_size = 0
 
static bool play_will_finish = false
 

详细描述

播放器

版本
2.8.3
日期
2019-03-15 V2.8.3 增加功能提供音频播放达到一个临界值后释放一个信号回调函数 V2.8.2 解决使用sd卡播放非根目录文件文件读取异常 V2.8.1 解决IMAADPCM格式输出的size非16倍数导致iisdma无法正常输出(V2.6.0版本引入) V2.8.0 播放修改提示音解码器,增加支持兼容CI_FLAC文件格式,WAV文件支持8K采样率 V2.7.0 播放修改提示音解码器,支持兼容标准48头WAV、IMAADPCM、CI_MP3、旧版CIADPCM文件格式 修复AAC解码器暂停继续上下文错误的问题(V2.6.0版本引入) V2.6.1 修复标准IMA ADPCM格式解码器输出单位块size值不正确导致声卡获取的size出错问题 V2.6.0 增加标准IMA ADPCM格式的命令词提示音 V2.5.3 播放响应速度优化 V2.5.2 声卡抗POP策略更新优化 V2.5.1 增加设备接口调音量抗POP策略,主流程更新优化暂停响应速度 V2.5.0 增加播放TTS后处理功能,目前支持倍速播放 V2.4.7 修复一些解码器移植跳过错误帧配置问题 V2.4.6 修复在数据阻塞时,处理停止事件无法快速响应 V2.4.5 针对m4a头解析使用moov的size来动态申请内存解析 V2.4.4 增加双声道音频混音到单声道 V2.4.3 针对ci flash特性优化播放adpcm V2.4.2 修复m4a atom解析错误导致流程出错 V2.4.1 部分错误处理机制完善,播放器控制返回出口提高代码易维护性 V2.4.0 增加文件头解析逻辑,后续可以直接调用播放不需要预先声明文件类型 V2.3.1 修复部分错误 V2.3.0 播放器组件添加OS移植层,方便针对不同OS移植 V2.2.0 抽象解码器框架到audio_play_decoder.c中,使用注册的方式添加解码器 V2.1.1 根据解码器进度记录播放位置,以帮助精确暂停恢复,同时保证恢复时mp3解码器信息连续不丢失 V2.1.0 api接口移动至audio_play_api.h、硬件相关配置移动到audio_play_device.h V2.0.2 数据获取彻底解耦,sd卡挂载、打开、保存、关闭均交给get_play_data.c V2.0.1 硬件iis、codec解耦,采用最新声卡驱动,单声道处理改用硬件方式 V2.0.0 添加网络mp3播放功能,进一步将数据获取与解码器解耦 V1.1.0 将audio date获取读取部分逻辑向get_play_data.c转移,添加本地mp3打断功能 V1.0.0 音频播放器

宏定义说明

◆ M4A_HEAD_SIZE

#define M4A_HEAD_SIZE   (GET_PLAY_DATA_BUFF_SIZE*20)

◆ MAX_OUTPUTBUFF_SIZE

#define MAX_OUTPUTBUFF_SIZE   (1152U)

◆ MIN_OUTPUTBUFF_SIZE

#define MIN_OUTPUTBUFF_SIZE   (576U)

◆ MIN_VALID_DATA_SIZE

#define MIN_VALID_DATA_SIZE   (20U)

◆ PCM_BUF_COUNT

#define PCM_BUF_COUNT   (4)

◆ READBUF_SIZE

#define READBUF_SIZE   (576U)

◆ TIMEOUT_CNT

#define TIMEOUT_CNT   (40000)

枚举类型说明

◆ anonymous enum

anonymous enum
枚举值
AUDIO_PLAY_FLAG_REL_END 
AUDIO_PLAY_FLAG_WILL_END 
AUDIO_PLAY_FLAG_DATA_END 
AUDIO_PLAY_FLAG_RESTART 

函数说明

◆ audio_play_decode_continue()

static int32_t audio_play_decode_continue ( void  )
static

数据处理调用解码器解码递交声卡驱动

返回值
RETURN_OK解码正常
RETURN_ERR解码失败

◆ audio_play_init()

int32_t audio_play_init ( void  )

初始化播放任务

注解
this init before task run,maybe other task used these resource
返回值
RETURN_OK初始化成功
RETURN_ERR初始化失败

◆ audio_play_playing_deal()

static void audio_play_playing_deal ( uint32_t  uxBits)
static

播放事件处理

参数
uxBits事件bit

◆ audio_play_start()

static int32_t audio_play_start ( void  )
static

启动播放

返回值
RETURN_OK解码正常
RETURN_ERR解码失败

◆ cheak_play_event()

static int32_t cheak_play_event ( void  )
static

检查是否有播放暂停/停止事件

返回
play state

◆ clean_decode_sync_word_offset()

void clean_decode_sync_word_offset ( void  )

清理当前播放位置

◆ do_call_callback_fun()

void do_call_callback_fun ( void  )

调用用户回调

◆ fastset_audio_end_callback()

int32_t fastset_audio_end_callback ( CALLBACK_END_PLAY  callback)

快速设置end回调函数

参数
callback播放结束回调函数句柄
返回值
RETURN_OK设置成功
RETURN_ERR设置失败

◆ find_decoder_ops()

static int32_t find_decoder_ops ( const char *  decoder_name)
static

检索解码器

参数
decoder_name解码器名称
返回值
RETURN_OK检索成功
RETURN_ERR检索失败

◆ free_bak_data()

static void free_bak_data ( void  )
static

释放备份数据区

◆ get_audio_format_info()

void get_audio_format_info ( audio_format_info_t format)

返回当前音频信息

参数
format音频信息结构

◆ get_audio_play_state()

uint32_t get_audio_play_state ( void  )

返回播放器task状态

返回
uint32_t 播放处理任务状态

◆ get_decode_sync_word_offset()

uint32_t get_decode_sync_word_offset ( void  )

返回当前播放位置

返回
uint32_t 当前播放进度偏移

◆ get_next_pcm_buff()

static uint16_t* get_next_pcm_buff ( uint32_t  num)
static

获取PCM下一个缓冲区地址

参数
num获取buff个数
返回
uint16_t* pcm buff地址
注解
在连续的数据流中num不应该改变,除非重新调用para_recover_default初始化参数

◆ get_pcm_buff_addr()

static uint16_t* get_pcm_buff_addr ( void  )
static

获取最小单位的下一个pcm buff地址

返回
uint16_t* pcm buff地址

◆ para_recover_default()

static void para_recover_default ( void  )
static

发送静音数据

设置播放器默认参数

◆ registe_decoder_ops()

void registe_decoder_ops ( audio_play_decoder_ops_t registe_ops)

注册解码器到解码器链表

参数
registe_ops解码器描述符

◆ send_get_data_msg()

static int32_t send_get_data_msg ( audio_play_msg_t play_msg)
static

向数据获取task发送请求数据消息

参数
play_msg播放请求消息
返回值
RETURN_OK
RETURN_ERR

◆ set_play_speed()

void set_play_speed ( float  play_speed)

设置播放倍速

参数
play_speed浮点型,1.0为无倍速,2.0为加速为2倍速,0.5为减速为1/2倍速

◆ set_play_will_finish_threshold_data_size()

void set_play_will_finish_threshold_data_size ( int  size)

设置播放data发送will finsh信号阈值

参数
size

◆ task_audio_play()

void task_audio_play ( void *  pvParameters)

播放器调度任务

参数
pvParameters任务参数

◆ task_audio_play_init_step()

static int32_t task_audio_play_init_step ( void  )
static

初始化播放任务所需资源

返回值
RETURN_OK初始化成功
RETURN_ERR初始化失败

变量说明

◆ audio_decode_offset

uint32_t audio_decode_offset = 0
static

◆ audio_format_info

audio_format_info_t audio_format_info

播音配置参数表

◆ audio_play_cmd_event_group

audio_play_os_event_group_t audio_play_cmd_event_group = NULL

播放事件标志组句柄

◆ audio_play_output_size

uint32_t audio_play_output_size = 0
static

◆ audio_play_queue

audio_play_os_queue_t audio_play_queue = NULL

播放消息队列句柄

◆ audio_play_state

audio_play_state_t audio_play_state = AUDIO_PLAY_STATE_IDLE
static

◆ audio_play_task_handle

audio_play_os_task_t audio_play_task_handle

播放任务句柄

◆ audio_read_offset

uint32_t audio_read_offset = 0
static

◆ bak_data

uint8_t* bak_data = NULL

◆ bak_data_fp

mem_file_t* bak_data_fp = NULL

◆ curr_decoder_ops

audio_play_decoder_ops_t* curr_decoder_ops = NULL
static

◆ data_in_buffer

uint8_t* data_in_buffer
static

◆ decbuf

uint16_t* decbuf = NULL
static

◆ decoder_config_arg

void* decoder_config_arg = NULL

◆ decoder_ops

void* decoder_ops = NULL
static

◆ end_paly_callback_flag

bool end_paly_callback_flag = false
static

◆ g_end_paly_callback

CALLBACK_END_PLAY g_end_paly_callback = NULL
static

◆ history_decoder_ops

audio_play_decoder_ops_t* history_decoder_ops = NULL
static

◆ m4a_file_info

m4a_file_info_t m4a_file_info = {0}

◆ no_use_size

uint32_t no_use_size
static

◆ pcm_buf_base

uint16_t* pcm_buf_base
static

◆ pcm_buf_no_cache

uint16_t pcm_buf_no_cache[(1152U)]
static

◆ pcm_buf_wp

uint32_t pcm_buf_wp = 0
static

◆ play_end_cb_flag

int32_t play_end_cb_flag = AUDIO_PLAY_CB_STATE_UNKNOWN_ERR
static

◆ play_end_flag

uint32_t play_end_flag = AUDIO_PLAY_FLAG_RESTART
static

◆ play_pcm_size

int play_pcm_size = 0
static

◆ play_will_finish

bool play_will_finish = false
static

◆ play_will_finish_curr_play_size

int play_will_finish_curr_play_size = 0
static

◆ play_will_finish_threshold_data_size

int play_will_finish_threshold_data_size = 0
static

◆ play_will_finish_threshold_ms

int play_will_finish_threshold_ms = 0
static

◆ receive_timeout_ticks

uint32_t receive_timeout_ticks = 2
static

◆ sg_play_device_index

int sg_play_device_index

◆ temp_wave_read_size

uint32_t temp_wave_read_size = 0
static

◆ valid_data

uint32_t valid_data = (576U)
static

◆ valid_flag

bool valid_flag = false
static

◆ wav_buf

uint8_t* wav_buf = NULL