[MD]
## 快速开始
> [!IMPORTANT]
> Better Speech Chat 以服务端和客户端两个独立构建分发,两端都必须安装且使用相同的 LeviLamina 基线,否则无法握手。
1. 在服务器上安装 [LeviLamina](https://lamina.levimc.org/)(基线 26.10.14)。
2. 在每位玩家的基岩版客户端安装 LeviLamina 客户端。
3. 安装对应构建:服务端 → `plugins/bschat/`,客户端 → `mods/bschat/`。
4. 重启后进服,按住 **V** 说话,松开结束;按 **J** 打开语音设置面板。
完整安装与配置说明见[快速上手指南](../docs/getting-started.md)。
## 功能特性
- **实时语音** — 进服即聊,近乎无延迟,多人同时说话也不卡。
- **按键说话(PTT)** — 按住 **V** 发言,松开即静音,随时掌控麦克风。
- **超省带宽** — 音频高倍压缩,无人说话时几乎零流量占用。
- **无需开放端口** — 语音走游戏自带的连接通道,玩家端零额外设置。
- **实时字幕** — 服务端本地语音转写,以屏幕字幕呈现,听不清也能看懂。
- **服务端与客户端双端** — 一个项目产出两种构建,部署即用。
- **优雅降级** — 麦克风、模型或网络异常时只隔离自身,不拖垮游戏。
- **国际化** — 面向玩家的文案接入 LeviLamina i18n 体系。
## 本版更新
`v0.1.2` 把语音转文字的模型选择权交给服主:服务端包内新增 `Install-SttModel.cmd`,运行后交互式选择档位,脚本自动下载 sherpa-onnx 运行时与所选模型并写入配置,提供纯中文(极速/标准/高配)与中英、中英粤三语共五档,全部为 sherpa-onnx 在线识别器的真流式模型。服务端不再把识别模型写死为 transducer,新增 `sttModel.modelType` 支持全部在线模型族,旧配置无需改动即可继续使用。`v0.1.1` 把语音协议固定为 **v1** 稳定契约并采用只追加的演进方式,同时补齐双端能力协商:客户端声明自身能力,服务端回传双方共同支持的子集,只有协商通过的功能才会启用,因此新旧版本可以互相连通,可选功能不可用时基础语音照常工作。完整历史见[更新日志](CHANGELOG.md)。
> [!IMPORTANT]
> 目前发布的仍是测试版本,配置项与新增功能仍可能调整;但语音协议已固定为 v1,只做向下兼容的追加式扩展,不会在 v1 内做破坏性变更。请在使用后及时关注更新日志。
## 兼容性
| 端 | 构建 | 安装路径 |
| ------------------ | ---------------- | ------------------------ |
| 服务端(BDS) | 服务端构建 | `plugins/bschat/` |
| 客户端(基岩版) | 客户端构建 | `mods/bschat/` |
以上均面向 **Windows x64** 平台,运行于 **LeviLamina 26.10.14**。
> [!TIP]
> 语音无需开放独立端口,也不用配置 UDP 通道——它复用游戏自带的连接。
## 从源码构建
使用 xmake 在 Windows x64 上构建,通过 `--target_type` 产出服务端或客户端版本。构建命令、输出结构与依赖说明见[源码构建指南](../docs/building.md)。
## 命令
| 命令 | 说明 |
| -------------------------------- | ---------------------------------- |
| `/bsc test` | 在本人客户端跑一次端到端自检,结果写入客户端日志。 |
| `/bsc play <file>` | 把一段 WAV 经语音下行播放(文件放在 `<服务端配置目录>/audio/`,或直接给绝对路径)。 |
| `/bsc stop` | 停止正在播放的 WAV。 |
| `/bsc admin` | 打开管理员面板,仅管理员(OP)可用。 |
以下命令随开发进度逐步提供(规划中):
| 命令 | 说明 |
| -------------------------------- | ---------------------------------- |
| `/bsc help` | 显示语音命令帮助。 |
| `/bsc mute <player>` | 强制静音指定玩家。 |
| `/bsc unmute <player>` | 解除指定玩家静音。 |
| `/bsc toggle` | 开关自身麦克风。 |
## 语言
- 服务端:中文、英文
- 客户端:中文、英文
模组面向玩家的文案接入 LeviLamina i18n,翻译资源随双端构建分发。
## 常见问题
### BSChat 是什么?
它是面向 Windows x64 LeviLamina 的 Minecraft 基岩版游戏内实时语音聊天模组。玩家按住按键说话,语音经游戏自带数据通道上行,服务端混音后回传所有在线玩家,可选实时语音转文字字幕。
### 需要开放端口或配置 UDP 通道吗?
不需要。语音走游戏内置的数据通道,玩家与服务端都无需额外网络配置。
### 无人说话时占用带宽吗?
几乎不占用。音频充分压缩,无人说话时下行数据趋近于零。
### 怎么开启字幕?
字幕由**服务端**转写,识别模型**不随包附带**,需要用服务端包里的 `Install-SttModel.cmd` 自行下载。这一步完全可选,不装也不影响语音聊天。
1. 在服务端打开命令行,**进入 `bschat.dll` 所在目录**(通常是 `plugins/bschat/`),运行:
```bat
Install-SttModel.cmd
```
2. 屏幕上会列出模型档位,输入编号回车即可选中:
| 你的情况 | 选 |
| --- | --- |
| 玩家基本都说中文 | **2** |
| 有人中英混说 | **4** |
| 有粤语玩家 | **5** |
| 配置较低或带宽有限 | **1** |
| 纯中文、追求最高精度且 CPU 较强 | **3** |
下载体积 25–570 MB 不等,过程中会显示进度。装完会看到:
```
安装完成。
请重启服务端使配置生效,并确认客户端已开启字幕。
```
不想用菜单的话可以直接指定,例如 `Install-SttModel.cmd bilingual-zh-en`。
3. **重启服务端**。模型在启动时加载。
4. 客户端按 **J** 打开语音面板,确认字幕已开启。
模型、运行时和配置都落在模组目录内,不动服务端其他文件。重复运行脚本可以换档位;删掉 `stt/` 目录也不会有影响,那里面只是可重新下载的权重。
完整说明(含排错)见 [docs/getting-started.md](../docs/getting-started.md)。
### 可以更换说话按键吗?
可以。进服后按 **J** 打开语音设置面板即可改绑按键;也可以直接修改客户端 `config.json` 中的 `pttKey` 与 `settingsKey`。
## 开发状态与计划
- 核心语音引擎、协议、双端适配层与单元测试均已实现;下一步是真实设备下的延迟与音频质量调优。
- 后续计划包括近聊/距离音频、环境混响、VAD 自动语音检测与多人房间体系。
> [!TIP]
> **测试重点:** 报告延迟、杂音或字幕问题时,请尽量附上两端构建版本、LeviLamina 版本、日志与麦克风/网络环境。
## 已知限制
- 仍未正式发布;配置项与新增功能可能继续调整,但 v1 语音协议只做向下兼容的追加式扩展。
- 字幕只显示文本,不显示说话者名字。
- 管理员面板目前只暴露服务端语音开关。
- 当前不提供位置/距离衰减与环境混响(接口已预留,后续版本实现)。
- VAD 自动语音检测接口已就位,但默认关闭。
- 暂无独立 UDP 通道,暂无多人房间/频道体系。
- v0 末暂不支持移动端/伴侣应用采集。
- Minecraft 或 LeviLamina 更新后,需重新确认兼容性。
如需报告可复现问题,请[提交 Issue](https://github.com/copper-lamp/BSChat/issues)。
[/MD]