Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
RepoMusicPlayer
游戏内音乐播放器:支持 mp3/ogg/wav/flac 本地与直链,仅主机安装即可通过语音通道广播给全房间。
| Last updated | a day ago |
| Total downloads | 72 |
| Total rating | 0 |
| Categories | Quality Of Life Server-side AI Generated Mods Audio |
| Dependency string | StarrySkyandYears-RepoMusicPlayer-1.2.0 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2100README
REPO Music Player(游戏内实时播放器)
在 R.E.P.O. 里放你自己的音乐:本地文件、自建服务器文件、或者免费电台的 http(s) 直链。热键切歌、屏幕提示、音量实时调整。
---
先说清楚:没有账号登录 / 推荐列表
本模组不包含任何音乐平台的账号登录、推荐列表拉取、版权曲库播放。
原因不是技术上做不到,而是这类功能需要:
- 平台私有接口 + 登录态(Cookie / Token);
- 音频地址往往带签名、有时限、且多为加密/DRM 流;
- 绕过这些属于规避服务方的访问控制,违反其用户协议。
所以这里只做你有权播放的音源:你自己的文件,或你自己服务器/公开免费电台的直链。
想听自己的歌单:用客户端把已购买/已下载的歌曲导出成 mp3/ogg,放进
music文件夹即可,体验和在线播放器一样。
---
安装
BepInEx/plugins/RepoMusicPlayer/RepoMusicPlayer.dll
依赖 BepInEx 5.4.21+。首次启动会生成:
BepInEx/config/RepoMusicPlayer/
├─ playlist.txt ← 播放列表
└─ music/ ← 直接丢音频文件进来也能自动识别
---
播放列表格式
playlist.txt,每行一个音源,# 开头为注释:
# 相对路径(相对 music 文件夹)
song.mp3
album/track02.ogg
# 绝对路径
D:\\Music\\playlist\\01.wav
# http(s) 直链(自建服务器 / 免费电台)
https://example.com/radio.mp3
- 支持格式:mp3 / ogg / wav / flac;
playlist.txt为空时,自动扫描music/下的音频文件;- 播放中改完列表按 F5 重载。
---
广播给所有玩家(仅主机装)
REPO 没有通用的音频广播接口,唯一能“别人不装插件也听得到”的通道就是游戏自己的 Photon Voice 语音。本模组的做法是:
- 主机开始播放时,取主机自己的
PlayerVoiceChat.recorder; - 把它从「麦克风」切换成 AudioClip 源,指向当前歌曲并循环;
TransmitEnabled = true,走原有的语音编码 → 网络 → 对方的语音播放器;- 停止/切歌/暂停时恢复成麦克风。
所以只有主机需要装,客机什么都不用装。
必须知道的代价(这是语音通道的物理限制,不是实现偷懒):
| 限制 | 说明 |
|---|---|
| 音质 | 走 Opus 语音编码,是“语音级”音质,不是音乐级 |
| 距离衰减 | 和正常语音一样受距离/墙体影响,离得远听不清;对方关掉语音或调低语音音量也听不到 |
| 占用麦克风 | 广播期间主机的麦克风被音乐占用,说话传不出去(切歌/暂停即恢复) |
| 依赖语音系统 | 房间禁用语音、或主机没有可用录音设备时,广播不可用,会自动退回仅本地播放 |
配置:
| 配置 | 默认 | 说明 |
|---|---|---|
4. 广播 / 广播给所有玩家 |
开 | 关掉就只在自己客户端播放 |
4. 广播 / 仅房主可广播 |
开 | 防止多个客户端同时抢占语音通道 |
如果你要的是“高保真、无视距离的全员广播”,那需要自建音频流(Opus 分片 + 网络同步),客机也必须装插件——那属于另一套方案,可以再单独做。
---
FLAC 支持
.flac 由插件自带的纯 C# 解码器处理(不依赖 ffmpeg / 第三方库),本地文件和 https://…/track.flac 直链都可以:
- 支持 CONSTANT / VERBATIM / FIXED(0-4) / LPC(1-32) 子帧、Rice / Rice2 残余、独立声道与 left-side / right-side / mid-side;
- 支持 8/12/16/20/24/32 bit、多种采样率、块大小编码;
- 解码在后台线程进行,不会卡主线程;解码完成后直接生成
AudioClip播放; - 超过约 6000 万采样点(≈ 10 分钟立体声)会跳过并提示,避免内存爆掉;
- 不校验 CRC、不处理罕见扩展(比如带 ID3v2 的 flac 会自动跳过标签)。
首次播放 flac 会有 1~3 秒解码时间(取决于文件长度),Toast 会显示“解码 FLAC…”。
热键
| 热键 | 功能 |
|---|---|
F9 |
下一首 |
F7 |
上一首 |
F8 |
暂停 / 继续(没在播放时开始播放) |
F10 |
音量 +5% |
F6 |
音量 -5% |
F5 |
重载播放列表并切歌 |
热键可在 BepInEx/config/xingKong.RepoMusicPlayer.cfg 里改,也支持 None 关闭。
配置
| 配置 | 默认 | 说明 |
|---|---|---|
1. 通用 / 启用 |
开 | 总开关 |
2. 播放 / 音量 |
0.6 | 0~1,热键实时调整并保存 |
2. 播放 / 随机播放 |
关 | 下一首随机 |
2. 播放 / 循环播放 |
开 | 播完自动下一首 |
2. 播放 / 常驻显示状态 |
关 | 屏幕上方一直显示曲名/状态/音量 |
---
行为说明与限制
- 本地播放:只在你自己的客户端出声,不会同步给队友,也不进游戏的语音/音效混音器;
- 音频通过
UnityWebRequestMultimedia加载,本地文件与直链一致;一首播完才切下一首,长播客会整段载入内存; - 游戏切到后台、或菜单触发
AudioListener.pause时,音乐可能一起被暂停,这是引擎行为; - 电台直链若需要特定的 ICY/分块协议,Unity 的 MP3 解码不一定支持,建议先用短文件验证;
.m4a/ DRM 加密流 Unity 无法解码,会提示“无法解码该音频”;.flac已由内置解码器支持。
---
从源码构建
dotnet build RepoMusicPlayer.csproj -c Release -p:RepoDir="D:\\steam\\steamapps\\common\\REPO"