4G_module/include/cmiot/cm_tts.h

235 lines
7.5 KiB
C
Raw Permalink Normal View History

2024-09-02 17:54:29 +08:00
/**
* @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__ */
/** @}*/