Files
PA_horn_speaker/README.md
T

5.4 KiB
Raw Blame History

PA_horn_speaker

Web广播系统 - 吆喝用的喇叭(i人专用)

通过Web界面输入文字,利用 edge-tts 将文本转化为语音并播放,支持循环播放和语音文件管理。

功能特点

  • 文本转语音:输入文字即可生成语音
  • 多种声音选择:支持多种音色,包括普通话、方言、香港、台湾口音
  • 循环播放:支持设置间隔时间的循环播放模式
  • 语音文件管理:播放历史、收藏、重命名、删除
  • 主题切换:支持深色/浅色主题
  • 状态条与日志:一条状态随时说明喇叭在做什么(待机 / 正在合成 / 正在播报 / 上次没成功),需要时展开看完整日志

支持的声音

声音名称 类型
晓晓(温暖女声) 普通话
晓伊(活泼女声) 普通话
云健(激情男声) 普通话
云希(阳光男声) 普通话
云夏(可爱男声) 普通话
云扬(新闻男声) 普通话
辽宁-小贝 方言
陕西-小妮 方言
香港-晓佳 粤语
香港-晓曼 粤语
香港-云龙 粤语
台湾-晓陈 台语
台湾-晓雨 台语
台湾-云哲 台语

安装依赖

# 安装 Python 依赖
pip install flask edge-tts

# 安装音频播放工具
sudo apt-get install mpg123

# 修复 edge-tts 的 403(微软 2026-10 更换了端点,不修则合成不出语音)
python3 patch_edge_tts_403.py

界面

控制界面按「极简一页」来组织:一屏只做一件事——写内容、点广播,音频文件与日志收在下方可展开的行里; 宽屏(≥1000px)时这两块自动变成右侧常显的一栏。

配色遵循一条规则:颜色只表示喇叭是否在响。待机时整个界面是无彩的(只有灰绿中性色), 只有正在播报时才会出现唯一的朱红——页面顶端一条横线、状态点、以及变成「停止广播」的主按钮。 深浅两套主题,右上角切换,首次打开跟随系统。

使用方法

启动服务

python app.py

服务将在 http://localhost:5000 启动。

访问方式

打开浏览器访问 http://你的IP:5000

使用步骤

  1. 在文本框中输入广播内容(最多500字)
  2. 选择喜欢的声音
  3. 可选:勾选"循环播放"并设置间隔时间
  4. 点击"开始广播"按钮
  5. 播放完成的语音会自动保存到历史列表

技术栈

  • 后端:Flask
  • 语音合成:edge-tts
  • 音频播放:mpg123
  • 前端:HTML + CSS + JavaScript

项目结构

PA_horn_speaker/
├── app.py              # Flask 应用主文件
├── player.sh           # 循环播放脚本
├── patch_edge_tts_403.py  # 修复 edge-tts 合成 403 的补丁脚本
├── templates/
│   └── index.html      # 前端页面模板
├── static/
│   └── style.css       # 样式文件
├── cache/              # 语音文件缓存目录
│   └── metadata.json   # 文件元数据
├── LICENSE             # 许可证
└── README.md           # 项目说明

API 接口

接口 方法 说明
/ GET 首页
/speak POST 生成并播放语音
/stop GET 停止播放
/files GET 获取语音文件列表
/play-file POST 播放已保存的语音文件
/rename-file POST 重命名文件
/toggle-favorite POST 收藏/取消收藏
/delete-file POST 删除文件
/status GET 查询喇叭是否正在播报、播的哪一条、循环间隔

已知问题:合成语音报 403(2026-10)

现象:输入文字后点「开始广播」没有声音,日志中 edge_tts 报 WSServerHandshakeError: 403, message='Invalid response status'。

原因:微软在 2026 年 10 月把 Edge Read Aloud 的合成端点从 speech.platform.bing.com 迁到了 api.msedgeservices.com。旧端点在 2026-10-10 起于多数地区开始返回 403,2026-10-12 起全球(含美国)全线 403。 edge-tts 7.2.8 尚未跟进,因此这不是本机、网络或时钟的问题——可以这样确认: --list-voices 仍然正常返回、系统时钟已 NTP 同步、换一台机器同样 403。

修复:

python3 patch_edge_tts_403.py            # 打补丁
python3 patch_edge_tts_403.py --verify   # 实际合成一段音频确认

补丁会把 edge_tts/constants.py 里的 WSS_URL 指向新端点,运行前会自动备份原文件。 注意:重新安装或升级 edge-tts 会覆盖 constants.py,补丁随之丢失,重跑一次脚本即可。 其它参数:--check 只看当前状态,--revert 还原成官方原始端点。

上游进展见 rany2/edge-tts#490, 对应修复 PR 为 #491。

注意事项

  1. 需要联网使用(edge-tts 需要访问 Microsoft 服务)
  2. 音频输出使用 ALSA 设备 plughw:audiocodec,0,可根据实际设备调整
  3. 缓存目录最多保存10个文件,收藏的文件不会被自动清理
  4. 合成失败会自动重试 3 次(新端点对同一 IP 有限流),仍失败则返回错误提示,不会再把空音频文件当成正常广播;缓存里已损坏(0 字节)的文件也不会被播放

APK 文件

项目包含 Android 端 APK 文件:小喇叭_1.0.0.apk


Made with ❤️ for 社恐人士