跳转至

音频播放器(AUDIO PLAYER)


1. 概述

SDK内置组件轻量级音频播放器是一个非常重要的组件,CI14LP系列芯片作为一款语音识别芯片,在语音交互上语音播报是不可缺失的一环。该组件具有轻量、易用的特点。

CI14LP的播放器组件(components\player\)集成了MP3解码库(mp3lib,提供 .a 库及mp3dec接口)和简单MP3播放器(simple_mp3_player),通过codec_manager组件(内部CODEC/外部CODEC)输出音频,同时支持读取FLASH中打包的MP3提示音(XIP方式,无需占用RAM缓存整个文件)进行解码播放。

播放器结构如下:

模块 说明
simple_mp3_player 播放器调度主任务、消息队列、解码流程
mp3lib(libmp3.a / mp3dec.c) MP3软解码库(PVMP3)
codec_manager 声卡硬件抽象(录音/播音codec注册与管理)
flash_rw_process FLASH数据读取(XIP)

2. 使用说明

2.1. 代码结构

源文件 说明
components\player\simple_mp3_player\simple_mp3_player.c/.h 播放器接口函数与调度主任务
components\player\mp3lib*.c、libmp3.a MP3解码库
components\codec_manager*.c/.h 声卡硬件(codec管理)

2.2. 关键类型

类型 说明
audio_format_info_t 音频信息:采样率samprate、通道数nChans、帧长度out_min_size
smp_msg_id_t 播放器消息:SMP_MSG_START_PLAY(开始播放)、SMP_MSG_STOP_PLAY(强制停止)
SMP_PLAY_END_CALLBACK 播放结束回调函数指针类型:void (*)(int32_t arg)

播放器内部状态机为:SMP_STATE_START(启动)→ SMP_STATE_PLAY(播放中)→ SMP_STATE_STOP(停止)→ SMP_STATE_IDLE(空闲)。

MP3数据头部可携带CI自定义信息帧(ci_mp3_header_t,ID3V2 “PRIV”帧,标签”CI”),用于记录文件大小与PCM大小,供播放器校验数据完整性。

2.3. 播放API

函数 说明
smp_init 初始化播放器(创建播放器调度主任务)
smp_play 从FLASH指定地址开始播放MP3数据(异步,带播放结束回调)
smp_stop 停止当前播放

使用示例如下:

/*初始化播放器:在系统初始化时调用一次*/
smp_init();

/*播放FLASH中0x4000处的MP3提示音,播放完成后调用play_end_callback*/
smp_play(0x4000, play_end_callback);

/*停止播放*/
smp_stop();

提示

  • smp_play 为非阻塞接口,播放结束时机通过回调函数 SMP_PLAY_END_CALLBACK(void (*)(int32_t arg))通知,提示音地址可从命令词信息模块(cmd_info/prompt_player)获取;
  • AUDIO_PLAYER_ENABLE 宏(默认1)控制播放器组件是否编译进SDK,不需要播放功能时可关闭以节省空间。

2.4. 播放控制API

函数 说明
audio_play_hw_pa_da_ctl 功放与DAC硬件控制(是否同时控制功放由参数指定)
audio_play_set_vol_gain 设置播放音量增益
/*播放时打开功放与DAC*/
audio_play_hw_pa_da_ctl(ENABLE, true);

/*设置音量增益*/
audio_play_set_vol_gain(gain);

2.5. 播放器与codec_manager的关系

播放器解码得到的PCM数据通过codec_manager注册的播音codec输出。CI14LP支持以下播音配置(sdk_default_config.h):

宏 说明
PLAY_CODEC_ID 播音codec id:0为外部CODEC,2为内部CODEC(默认)
PLAYER_CONTROL_PA 功放开关是否由音频播放器控制(默认0)
IF_JUST_CLOSE_HPOUT_WHILE_NO_PLAY 无播报时只关HPOUT还是关DAC

板级接口 audio_play_out_codec_registe(board.h)完成播音codec的注册。

注意

关于录音codec、播音codec的完整管理说明请参考 API参考-Speech-API-音频系统管理。