FreeSWITCH对接http协议的tts服务
- 自建tts服务模拟测试环境
- 编译及配置mod_tts_commandline模块
- 测试验证tts效果
- 模块代码分析
- 向特定通道播放tts音频
- 配套资源下载
一、自建tts服务模拟测试环境
如果已经有http协议的tts服务,该部分可以跳过。
这里使用pytts3在Windows10环境下,实现简单的tts服务。
整体结构如下:


完整源码可从如下渠道获取:
二、编译及配置mod_tts_commandline模块
1、编译mod_tts_commandline模块
文件 : freeswitch-1.10.9.-release/modules.conf
开启或添加如下内容:
asr_tts/mod_tts_commandline
编译及安装:
./rebootstrap.sh
#CFLAGS="-O3 -fPIC" ./configure --disable-signalwire (可选)
CFLAGS="-O3 -fPIC" ./configure
make -j
make install

这里描述下关键信息,更多FreeSWITCH源码编译的信息,请参考如下文章:
2、配置mod_tts_commandline模块
2.1 开启模块
首先需要在配置文件中开启mod_tts_commandline模块,文件路径:
/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
配置内容:
<load module="mod_tts_commandline"/>
2.2 配置模块
配置文件路径: /usr/local/freeswitch/conf/autoload_configs/tts_commandline.conf.xml
配置示例:
<configuration name="tts_commandline.conf" description="TextToSpeech Commandline configuration">
<settings>
<!--
Some variables will be replaced :
${text}: input text (quoted)
${rate}: sample rate (example: 8000)
${voice}: voice_name passed to TTS(quoted)
${file}: output file (quoted, including .wav extension) Example commands can be found at:
https://freeswitch.org/confluence/display/FREESWITCH/mod_tts_commandline#mod_tts_commandline-Examplecommands
-->
<!--param name="command" value="echo ${text} | text2wave -f ${rate} > ${file}"/-->
<param name="command" value="/bin/bash /root/test/tts1.sh ${text} ${file}" />
</settings>
</configuration>
bash脚本内容(/root/test/tts1.sh):
#! /bin/bash content=$1
file=$2
echo $content
echo $file
#wget http://192.168.137.1:8091/?text='just a test' -O /tmp/tts1.wav
wget http://192.168.137.1:8091/?text="$content" -O $file
说明:
fs机器地址: 192.168.137.32
tts机器地址: 192.168.137.1
三、测试验证tts效果
这里演示下tts效果。
1、配置拨号方案
dialplan配置(default.xml):
<extension name="ttsTest1">
<condition field="destination_number" expression="^654321$">
<action application="log" data="INFO dialed 654321."/>
<action application="lua" data="ttsTest1.lua"/>
</condition>
</extension>
2、添加lua脚本
lua脚本内容(/usr/local/freeswitch/scripts/ttsTest1.lua):
session:answer()
session:setVariable("tts_engine", "tts_commandline")
session:setVariable("tts_voice", "girl")
--session:execute("speak", "just test!")
session:execute("speak", "今天天气不错!")
3、注册分机拨打验证
注册分机: 1001
拨打号码: 654321
测试效果如下:

四、模块代码分析
模块路径: freeswitch-1.10.9.-release\src\mod\asr_tts\mod_tts_commandline
模块代码文件: mod_tts_commandline.c
1、mod_tts_commandline_load函数
模块入口函数,主要做的事情就是初始化tts资源,绑定回调函数。

2、tts_commandline_speech_open 函数
用于生成临时音频文件名称。

3、tts_commandline_speech_close函数
删除之前生成的临时音频文件。

更多模块函数分析可从如下渠道获取:
五、向特定通道播放tts音频及fire播放完成事件
如果要构建更上层应用(比如机器人服务),需要提供向特定通道播放tts声音的功能,播放完毕需要产生事件通知调用方,这里进行简单的示例。
脚本名称: tts_to_channel.lua
文件内容可从如下渠道获取:
tts_to_channel.lua {channel_uuid} {text}
/event plain CUSTOM MYTTS_TTS_DONE

事件效果:

运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024081102 获取。
六、资源下载
本文涉及源码及相关文件,可从如下途径获取:

