R.E.P.O.
Install with App

Details

Latest version
1.2.0
Last Updated
First Uploaded
Downloads
29
Likes
0
Size
25KB
Dependants

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 语音。本模组的做法是:

  1. 主机开始播放时,取主机自己的 PlayerVoiceChat.recorder;
  2. 把它从「麦克风」切换成 AudioClip 源,指向当前歌曲并循环;
  3. TransmitEnabled = true,走原有的语音编码 → 网络 → 对方的语音播放器;
  4. 停止/切歌/暂停时恢复成麦克风。

所以只有主机需要装,客机什么都不用装。

必须知道的代价(这是语音通道的物理限制,不是实现偷懒):

限制 说明
音质 走 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"
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.