Files
PA_horn_speaker/README.md
T

155 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PA_horn_speaker
Web广播系统 - 吆喝用的喇叭(i人专用)
通过Web界面输入文字,利用 edge-tts 将文本转化为语音并播放,支持循环播放和语音文件管理。
## 功能特点
- **文本转语音**:输入文字即可生成语音
- **多种声音选择**:支持多种音色,包括普通话、方言、香港、台湾口音
- **循环播放**:支持设置间隔时间的循环播放模式
- **语音文件管理**:播放历史、收藏、重命名、删除
- **主题切换**:支持深色/浅色主题
- **状态条与日志**:一条状态随时说明喇叭在做什么(待机 / 正在合成 / 正在播报 / 上次没成功),需要时展开看完整日志
## 支持的声音
| 声音名称 | 类型 |
|---------|------|
| 晓晓(温暖女声) | 普通话 |
| 晓伊(活泼女声) | 普通话 |
| 云健(激情男声) | 普通话 |
| 云希(阳光男声) | 普通话 |
| 云夏(可爱男声) | 普通话 |
| 云扬(新闻男声) | 普通话 |
| 辽宁-小贝 | 方言 |
| 陕西-小妮 | 方言 |
| 香港-晓佳 | 粤语 |
| 香港-晓曼 | 粤语 |
| 香港-云龙 | 粤语 |
| 台湾-晓陈 | 台语 |
| 台湾-晓雨 | 台语 |
| 台湾-云哲 | 台语 |
## 安装依赖
```bash
# 安装 Python 依赖
pip install flask edge-tts
# 安装音频播放工具
sudo apt-get install mpg123
# 修复 edge-tts 的 403(微软 2026-10 更换了端点,不修则合成不出语音)
python3 patch_edge_tts_403.py
```
## 界面
控制界面按「极简一页」来组织:一屏只做一件事——写内容、点广播,音频文件与日志收在下方可展开的行里;
宽屏(≥1000px)时这两块自动变成右侧常显的一栏。
配色遵循一条规则:**颜色只表示喇叭是否在响**。待机时整个界面是无彩的(只有灰绿中性色),
只有正在播报时才会出现唯一的朱红——页面顶端一条横线、状态点、以及变成「停止广播」的主按钮。
深浅两套主题,右上角切换,首次打开跟随系统。
## 使用方法
### 启动服务
```bash
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。
**修复**:
```bash
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](https://github.com/rany2/edge-tts/issues/490),
对应修复 PR 为 [#491](https://github.com/rany2/edge-tts/pull/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 社恐人士