TTS是Text to Speech的缩写,即文本转语音,作为AI语音交互,TTS是必不可少的一个环节。
一、freeswitch如何使用tts
freeswitch播放tts的app有speak,phrase中的宏speak-text,phrase可以嵌套在playback中。
speak <engine>|<voice>|<text>
engine:引擎名称
voice:发言人
text:文本内容
如果不指定engine和voice,可以通过通道变量tts_engine和tts_voice来指定引擎和发言人。
如果需要设置语速、语调、音量可以在text前设置
比如:{speed=50,volume=100,pitch=30}你好,中国
二、如何实现一个自定义的tts模块
可以通过fs的tts接口来实现
speech_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_SPEECH_INTERFACE);
speech_interface->interface_name = "fastcall_tts";
speech_interface->speech_open = fastcall_speech_open;
speech_interface->speech_close = fastcall_speech_close;
speech_interface->speech_feed_tts = fastcall_speech_feed_tts;
speech_interface->speech_read_tts = fastcall_speech_read_tts;
speech_interface->speech_flush_tts = fastcall_speech_flush_tts;
speech_interface->speech_text_param_tts = fastcall_text_param_tts;
speech_interface->speech_numeric_param_tts = fastcall_numeric_param_tts;
speech_interface->speech_float_param_tts = fastcall_float_param_tts;
其中feed_tts是传送文件到引擎,read_tts是读取媒体流给speak播放。
三、软件架构设计
1、mod_AI通过自定义协议发送需要转换的文本到tts_server,同时指定需要使用的引擎和发言人;
2、编写具有插件功能的TTS_Server系统,生成接口
struct fsl_tts_interface {
/*! the name of the interface */
const char *interface_name;
int (*tts_open) (fsl_tts_handle_t *sh, char* param);
int (*tts_close) (fsl_tts_handle_t*);
int (*tts_start_session) (fsl_tts_handle_t* sh, int rate, char* param);
int (*tts_stop_session) (fsl_tts_handle_t* sh);
//给引擎喂文本
int (*tts_feed) (fsl_tts_handle_t*sh, char *text);
//获取语音流,其中synthStatus标识语音流状态
int (*tts_read) (fsl_tts_handle_t *sh, void *data, fsl_size_t *datalen, int *synthStatus);
fsl_thread_rwlock_t *rwlock;
int refs;
fsl_mutex_t *reflock;
fsl_loadable_module_interface_t *parent;
struct fsl_tts_interface *next;
};
3、分别编写阿里,讯飞,百度模块提供TTS引擎功能
4、TTS_Server通过mod_AI传送过来的参数interface_name来调用对应的模块文本转语音,并把语音返回给mod_AI模块;
希望对您有所帮助,更多探讨请加Freeswitch qq群640880657。