Freeswitch智能语音开发之TTS

TTS是Text to Speech的缩写,即文本转语音,作为AI语音交互,TTS是必不可少的一个环节。

一、freeswitch如何使用tts

freeswitch播放tts的app有speak,phrase中的宏speak-text,phrase可以嵌套在playback中。

speak  ||

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模块;
 

你可能感兴趣的:(智能语音系统,电销机器人源码,人工智能,人工智能,语音识别,机器人,服务器)