- New variable {gift_count} (gift quantity) alongside existing {gift_num}
- Default templates: 感谢由{viewer_name}投喂的{gift_count}个{gift_name}
- danmaku_handler passes gift_count=message.num
- README variable table and examples updated
- Rebuild portable zip (83.9 MB)
202 lines
8.5 KiB
Markdown
202 lines
8.5 KiB
Markdown
# bililive-touhou-tts
|
|
|
|
Bilibili 直播弹幕 + ゆっくり TTS 语音朗读器。
|
|
|
|
自动连接指定 Bilibili 直播间,将弹幕实时转换为日语片假名,通过 **AquesTalk** 引擎以ゆっくり语音朗读出来。
|
|
|
|
## 功能
|
|
|
|
- 实时接收 Bilibili 直播弹幕
|
|
- 中文 → 拼音 → 片假名自动转换
|
|
- 英文转片假名(english-to-kana 49K 词库 + 字母拼读兜底)
|
|
- 可选扫码登录(获取未打码用户名)
|
|
- Web 控制面板(暗色主题)
|
|
- 支持 8 种ゆっくり音色 + 语速/音量调节
|
|
- 即开即用,无需安装任何运行时
|
|
|
|
## 快速开始
|
|
|
|
### 方式 1:便携版(推荐)
|
|
|
|
解压 `bililive-touhou-tts-portable.zip`,双击 `start.bat`,浏览器自动打开控制面板。
|
|
|
|
无需安装 Python 或 Node.js。
|
|
|
|
### 方式 2:源码运行
|
|
|
|
```bash
|
|
# 安装依赖
|
|
pip install -r requirements.txt
|
|
cd aquestalk.js && npm install && npx tsc && cd ..
|
|
npm install
|
|
|
|
# 启动服务
|
|
python server.py
|
|
|
|
# 打开浏览器
|
|
# http://127.0.0.1:8080
|
|
```
|
|
|
|
## 使用说明
|
|
|
|
1. 浏览器打开 `http://127.0.0.1:8080`
|
|
2. (可选)点击「Login with QR」用 Bilibili 客户端扫码登录
|
|
3. 输入直播间房间号
|
|
4. 选择音色、语速、音量
|
|
5. 点击「Start」
|
|
|
|
弹幕会实时显示在日志区域,同时通过扬声器朗读。
|
|
|
|
## 命令行参数
|
|
|
|
```
|
|
python server.py [--port PORT] [--host HOST] [--debug]
|
|
python main.py --room-id ROOM_ID [--voice VOICE] [--speed SPEED]
|
|
```
|
|
|
|
### server.py 参数
|
|
|
|
| 参数 | 默认值 | 说明 |
|
|
|------|--------|------|
|
|
| `--port` / `-p` | `8080` | HTTP 服务端口 |
|
|
| `--host` | `127.0.0.1` | 绑定地址 |
|
|
| `--debug` / `-d` | 关闭 | 调试日志 |
|
|
|
|
### main.py 参数(纯 CLI 模式)
|
|
|
|
| 参数 | 默认值 | 说明 |
|
|
|------|--------|------|
|
|
| `--room-id` / `-r` | 必填 | Bilibili 直播房间号 |
|
|
| `--voice` / `-v` | `f1` | 音色 |
|
|
| `--speed` / `-s` | `100` | 语速 (50-300) |
|
|
| `--sessdata` | 空 | Bilibili cookie |
|
|
| `--list-devices` | — | 列出音频设备 |
|
|
|
|
## 语音类型
|
|
|
|
| 音色 | 说明 |
|
|
|------|------|
|
|
| `f1` | 靈夢 (标准ゆっくり女声) |
|
|
| `f2` | 魔理沙 |
|
|
| `m1` | 男声1 |
|
|
| `m2` | 男声2 |
|
|
| `r1` | 机器人 |
|
|
| `dvd` | DVD |
|
|
| `imd1` | imd1 |
|
|
| `jgr` | jgr |
|
|
|
|
## 事件语音规则
|
|
|
|
除弹幕外,礼物、盲盒、进房、上舰、醒目留言等事件也可以自定义语音。规则保存在 `event_rules.json`(首次运行自动生成),可在 Web UI 的 "Event Voice Rules" 面板编辑。
|
|
|
|
模板为空字符串 = 该事件静音。`enabled` 控制整类事件开关,`skip_free_gift` 跳过银瓜子免费礼物。
|
|
|
|
### 事件与变量
|
|
|
|
| 事件 | 变量 |
|
|
|------|------|
|
|
| `danmaku` 弹幕 | `{uname}` `{msg}` |
|
|
| `gift` 普通礼物 | `{viewer_name}` `{gift_name}` `{gift_count}` `{gift_price}` `{gift_coin_type}` |
|
|
| `blind_box` 盲盒礼物 | `{viewer_name}` `{gift_name}` `{gift_count}` `{blind_box_gift}` |
|
|
| `enter_room` 进房 | `{viewer_name}` `{user_uid}` |
|
|
| `follow` 关注 | `{viewer_name}` `{user_uid}` |
|
|
| `interact_other` 其他互动 | `{viewer_name}` `{user_uid}` `{interact_type}`(分享/特别关注/互粉) |
|
|
| `buy_guard` 上舰 | `{ships_viewer_name}` `{ships_level}`(舰长/提督/总督) `{ships_num}` `{ships_price}` |
|
|
| `guard_toast` 上舰提示 | `{ships_viewer_name}` `{ships_level}` `{guard_days}` `{toast_msg}` |
|
|
| `super_chat` 醒目留言 | `{viewer_name}` `{super_chat_content}` `{super_chat_price}` `{super_chat_duration}` |
|
|
|
|
示例模板:
|
|
|
|
```json
|
|
{
|
|
"templates": {
|
|
"gift": "感谢由{viewer_name}投喂的{gift_count}个{gift_name}",
|
|
"blind_box": "感谢由{viewer_name}投喂的{gift_count}个{gift_name}爆出了{blind_box_gift}",
|
|
"enter_room": "欢迎{viewer_name}进入直播间",
|
|
"buy_guard": "恭喜{ships_viewer_name}成为尊贵的{ships_level}",
|
|
"super_chat": "{viewer_name}的醒目留言:{super_chat_content}"
|
|
}
|
|
}
|
|
```
|
|
|
|
## 技术架构
|
|
|
|
```
|
|
Bilibili 弹幕 (blivedm)
|
|
│
|
|
▼
|
|
中文→片假名 (pypinyin + 映射表)
|
|
│
|
|
▼
|
|
英文→片假名 (english-to-kana 49K 词库 + phonemize G2P 兜底)
|
|
│
|
|
▼
|
|
AquesTalk TTS (aquestalk.js + v86 WASM 模拟)
|
|
│
|
|
▼
|
|
WAV 音频播放 (sounddevice)
|
|
```
|
|
|
|
## 子项目
|
|
|
|
| 目录 | 说明 |
|
|
|------|------|
|
|
| `aquestalk.js/` | AquesTalk TTS 引擎 (WebAssembly x86 模拟) |
|
|
| `blivedm/` | Bilibili 直播弹幕 Python 库 |
|
|
| `zh-yukuuri/` | 中文→ゆっくり Web 前端 (参考) |
|
|
|
|
## 构建便携包
|
|
|
|
```bash
|
|
python build.py
|
|
# 输出: dist/bililive-touhou-tts-portable.zip
|
|
```
|
|
|
|
## 许可
|
|
|
|
MIT License
|
|
|
|
```
|
|
.
|
|
-==- +
|
|
::. %*%#*:
|
|
--.. #***:*+********-. .-+*#%%%%%%%##*+-: ..::-- -.
|
|
.*---%#=.=*+*+*+******+#@%%#%%%#%%%#%#%#%%%%#%#%%#%@%- .:-+###**+***+:+**:.-#+=
|
|
::+.-+++#+####****+**%#%%#%%#%%#%%#%#%%#%%#%#%%%%#%%#%#%%@@%#+**+****+**+**=-+#*::-+:
|
|
*-. #+.=+*+***%%%%%%#%%#%%#%#%#%#%#%%#%%#%#%#%#%#%%#%#%%%@@%%##*+***+**++*:=**#-.-+.
|
|
*###**::*%%%#%#%#%#%#%%#%%#%%#%%#%%%#%#%#%%#%#%#%%#%#%%#%#%@@@@@%#*+*+**+**=-::-*#. =
|
|
+-#=%##%#%#%#%#%%%#%#%#%#%#%#%%#%%#%#%%%#%#%%%%#%%#%%%#%%#%#%#%@@@@@#########=+*+*+=:+.
|
|
+---:%#%%%#%%#%%#%#%%%#%%#%%#%#%%#%#%%#%#%%%#%#%%#%%#%#%#%%#%#%%#%@%@@@######*++##--==
|
|
=-##%%#%#%#%%#%%#%#%#%#%%#%%%#%#%%#%#%#%#%#%#%#%#%#%#%%%#%%%%#%#%#%@%@@%##**+++%#==-
|
|
.%%%#%#%%%#%%#%#%%%#%%%%#%#%#%%#%#%%%#%%%#%%%#%%#%%#%#%#%@##%%#%%%%%%@%#+%##*+#: :-:+
|
|
:==#%#%%#%%%%#%%#%#%%#%@#%%%%%#%%#%%%%%#%#%#%#%#%%#%%%%%%%%@%%#%%##+-=-=-=-%#*++##**=:+
|
|
===--=--+%%%#%@%#%%#%%@@%%%#%@%%%%%#%@%#%#%%%#%@%%#%#%#%@%#%@**=--=--=+#%@@@%*+#%%=-%*
|
|
:%#%#@%%%%==-----+*%%@@%@#%%%@%%@@#%%#@@%%%#%@%%#@%%%#*+-----=##@%#%@@@%%@%@%@%%%*-+:%@:
|
|
%%#%@%%@@#%@@%%@%@%%@%@@%%%#%@@%@%%#%#@@@%%%%%@%@%@@%%%%@%@@@@%@@@%%%@@@%@@@@@%-+%##%@%*
|
|
*%#%@@%@@#@@%@%@@@@%%@@@@%%%%@@@@#==%@%@%@@%%#%%@@@@@%%%%%%%@%@@@%@%%#%@@@@%@%@@#######%@.
|
|
.%%%%@%@@%%@%@%%@%@%@@@%@%#@@%@%@#=-:*%@%@@%#%+%%%@%@%@%@@#%@@@%@@@@@%%%%%@@@@@%@####*+*+*%.
|
|
=%#@@@@@%%@@@%@@@@+@@%@#-#%+@@@@#-=:..*@@@%@=%*=+%@@@@@@%@%%%@@@%@@%@@%%#%@%@%@@@###*+*####%*-*
|
|
*%#@%@%@%@%@%@%@%-#%@%*+=##-@%@#==:....+@@@%-#*.:=@%@@=-%@@=*@%@@@%@@@@@%%%@@@@%@%##**+*--:++*-
|
|
##@@@%%#@@@@%@@*==*@====-%--+@*-=:... ..-%@*=.#%-=*#%%+=-+@*-=%@%@@@%@@%@@%%@%@@@%*+**#+-*%*+.
|
|
*%@%@- @%@%@@@+==#+ =####%-....=-.........+-:.# :######%=*+%.-+@@@%@@@@@@%@@@@@%@%*####+=%%.
|
|
=%%%. .@@@-#@=-=*:####*##%... ..... ... ......%####*##*%..*::.:@%@@*%%#%@@@%@%@@@#-:==+@@@@.
|
|
:%# -@--%%%--:- %******#........... .... ...*********+ +..+ *.=.-++-%@@@@@@@%@@%@%#%@@%@:
|
|
: :-#-==#:::-.=%#%%%%*.. ... .. .......... #######+ .:.:..=*=+#+#%==*%@%@%@@@@%@@@@@@@@:
|
|
#***%-:---+.-................... .. .......---=+--=:-:-**+###%=*=*@@@@@%@@@@%@%@%@@:
|
|
.#***%.:...:.......... .. .... ................:.:.:.:.-****###=-==%@%@@@%@%@@@@@@%@.
|
|
.#*+##...:...:............. ...... .. .................-*+*####=-=-@@@%@@@@@@%@%@@@%.
|
|
#***#............. .-... .........* ... ..............:**+###*=-=*%@@@%@@%@@@@@@@%%
|
|
.#+**%.................#@**+========-..................:****##*=-+%@%@@@%@@@%@%@%@@%
|
|
:=+=*##:......... ... ...*++========*..... .............:+-+*+#*=#@@@@@%@@@%@@@@@@*%*
|
|
#.=*--*...... .... .... .:#====-==-#.. ..... .........=-*=#*#%+%@%@%@@@@%@@@@%@%@-@=
|
|
-+ %@%-.. .................*+===*=....... .... .. ...=.+=-+#+=@%%@@%@@%@@@%@@@@*:%:
|
|
:%%@%@@-..... .. ... ... ......... .. .................@%+@@@@%#%@%@#%@@@%=%@%@-:#
|
|
:%%@@@%%#.. .......... ....... ........ ... .. ... . ==%#@%@%%%%%@@%-@@%@#:@@@% :*
|
|
:%%%@%.%%@#:... .. ......... .... .. .... .........+- -%%%@@@%#%@%@:-@#-@+ %@%= =.
|
|
:%%@@: %%-%@@*:..... ... ................... .. :+. =#@@%=#*%%@@- =@:.@: #@#
|
|
:%@@- %#.-@@@@#%*:....... .. .. .... .. ...:=+. #%@% -+-#@%= *- .#. *%.
|
|
+%@: #: @%@- *- .=*+=-.... ... ...-++=. .%@# . .%@= : = *.
|
|
*@: + %# =@- %:
|
|
#. .*
|
|
|
|
``` |