4G_module/include/cmiot/cm_tts.h

235 lines
7.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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使用百度TTStext不支持中文文本编码方式设置百度在线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__ */
/** @}*/