235 lines
7.5 KiB
C
235 lines
7.5 KiB
C
/**
|
||
* @file cm_tts_client.h
|
||
* @brief TTS接口
|
||
* @copyright Copyright © 2021 China Mobile IOT. All rights reserved.
|
||
* @author By WangPeng
|
||
* @date 2021/04/12
|
||
*
|
||
* @defgroup tts tts
|
||
* @ingroup AUDIO
|
||
* @{
|
||
*/
|
||
|
||
#ifndef __CM_TTS_CLIENT_H__
|
||
#define __CM_TTS_CLIENT_H__
|
||
|
||
/****************************************************************************
|
||
* Included Files
|
||
****************************************************************************/
|
||
|
||
#include <stdint.h>
|
||
|
||
/****************************************************************************
|
||
* Pre-processor Definitions
|
||
****************************************************************************/
|
||
|
||
/****************************************************************************
|
||
* Public Types
|
||
****************************************************************************/
|
||
|
||
/**
|
||
* @brief 中文文本编码方式
|
||
*
|
||
* @details 范围根据实际情况确定
|
||
*/
|
||
typedef enum
|
||
{
|
||
CM_TTS_ENCODE_TYPE_UCS2 = 0, /*!< UCS2编码模式 */
|
||
CM_TTS_ENCODE_TYPE_GBK, /*!< 普通字符为ASCII格式,汉字为GBK格式 */
|
||
CM_TTS_ENCODE_TYPE_UTF8, /*!< 普通字符为ASCII格式,汉字为UTF-8格式 */
|
||
CM_TTS_ENCODE_TYPE_GB2312, /*!< 普通字符为ASCII格式,汉字为GB2312格式 */
|
||
} cm_tts_encode_e;
|
||
|
||
/**
|
||
* @brief 数字播放方式
|
||
*/
|
||
typedef enum
|
||
{
|
||
CM_TTS_RDN_AUTO = 0, /*!< 自动模式 */
|
||
CM_TTS_RDN_AS_VALUE, /*!< 数值模式 */
|
||
CM_TTS_RDN_AS_NUMBER, /*!< 数字模式 */
|
||
CM_TTS_RDN_AS_STR, /*!< 数字字符串优先 */
|
||
} cm_tts_rdn_e;
|
||
|
||
/**
|
||
* @brief 音调
|
||
*
|
||
* @details 范围根据实际情况确定
|
||
*/
|
||
typedef enum
|
||
{
|
||
CM_TTS_PITCH_0 = 0,
|
||
CM_TTS_PITCH_1,
|
||
CM_TTS_PITCH_2,
|
||
CM_TTS_PITCH_3,
|
||
CM_TTS_PITCH_4,
|
||
CM_TTS_PITCH_5, /*!< 默认音调 */
|
||
CM_TTS_PITCH_6,
|
||
CM_TTS_PITCH_7,
|
||
CM_TTS_PITCH_8,
|
||
CM_TTS_PITCH_9,
|
||
CM_TTS_PITCH_10,
|
||
CM_TTS_PITCH_11,
|
||
CM_TTS_PITCH_12,
|
||
CM_TTS_PITCH_13,
|
||
CM_TTS_PITCH_14,
|
||
CM_TTS_PITCH_15,
|
||
} cm_tts_pitch_e;
|
||
|
||
/**
|
||
* @brief 音效
|
||
*
|
||
* @details 范围根据实际情况确定
|
||
*/
|
||
typedef enum
|
||
{
|
||
CM_TTS_VOICE_0 = 0, /*!< 默认音效,0为度小美 */
|
||
CM_TTS_VOICE_1 = 1, /*!< 1为度小宇 */
|
||
CM_TTS_VOICE_2 = 2, /*!< 2为度小宇 */
|
||
CM_TTS_VOICE_3 = 3, /*!< 3为度逍遥 */
|
||
CM_TTS_VOICE_4 = 4, /*!< 4为度丫丫 */
|
||
} cm_tts_voice_e;
|
||
|
||
/**
|
||
* @brief 播放通道
|
||
*
|
||
* @details 范围根据实际情况确定
|
||
*/
|
||
typedef enum
|
||
{
|
||
CM_TTS_CHANNEL_0 = 0, /*!< 0 - 听筒 */
|
||
CM_TTS_CHANNEL_1 = 1, /*!< 1 - 耳机 */
|
||
CM_TTS_CHANNEL_2 = 2, /*!< 2 - 扬声器 */
|
||
CM_TTS_CHANNEL_3 = 3, /*!< 3 - 远端(通话过程中在对端播放) */
|
||
} cm_tts_channel_e;
|
||
|
||
/**
|
||
* @brief TTS状态
|
||
*
|
||
*/
|
||
typedef enum
|
||
{
|
||
CM_TTS_STATE_IDLE = 0, /*!< TTS空闲/播放结束(当前在线TTS版本存在缺陷,语音播放时也可能处于该状态) */
|
||
CM_TTS_STATE_INTERRUPT, /*!< TTS播放异常中断 */
|
||
CM_TTS_STATE_FAIL, /*!< TTS播放失败 */
|
||
CM_TTS_STATE_WORKING, /*!< TTS工作中,不可使用(正在播放或其他音频功能正在使用) */
|
||
} cm_tts_state_e;
|
||
|
||
/** TTS设置类型,包括在线TTS传到云上的配置 */
|
||
typedef struct
|
||
{
|
||
int32_t speed; /*!< 语速,范围根据实际情况确定,范围0-15 */
|
||
int32_t volume; /*!< TTS转化时音量,范围根据实际情况确定,范围0-15 */
|
||
cm_tts_encode_e encode; /*!< 中文文本编码方式,(百度在线TTS)暂仅支持(且必须)设置为2(不生效,实际使用urlencode格式编码) */
|
||
cm_tts_rdn_e rdn; /*!< 数字播放模式,暂仅支持(且必须)设置为0 */
|
||
cm_tts_pitch_e pitch; /*!< 音调,范围0-15 */
|
||
cm_tts_voice_e voice; /*!< 音效,范围0-4 */
|
||
int32_t channel; /*!< 播放通道,暂仅支持(且必须)设置为2(不生效,本平台仅有一个音频输出通道) */
|
||
char *url; /*!< TTS语音转换平台网址,仅支持百度在线TTS,配置其他URL不生效 */
|
||
char *apiKey; /*!< client_id (即注册账号的apikey) */
|
||
char *secretKey; /*!< client_secret (secretKey) */
|
||
} cm_tts_cfg_t;
|
||
|
||
/** TTS回调的事件类型 */
|
||
typedef enum
|
||
{
|
||
CM_TTS_EVENT_SYNTH_DATA = 1, /*!< 语音合成数据上报,调用cm_tts_synth()接口时可能上报的事件,不支持 */
|
||
CM_TTS_EVENT_SYNTH_FAIL, /*!< 语音合成失败,调用cm_tts_synth()接口时可能上报的事件,不支持 */
|
||
CM_TTS_EVENT_SYNTH_INTERRUPT, /*!< 语音合成(异常)中断,调用cm_tts_synth()接口时可能上报的事件,不支持 */
|
||
CM_TTS_EVENT_SYNTH_FINISH, /*!< 语音合成完成,调用cm_tts_text_to_pcm()接口时可能上报的事件,不支持 */
|
||
CM_TTS_EVENT_PLAY_FAIL, /*!< 语音播放失败,调用cm_tts_play()接口时可能上报的事件 */
|
||
CM_TTS_EVENT_PLAY_INTERRUPT, /*!< 语音播放中断,调用cm_tts_play()接口时可能上报的事件 */
|
||
CM_TTS_EVENT_PLAY_FINISH, /*!< 语音播放完成,调用cm_tts_play()接口时可能上报的事件,不支持(回调通知仍会通知该事件,但该事件的通知不能正确反应播放完成,用户不应使用该事件做判断) */
|
||
} cm_tts_event_e;
|
||
|
||
|
||
/****************************************************************************
|
||
* Public Data
|
||
****************************************************************************/
|
||
|
||
/****************************************************************************
|
||
* Public Function Prototypes
|
||
****************************************************************************/
|
||
|
||
#ifdef __cplusplus
|
||
#define EXTERN extern "C"
|
||
extern "C" {
|
||
#else
|
||
#define EXTERN extern
|
||
#endif
|
||
|
||
/****************************************************************************/
|
||
|
||
|
||
/**
|
||
* @brief TTS回调函数
|
||
*
|
||
* @param [in] event 事件类型
|
||
* @param [in] param 事件参数(该参数为用户传入参数)
|
||
*/
|
||
typedef void (*cm_tts_callback)(cm_tts_event_e event, void *param);
|
||
|
||
/**
|
||
* @brief TTS初始化
|
||
*
|
||
* @param [in] cfg 配置参数指针
|
||
*
|
||
* @return
|
||
* = 0 - 成功 \n
|
||
* = -1 - 失败
|
||
*
|
||
* @details 在线TTS使用百度TTS,不支持中文文本编码方式设置,百度在线TTS仅可使用urlencode格式编码 \n
|
||
* cfg参数设置存在较多限制条件,请参照cm_tts_cfg_t结构体中说明进行cfg参数设置
|
||
*/
|
||
int32_t cm_tts_init(cm_tts_cfg_t *cfg);
|
||
|
||
/**
|
||
* @brief TTS去初始化
|
||
*
|
||
*/
|
||
void cm_tts_deinit(void);
|
||
|
||
/**
|
||
* @brief TTS播放文字
|
||
*
|
||
* @param [in] text 将要播放的文字
|
||
* @param [in] len text的字符串长度
|
||
* @param [in] cb TTS回调函数(回调函数不能阻塞)
|
||
* @param [in] cb_param 用户参数(参见cm_tts_callback回调函数中param参数描述)
|
||
*
|
||
* @return
|
||
* = 0 - 成功 \n
|
||
* = -1 - 失败
|
||
*
|
||
* @details 异步函数,播放任务建立后,此函数会立即返回 \n
|
||
* 暂仅支持百度在线TTS,使用在线TTS功能需要占用一路HTTP通道 \n
|
||
* 在线TTS使用百度TTS,text不支持中文文本编码方式设置,百度在线TTS中text仅可使用urlencode格式编码,仅支持播放不超时10秒时长的数据
|
||
*/
|
||
int32_t cm_tts_play(const void *text, int32_t len, cm_tts_callback cb, void *cb_param);
|
||
|
||
/**
|
||
* @brief 停止TTS播放文字
|
||
*
|
||
* @return
|
||
* = 0 - 成功 \n
|
||
* = -1 - 失败
|
||
*/
|
||
int32_t cm_tts_play_stop(void);
|
||
|
||
/**
|
||
* @brief 获取TTS状态
|
||
*
|
||
* @return
|
||
* 当前TTS状态
|
||
*/
|
||
cm_tts_state_e cm_tts_get_state(void);
|
||
|
||
#undef EXTERN
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* __CM_TTS_CLIENT_H__ */
|
||
|
||
/** @}*/
|