FreeSWITCH 简单图形化界面59 - 拨号应用speak,使用纯CPU的kokoro-tts播放文字
- [00、 一个fs的web配置界面预览](#00、 一个fs的web配置界面预览)
- [01、 Web 配置界面预览](#01、 Web 配置界面预览)
- [02、 Web界面安装参考](#02、 Web界面安装参考)
- 1、speak应用简介
- [2、speak 应用语法](#2、speak 应用语法)
- 3、speak示例
-
- [3.1 先部署一个TTS服务](#3.1 先部署一个TTS服务)
-
- [3.1.1 拉取镜像](#3.1.1 拉取镜像)
- [3.1.2 启动容器](#3.1.2 启动容器)
- [3.1.3 查看启动日志](#3.1.3 查看启动日志)
- [3.1.4 TTS 服务接口测试](#3.1.4 TTS 服务接口测试)
- [3.2 配置 mod_tts_commandline 对接 TTS 服务](#3.2 配置 mod_tts_commandline 对接 TTS 服务)
-
- [3.2.1 编写 TTS 调用脚本 `tts.sh`](#3.2.1 编写 TTS 调用脚本
tts.sh) - [3.2.2 配置 tts_commandline.conf](#3.2.2 配置 tts_commandline.conf)
- [3.2.3 加载模块](#3.2.3 加载模块)
- [3.2.4 配置拨号方案实现自动语音播报](#3.2.4 配置拨号方案实现自动语音播报)
- [3.2.1 编写 TTS 调用脚本 `tts.sh`](#3.2.1 编写 TTS 调用脚本
- 4、效果与性能查看
- [5、补充:无需 speak 应用,直接通过呼叫规则播放 TTS 音频](#5、补充:无需 speak 应用,直接通过呼叫规则播放 TTS 音频)
00、 一个fs的web配置界面预览
如果您想通过图形化界面管理 FreeSWITCH 的场景,可直接访问以下 Web 配置界面。
01、 Web 配置界面预览
| 界面地址 | 备用地址 | 登录信息 |
|---|---|---|
| http://www.fspbx.cn/ | http://myfs.f3322.net:8020/ | 用户名:admin密码:admin |
02、 Web界面安装参考
若需自行部署 FreeSWITCH 图形化界面,包含 Docker、脚本、ISO 镜像三种安装方式,适配不同系统环境:
- 安装指南地址:https://blog.csdn.net/jia198810/article/details/137820796
- 核心安装方式概览:
- Docker 安装:快速部署;
- 脚本安装:适配 Almalinux、RockyLinux、Debian、Ubuntu 、欧拉等系统,提供一键安装命令,安装后需重启初始化;
- ISO 镜像安装:基于 Almalinux制作的镜像,刻录到 U 盘或光盘后可自动安装,适合全新服务器部署。
1、speak应用简介
speak 是 FreeSWITCH 用于在通话通道中播放 TTS 语音的核心应用,可将文本实时转为语音播放给通话对端。
FreeSWITCH 自带常见 TTS 模块:
mod_flite:轻量级英文 TTSmod_cepstral:商业 TTS 引擎接口mod_unimrcp:对接 MRCP 协议 TTS 服务mod_tts_commandline:调用外部命令行/脚本实现自定义 TTS(本文重点)
2、speak 应用语法
xml
<action application="speak" data="<engine>|<voice>|<text>|[timer_name]"/>
engine:TTS 引擎(如tts_commandline)voice:音色名称text:需要播报的文本timer_name:可选定时器参数
3、speak示例
下面使用speak通过 mod_tts_commandline 对接基于 Kokoro-TTS 的 HTTP TTS 服务,实现中文语音播报。
3.1 先部署一个TTS服务
使用封装好的 tts-server Docker 镜像,快速搭建可通过 HTTP 调用的 TTS 服务。
这个是基于kokoro-tts的,可通过http下载tts后的语音,tts速度看CPU性能,我的测试的虚拟机是 CPU 核心数: 16
核,我觉得还行,要说实时肯定不是,但是20个字,1-2s内还是差不多的。
带缓存,相同文字片段,只转换一次;音色如果不存在,首次需要下载
3.1.1 拉取镜像
bash
podman pull registry.cn-hangzhou.aliyuncs.com/pbx/tts-server:latest
# 或使用 docker
docker pull registry.cn-hangzhou.aliyuncs.com/pbx/tts-server:latest

3.1.2 启动容器
bash
podman run -itd --name tts-server --restart always -p 5000:5000 tts-server
3.1.3 查看启动日志
bash
podman logs -f tts-server
出现服务监听日志即启动成功。

3.1.4 TTS 服务接口测试
(1)获取可用音色的接口
http://你的TTS容器IP:5000/voices
默认音色:zm_yunxi

(2)获取文本转语音接口
http://你的TTS容器IP:5000/stream?voice=zm_yunxi&text=这里输入内容
访问即可直接播放或下载音频。

3.2 配置 mod_tts_commandline 对接 TTS 服务
3.2.1 编写 TTS 调用脚本 tts.sh
创建 /root/tts.sh,通过 wget 调用 HTTP TTS 接口并保存为 wav 文件:
bash
#!/bin/bash
# $1 = 输出wav文件路径
# $2 = 待播报文本
wav_file="$1"
text="$2"
# 调用 HTTP TTS 接口并保存为音频
wget -q -O "${wav_file}" "http://210.51.10.231:5000/stream?voice=zm_yunxi&text=${text}"
赋予执行权限:
bash
chmod +x /root/tts.sh
3.2.2 配置 tts_commandline.conf
直接修改网页配置

或者编辑 conf/autoload_configs/tts_commandline.conf:
xml
<configuration name="tts_commandline.conf" description="TextToSpeech Commandline configuration">
<settings>
<!--
变量说明:
${text}: 待合成文本(已引号处理)
${rate}: 采样率(如8000)
${voice}: 音色名称
${file}: 输出wav文件路径
-->
<param name="command" value="/root/tts.sh ${file} ${text}"/>
</settings>
</configuration>
3.2.3 加载模块
bash
# 控制台执行
load mod_tts_commandline
3.2.4 配置拨号方案实现自动语音播报
示例:拨打 11111 自动应答并播报当前系统时间。
xml
<extension name="11111-TTS播放时间号码">
<condition expression="^(11111)$" field="destination_number">
<action application="answer" />
<!-- TTS服务器有缓存,相同文字只转换一次,动态时间测试 -->
<action application="set" data="time=${system date +'%Y年%m月%d日%H时%M分'}" />
<action application="set" data="tts_engine=tts_commandline" />
<action application="set" data="tts_voice=whatever" />
<action application="speak" data="现在为您播报时间,现在时间是${time},请安排好您的工作,再见"/>
<action application="hangup"/>
</condition>
</extension>
重新加载配置:
bash
reloadxml
4、效果与性能查看
拨打 11111 即可听到完整语音播报.速度取决于cpu的性能。
这里是一个视频
20260329_173945
查看 TTS 服务转换日志:
bash
podman logs -f tts-server
可看到字数统计、合成耗时。

5、补充:无需 speak 应用,直接通过呼叫规则播放 TTS 音频
除了使用 speak 应用调用 TTS 引擎,也可直接通过 system 调用 TTS 服务生成音频文件,再用 playback 播放,无需依赖 speak 应用,呼叫规则示例如下:
xml
<extension name="21111-TTS播放古诗">
<condition expression="^(21111)$" field="destination_number">
<action application="answer" />
<action application="set" data="output=/tmp/output.wav" />
<action application="set" data="text=5个字,窗前明月光" />
<action application="system" data="wget -O ${output} http://210.51.10.231:5000/stream?text=${text}" />
<action application="playback" data="/tmp/output.wav" />
<action application="set" data="text=10个字,疑是地上霜,举头望明月" />
<action application="system" data="wget -O ${output} http://210.51.10.231:5000/stream?text=${text}" />
<action application="playback" data="/tmp/output.wav" />
<action application="set" data="text=5个字,低头思故乡" />
<action application="system" data="wget -O ${output} http://210.51.10.231:5000/stream?text=${text}" />
<action application="playback" data="/tmp/output.wav" />
<action application="set" data="text=声明称,此次行动使用巡航导弹和无人机,并称行动已实现既定目标。声明还表示,此次行动与伊朗及黎巴嫩真主党方面的军事行动同步进行,并强调未来将继续实施军事行动,直至对方停止相关军事行动。" />
<action application="system" data="wget -O ${output} http://210.51.10.231:5000/stream?text=${text}" />
<action application="playback" data="/tmp/output.wav" />
<action application="hangup"/>
</condition>
</extension>
说明:该方式直接通过 wget 调用 TTS 服务生成音频文件(保存至 /tmp/output.wav),再通过playback 播放,无需配置 mod_tts_commandline 模块,适用于简单场景的 TTS 播放需求。
bash
reloadxml
祝君好运!
💗 2026年
🐂 祝君成功,好运连连,牛气冲天
(注:文档部分内容由本人整理并测试,格式由 AI 生成)