FreeSWITCH对接http协议的tts服务的更多相关文章
- Zabbix5 对接 SAML 协议 SSO
Zabbix5 对接 SAML 协议 SSO 在 Zabbix5.0 开始已经支持 SAML 认证 官文文档: https://www.zabbix.com/documentation/current ...
- 使用pyttsx3实现简单tts服务
操作系统:Windows 10_x64 python版本:Python 3.9.2_x64 pyttsx3版本: 2.90 pyttsx3是一个tts引擎包装器,可对接SAPI5.NSSS(NSS ...
- 吾剑未尝不利,国内Azure平替,科大讯飞人工智能免费AI语音合成(TTS)服务Python3.10接入
微软Azure平台的语音合成(TTS)技术确实神乎其技,这一点在之前的一篇:含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入),已经做过详细介绍, ...
- freeswitch对接其它SIP设备
这几天用到freeswitch对接其它设备方面的知识,这里整理下,也方便我以后查阅. 操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 一.freeswitch作为被叫 ...
- 初探机器学习之使用讯飞TTS服务实现在线语音合成
最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...
- syslog之二:syslog协议及rsyslog服务全解析
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- 【C#】教你纯手工用C#实现SSH协议作为GIT服务端
SSH(Secure Shell)是一种工作在应用层和传输层上的安全协议,能在非安全通道上建立安全通道.提供身份认证.密钥更新.数据校验.通道复用等功能,同时具有良好的可扩展性.本文从SSH的架构开始 ...
- HTTP协议及WWW服务应用
一.用户访问网站的流程图 二.DNS解析的流程图 三.用户访问网站的基本流程原理阐述 ① 用户在浏览器中输入请求的地址回车 ② 先找本地的缓存和Hosts文件,有解析的对应IP直接返回个客户端IP地址 ...
- CAS 5.1.x 的搭建和使用(四)—— 配置使用HTTP协议访问的服务端
CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...
- SSL协议提供的服务
SSL协议提供的服务主要有: 1)认证用户和服务器,确保数据发送到正确的客户机和服务器: 2)加密数据以防止数据中途被窃取: 3)维护数据的完整性,确保数据在传输过程中不被改变.
随机推荐
- windows powershell 解压 .gz文件
windows 10下解压.gz后缀文件 打开windows powershell界面,(1)输入cd desktop(文件的存储位置,示例为存储在电脑桌面上), (2)输入tar -zxvf 需要解 ...
- python Django项目以Debug模式启动和外网访问启动
一.Django介绍 介绍: 完善的web框架,包括前端和后端的管理,django项目管理: 管理后台访问:后面补充 前端页面访问:根据app/settings.py文件下配置的访问地址 1.1 项目 ...
- 如何将本地的项目,上传到github
操作步骤: 1.github,创建一个仓库,复制仓库的地址 2.在要上传文件的目录,点击选择git bash here 3.输入[git clone],粘贴刚复制的仓库地址,clone成功后,会将仓库 ...
- pytest-parallel 多线程执行用例,访问pymysql数据库,遇到的问题
遇到的问题 1.pymysql.err.ProgrammingError: execute() first 2.File "D:\xxx\python3.8\lib\site-package ...
- substr()函数用法
substr()函数: 定义和用法: substr()返回字符串的一部分 如果start参数是负数且length小于等于start,则length为0 语法: substr(starting,star ...
- pycharm中运行jupyter notebook
进入anaconda prompt,进入对应的虚拟环境 输入jupyter notebook,找到路径和token 这两个随便复制一个,注意是包括token也要复制到 然后打开pycharm,并建立一 ...
- Pytorch复制现有环境
一,在本机上,打开anaconda Prompt直接使用 conda create -n 新环境名 --clone 旧环境名
- 自定义U盘图标
有没有想过你可以自定义U盘的图标 我才不想用这么Low的图标: 我的图标是这样的: 不好意思,本人叫郭飞,嘻嘻... 下面给出教程: 1.U盘里新建文件autorun.inf,并用记事本打开进行编辑 ...
- 免费CDN使用整理
免费CDN使用整理 最近在使用web优化的时候,需要用到cdn,遇到了一些问题,比如某些cdn在特定的条件下访问不同,整理一波免费的CDN,任君采撷 名称 国家 链接 测速 特色 UNPKG 国外 h ...
- Nginx使用upstream实现动静分离
一.为什么要进行动静分离 分离资源,减少不必要到的请求消耗,减少请求延时. 注:我这里,是nginx处理静态资源,apache处理动态资源. 场景分析: 1.未分离之前的场景步骤 (1)客户端请求ur ...
