首页 > 其他分享 >FreeSWITCH对接http协议的tts服务

FreeSWITCH对接http协议的tts服务

时间:2024-08-11 18:15:55浏览次数:7  
标签:http tts commandline 如下 模块 FreeSWITCH mod

操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9  
FreeSWITCH里面有个mod_tts_commandline模块,可以用来对接http协议的tts服务,今天整理下这方面的笔记,并提供相关演示效果及资源下载。 我将从以下几个方面进行展开:

  • 自建tts服务模拟测试环境
  • 编译及配置mod_tts_commandline模块
  • 测试验证tts效果
  • 模块代码分析
  • 向特定通道播放tts音频
  • 配套资源下载

一、自建tts服务模拟测试环境

如果已经有http协议的tts服务,该部分可以跳过。

这里使用pytts3在Windows10环境下,实现简单的tts服务。

整体结构如下:

示例代码如下:

 完整源码可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240811 获取。 测试url: http://127.0.0.1:8091/?text='just a test' 运行效果如下:

 更多信息请参考如下文章:

https://www.cnblogs.com/MikeZhang/p/pyttsx3test20220404.html

二、编译及配置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源码编译的信息,请参考如下文章:

https://www.cnblogs.com/MikeZhang/p/centos7InstallFs20221007.html  

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

测试效果如下:

运行效果视频可从如下渠道获取: 关注微信公众号(聊聊博文,文末可扫码)后回复 2024081101 获取。

四、模块代码分析

模块路径: 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函数
删除之前生成的临时音频文件。

更多模块函数分析可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240811 获取。

五、向特定通道播放tts音频及fire播放完成事件

如果要构建更上层应用(比如机器人服务),需要提供向特定通道播放tts声音的功能,播放完毕需要产生事件通知调用方,这里进行简单的示例。

脚本名称:  tts_to_channel.lua

文件内容可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240811 获取。 使用格式:
tts_to_channel.lua {channel_uuid} {text}
参数说明: channel_uuid =>  需要播放通道的uuid text => 播放的文本内容 事件订阅:
/event plain CUSTOM MYTTS_TTS_DONE
运行效果:

 事件效果:

运行效果视频可从如下渠道获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 2024081102 获取。

六、资源下载

本文涉及源码及相关文件,可从如下途径获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20240811 获取。

 

标签:http,tts,commandline,如下,模块,FreeSWITCH,mod
From: https://www.cnblogs.com/MikeZhang/p/18353691/fsCallTTS20240811

相关文章

  • grpc-gateway:grpc转换为http协议对外提供服务
    使用grpc的优点很多,二进制的数据可以加快传输速度,基于http2的多路复用可以减少服务之间的连接次数,和函数一样的调用方式也有效的提升了开发效率。不过使用grpc也会面临一个问题,我们的微服务对外一定是要提供Restful接口的,如果内部调用使用grpc,在某些情况下要同时提供一个功能的两......
  • Haproxy实现https
    haproxy可以实现https的证书安全,从用户到haproxy为https,从haproxy到后端服务器用http通信,但是基于性能考虑,生产中证书都是在后端服务器比如nginx上实现。配置HAProxy支持https协议,支持ssl会话:bind*:443sslcrt/PATH/TO/SOME_PEM_FILE指令crt后证书文件为PEM格式,......
  • git clone 网络太差总是失败:error: RPC 失败。curl 92 HTTP/2 stream 5 was not close
    ❯gitclonehttps://github.com/Almamu/linux-wallpaperengine.git.正克隆到'.'...remote:Enumeratingobjects:6271,done.remote:Countingobjects:100%(1447/1447),done.remote:Compressingobjects:100%(628/628),done.error:RPC失败。curl92HTT......
  • Java工具类封装微服务间HTTP通信
    在微服务架构中,服务之间通常通过HTTP协议进行通信。为了简化这一过程,我们可以创建一些工具类来封装HTTP请求的发送逻辑。本篇文章将介绍如何使用Java来创建这样的工具类,并分别演示使用ApacheHttpClient和SpringFramework中的RestTemplate来发送HTTPGET请求的方法。1.引言......
  • 使用go+gin编写日志中间,实现自动化收集http访问信息,错误信息等,自动化生成日志文件
    1.首先在logger包下点击查看代码packageloggerimport( "fmt" "io" "net/http" "os" "path" "runtime/debug" "time" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus&q......
  • http.sys 是 IIS 的底层组件,负责高效、安全地处理 HTTP 请求,而 IIS 则提供了更高层次
    IIS(InternetInformationServices)和http.sys是MicrosoftWindows操作系统中的两个相关组件,它们一起工作来处理和管理HTTP请求。以下是它们的关系和功能:IIS:Web服务器:IIS是Microsoft的Web服务器软件,提供了用于托管和管理Web应用程序的功能,包括网站、应用程序......
  • http协议中url中的解码和解码
    问题引出当我们进入百度页面:此时的域名是:www.baidu.com当我们搜索aaa+@///+bbb时此时的域名是:https://www.baidu.com/s?wd=aaa%2B%40%2F%2F%2F%2Bbbb&rsv_spt=1&rsv_iqid=0xc051be38000e103b&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_p......
  • next.js本地开发https实现
    很奇怪的需求,本地开发一般都是http://localhost:3000,但有些情况需要https://localhost:3000来debug,这类需求估计比较少,我看使用next.js的中文教程也比较少,这里记录一下。网上很多找到的教程都是自己去转一堆软件和依赖,还要分Mac和Windows,看着就头疼,这个实现方式是官方给的,通过NEX......
  • 手写Redis缓存系统,第一章:基于http协议实现的缓存系统
    关系描述关系图文本描述main包依赖cache包依赖http包流程:main包的main函数调用cache.New("inmemory")创建一个缓存实例。main包的main函数将缓存实例传递给http.New(c)创建一个Server实例。Server实例调用Listen方法启动HTTP服务器......
  • HTTP协议基础知识【后端 4】
    HTTP协议基础知识HTTP(HyperTextTransferProtocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议,它定义了客户端(如浏览器)与服务器之间数据传输的格式和规则。无论是浏览网页、在线购物还是使用各种Web应用,HTTP都扮演着至关重要的角色。本文将深入解析HTTP协议的基......