首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

FreeSWITCH对接http协议的tts服务

编程知识
2024年08月11日 17:19
操作系统 :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'
运行效果如下:

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

二、编译及配置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

测试效果如下:

运行效果视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 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 获取。

 

From:https://www.cnblogs.com/MikeZhang/p/18353691/fsCallTTS20240811
本文地址: http://shuzixingkong.net/article/989
0评论
提交 加载更多评论
其他文章 这是DDD建模最难的部分(其实很简单)
本文书接上回《为了落地DDD,我是这样“PUA”大家的》 ,欢迎关注我的同名公众号。 https://mp.weixin.qq.com/s/DjC0FSWY1bgJyLPIND5evA 什么是最重要的事 如果你认真读过前面的文章,那么一定知道我们的核心逻辑:领域驱动是一种价值观,这个价值观是:“领域
这是DDD建模最难的部分(其实很简单) 这是DDD建模最难的部分(其实很简单) 这是DDD建模最难的部分(其实很简单)
旧物利用 - 将机顶盒改造为一台Linux开发机!
前言 家里的机顶盒淘汰下来,博主想要物尽其用,看看是否能将其改造为一台Ubuntu&quot;开发机&quot;,故开始倒腾 准备工作 机顶盒型号:移动魔百盒CM201-2(CH),芯片组: hi3798mv300(hi3798mv3dmm),其他型号类似 理论上适用于以下SOC的机顶盒:Hi379
旧物利用 - 将机顶盒改造为一台Linux开发机! 旧物利用 - 将机顶盒改造为一台Linux开发机! 旧物利用 - 将机顶盒改造为一台Linux开发机!
项目管理工具Maven的简单配置示例
本文简要介绍了Maven是一个强大的项目管理工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。本文重点介绍了关于Maven的具体例子,涵盖了项目配置、依赖管理、插件使用等方面,直观易懂。
Java方法小白版
一、方法的定义 方法就是 将功能重复的代码封装成一段独立的代码,通过调用方法的方式 (作用)提高代码的复用性(减少代码重复)。 每一个方法只能完成一个功能。 二、方法的声明格式 [修饰符1,修饰符2] 返回值类型 方法名 (参数类型 形式参数1,参数类型 形式参数2,...){ 执行语句块; ret
实战-行业攻防应急响应
实战-行业攻防应急响应 简介: 服务器场景操作系统 Ubuntu 服务器账号密码:root/security123 分析流量包在/home/security/security.pcap 相关jar包在/home/security/ruoyi/ruoyi-admin.jar 应急主机: 192.168
实战-行业攻防应急响应 实战-行业攻防应急响应 实战-行业攻防应急响应
饱和度
饱和度是色彩三属性之一,与色调(Hue)和亮度(Lightness/Brightness)并列,通常用来描述颜色的纯度或者色彩的鲜艳程度。在RGB色彩空间中,饱和度没有一个直接的计算公式,但可以通过转换到HSV(色调、饱和度、亮度)色彩空间来计算。 以下是计算饱和度的一种方法,它基于HSV色彩空间:
排列组合:公式及推导
排列组合:公式及推导 引入 定义: 排列:从指定个数的元素中取出指定个数的元素进行排序;(考虑元素的顺序) 组合:从给定个数的元素中仅仅取出指定个数的元素;(不考虑元素的顺序) 加法&amp;乘法原理 加法原理: 完成一个工程可以有 \(n\) 类办法, \(a_i(i\in[1,n])\) 代表第
排列组合:公式及推导 排列组合:公式及推导 排列组合:公式及推导
痞子衡嵌入式:探析i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题(上篇)
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题探析。 前段时间有一个 RT1052 客户反馈了一个有趣的问题,他们设计得是一个带 LCD 屏交互的应用,应用以官方 SDK 里的 lvgl_demo_widget
痞子衡嵌入式:探析i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题(上篇) 痞子衡嵌入式:探析i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题(上篇) 痞子衡嵌入式:探析i.MXRT1050在GPIO上增加RC延时电路后导致边沿中断误触发问题(上篇)