Client · v2.1

Melodify / modernMP

在 Minecraft 里装一个会感知环境的播放器。 你在战斗、在水底、在夜晚、在建造——它会自己切到对应的歌, 还在全屏歌词上把当前这个词放大做光晕。Apache-2.0,由 心事抱抱、云杉、N0ne 共同开发。

这是什么

Melodify 是另一份 Minecraft 音乐播放器 Mod,与本站的 MuoniumPlayer 同源同协议。

modernMP 是它在 Git仓库 上的名字(仓库沿用旧名);用户面前的 mod 名是 Melodify, mod_id 也是 melodify。两边指同一个项目。

和 MuoniumPlayer 的差别一句话讲完:

  • MuoniumPlayer——做国内曲库 + 全功能 + 多版本。客户端主力。
  • Melodify——在 MuoniumPlayer 基础上加了海外曲库 + 词云 + 环境感知切歌 + 节拍同步。视觉党与"听感党"。

三者(MuoniumPlayer / Melodify / MusicParty (mpsync))由 心事抱抱、云杉、N0ne 共同开发, 房间协议互通——你可以和朋友一个用 MuoniumPlayer、一个用 Melodify 进同一个房间。

选哪个? 要全功能 + 多版本(1.20.1 → 26.2)→ MuoniumPlayer; 要海外曲库 + Cadenza 词云 + 自动切歌 + 节拍同步 → Melodify。 房间互通协议一致,所以两个都装也无所谓。

能力一览

Melodify 在 MuoniumPlayer 的全套能力之上,多了四样东西。

YouTube Music 源 独有

内置 YouTubeMusicService。签名时间戳在本机生成、不上传第三方; 只取 audio/mp4 自适应流,主动跳过 Opus;和站内平台一样本地缓存,不连远端解析服务。

  • 无 API key、无 OAuth;登录走浏览器扫码/输入 cookie
  • 下载到本地时落盘 .mp4,播放器内统一转码
  • 搜索、播放列表、收藏夹可用;推荐/电台不可用(API 不暴露)

Cadenza 全屏歌词 独有

词云样式(hero 词居中、唱到的字描光晕、唱完的词向外漂移),独立于 MuoniumPlayer 的 10 种全屏样式。 风格见 CadenzaLyricsView

  • 每行的"hero 词"由服务端按重要度选,不一定是首词
  • 当前字的光晕颜色取自主题色的二级亮度
  • 不支持逐字时退化成普通整行高亮

Ambient · Mood 自动切歌 独有

按游戏状态打 13 个标签(mood),由决策树强制优先级选下一首。 标签体系见 Mood.java,决策树见 MoodDecider.java

  • 标签示例:combat · nether · underwater · night · building · mining · peace · victory
  • 决策规则:战斗 > 下界 > 水底 > 夜晚 > 建造 > 探险 > 自由
  • 可以一键关掉,回到手动/随机/列表模式

Beat + EmbeatMLP 独有

BeatAnalyzer 离线估计 BPM + 相位,让 crossfade 落在 kick 上; EmbeatMLP 纯 Java 前向传播做"心灵感应"——下一首歌的节拍能接到上一首尾巴上。

  • 本地计算,不联网、不上传播放历史
  • 仅在跨歌曲过渡生效,单曲内不重排
  • 对纯人声/电子混合曲目效果最稳;纯钢琴/古典不强制

房间互通 与 MuoniumPlayer 共享

用同一套 varint+JSON 协议,三个加载器产出的帧逐字节相同。 见 文档 · 一起听

构建 / 依赖 与 MuoniumPlayer 共享

Maven 包 yun.shan:musicplayer;1.20.1 + 1.21.11 两套源码分支, 每个版本各自产 Fabric / Forge = 4 个 jar。NeoForge 与 26.2 不在维护范围

vs MuoniumPlayer

功能差异表表。房间协议相同,安装时可并存。

能力MuoniumPlayerMelodify
国内平台(网易云/QQ/汽水/B站)内置
YouTube Music内置
10 种全屏歌词样式
Cadenza 词云
环境感知切歌 (Mood)
节拍同步 (Beat)
一起听房间(与对方互通)
HUD / 灵动岛 / 桌面歌词
15 套主题✓(同款预设)
支持版本1.20.1 / 1.21.1 / 1.21.11 / 26.21.20.1 / 1.21.11
加载器Fabric / Forge / NeoForgeFabric / Forge
作者心事抱抱、云杉、N0ne同上(共同开发)
协议Apache-2.0Apache-2.0

一句话:Melodify = MuoniumPlayer + 海外曲库 + 词云 + 环境感知 + 节拍感知。少了国内平台和 26.2 / NeoForge 支持。

安装与前置

四步装好。Melodify 不发布 26.2 与 NeoForge。

  1. 装好对应版本的 Fabric 或 Forge(1.20.1 两种都行;1.21.11 两种都行)。
  2. 装前置 —— Fabric 侧是 Fabric API + Fabric Language Kotlin,Forge 侧是 Kotlin for Forge
  3. MC 百科 Melodify 页面 下载 jar,放进 .minecraft/mods/
  4. 启动游戏 → 首次启动进设置向导(选默认音源、登录账号、调界面外观)→ 进游戏按 右 Shift 打开播放器。

前置清单(详细)

MC 版本加载器前置
1.20.1FabricFabric Loader 0.18.2+ · Fabric API 0.92.11+1.20.1 · Fabric Language Kotlin 1.13.12+kotlin.2.4.0
1.20.1ForgeForge 1.20.1-47.0.0+ · Kotlin for Forge 4.3.0+
1.21.11FabricFabric Loader 0.17.3+ · Fabric API 0.141.6+1.21.11 · Fabric Language Kotlin
1.21.11ForgeNeoForge/Forge 21.11.x · Kotlin for Forge 6.0.0+

如果和 MuoniumPlayer 同版本共存,需要确保两份 mod 的 Kotlin 前置版本一致(都吃 Fabric Language Kotlin 同一份就行)。

音源与账号

Melodify 自带 YouTube Music。其他平台需要装 MuoniumPlayer。

  • YouTube Music(内置)——设置向导里点"添加账号",会打开浏览器走 OAuth/扫码/cookie 任一方式。账号仅存本机。
  • 本地文件——.minecraft/config/melodify/local/ 目录里丢 mp3/flac/mp4,播放器自动扫描。
  • URL 直链——粘贴可访问的 mp3/mp4 链接,可作为临时播放源(不在缓存里留)。
  • 自定义脚本——参考 文档 · 自定义音源脚本,写 .js 注册成新源。Melodify 与 MuoniumPlayer 共用脚本接口。
凭据仅本机。Melodify 把 YouTube Music 的登录态写到 config/melodify/credentials/,加密存储; 你可以从设置向导里"导出"或"擦除",不会上传到任何服务器——这是和官方客户端一样的做法。

首次启动

  1. 启动游戏 → 看见 设置向导
  2. 选音源(默认 YouTube Music,可留到以后再加)。
  3. 登录(浏览器跳走,回来后向导继续)。
  4. 选主题(15 套之一,预选 Muonium Default)。
  5. 选歌词样式(默认 / Cadenza / 其他 9 套中任意)。
  6. 选 HUD 模式(默认 / 灵动岛 / 全屏 / 关)。
  7. Ambient Mood 默认开,会弹一条提示告诉你怎么关。

所有选项都可在游戏内 设置 → Melodify 里随时改。

Cadenza 全屏歌词

Melodify 独有的全屏样式,代号 Cadenza。视觉特征:

  • hero 词:每行有一个最重要的词(不一定首词),居中放大。决定方式见服务端 CadenzaToken
  • 唱到的字描光晕:当前字的边缘加一道同色高光,颜色取自主题色二级亮度。
  • 唱完漂移:唱完的字向上、向左或向右小距离飘出,给下一行腾地方。
  • 不支持逐字时:整行高亮,不做漂移。

切换:游戏内按 F7 循环切全屏样式;或在 设置 → 外观 → 全屏歌词样式 里挑。

Cadenza 在低帧率场景会自动降级——关掉漂移、保留高亮;不卡顿优先。

Ambient · Mood 自动切歌

13 个 mood 标签 + 决策树。强制优先级,组合不冲突。

标签清单

标签触发条件
combat正在攻击/被攻击/视野里有敌对生物
nether在下界(含下界要塞/堡垒/熔岩地带)
underwater完全浸没水中 ≥3 秒
night主世界时间 ≥12000 + 没有敌对生物
victory击杀凋灵/末影龙
building连续放置 ≥10 个方块
mining连续挖掘 ≥10 个方块
explore奔跑 ≥20 秒且不在以上场景
peace闲置 ≥30 秒
creative创造模式下默认
death刚死亡 30 秒内
rain下雨/下雪
spawn刚重生 / 切换世界 30 秒内

决策树

优先级:victory > death > combat > nether > underwater > night > rain > mining > building > explore > peace > spawn > creative。 同一时间多个标签命中时,取优先级最高的。

关掉:设置 → Ambient → 自动切歌 → 关。关掉后回到列表/随机/单曲循环。

Beat + EmbeatMLP

离线算 BPM + 相位,跨歌过渡落在 kick 上。

BeatAnalyzer

首次播放时本地算 BPM 与每个小节的相位,缓存 7 天;纯人声/纯钢琴曲目会被识别成"无 kick",跳到 fallback 渐弱过渡。

EmbeatMLP

"心灵感应"——预测下一首歌的开头是否能接到当前曲尾;纯 Java 前向传播,不联网、不依赖 ONNX 运行时,jar 体积不增加。

怎么开关

  • 游戏内:设置 → 播放 → 节拍同步,默认开。
  • 房间内:服从房主设置,成员无法独立关闭(避免错位)。

房间协议

Melodify 和 MuoniumPlayer 共用一套协议——同一个房间可混用。

  • 帧格式:varint length + JSON payload。详细说明见 文档 · 一起听
  • 消息类型:加入/退出/播放/暂停/seek/队列/聊天/投票跳过
  • 客户端识别:MuoniumPlayer 发 "mu"、Melodify 发 "mp"、老客户端发空。
  • 服务端:MusicParty (mpsync),由 心事抱抱、云杉、N0ne 共同开发。

构建产物

每版发 4 个 jar。两个版本 × 两个加载器。

文件名MC 版本加载器
musicplayer-1.20.1-fabric-2.1.jar1.20.1Fabric
musicplayer-1.20.1-forge-2.1.jar1.20.1Forge
musicplayer-1.21.11-fabric-2.1.jar1.21.11Fabric
musicplayer-1.21.11-forge-2.1.jar1.21.11Forge

Maven 包坐标:yun.shan:musicplayer:2.1。本地源码路径:src/main/java/yun/shan/musicplayer/

配置文件

配置文件路径 .minecraft/config/melodify/

目录结构

config/melodify/
├── melodify.json           # 主配置
├── credentials/            # 账号凭据(AES 加密)
├── cache/                  # 解码后的音频缓存
├── lyrics/                 # 下载的歌词文件
├── scripts/                # 自定义音源脚本
└── themes/                 # 自定义主题 JSON

关键字段(melodify.json)

字段默认值说明
version2配置格式版本
thememuonium-default主题 id
hudModeislandoff / text / hud / island
lyricsStylecadenza全屏歌词样式(Melodify 默认 Cadenza)
ambient.enabledtrueAmbient Mood 自动切歌
ambient.moodauto手动指定某时
beat.enabledtrue节拍同步
room.id""进入的房间 id(来自房主口令)
room.url""房间服务器地址(mpsync)

和 MuoniumPlayer 的字段大部分通用,主题 id / 歌词样式 id 完全相同。

常见问题

能和 MuoniumPlayer 同时装吗?

可以。两者共用同一份 Kotlin 前置,且房间协议相同。功能有重叠(同一曲两个 mod 都尝试播放), 实务上建议二选一,或者把一个的音源清空只留另一个。

为什么没有 26.2 / NeoForge?

Melodify 只维护 1.20.1 + 1.21.11 两套;NeoForge 不在维护范围。需要 26.2 / NeoForge 就用 MuoniumPlayer。

Cadenza 词云在哪里切换?

设置 → 外观 → 全屏歌词样式,或按 F7 循环切。

Ambient 怎么关掉?

设置 → Ambient → 自动切歌 → 关。关掉后回到列表/随机/单曲循环。

房间和 MuoniumPlayer 互通吗?

互通。同一个 mpsync 服务器,MuoniumPlayer 客户端和 Melodify 客户端都能进。 客户端识别 tag 是 mu / mp,参见 文档 · 一起听

没找到我想要的功能怎么办?

先看 MuoniumPlayer 大概率有。两个 mod 由同一批人开发,功能会在两边同步出现。 没同步的话,看一下 关于 · 免责声明,Melodify 的功能取舍以"环境感知 + 视觉党"为主。

「Melodify & MuoniumPlayer 的联动小屋喵」QQ 群二维码

有问题、想加点什么?来群里说

Melodify 与 MuoniumPlayer 共用同一个交流群,反馈与建议都收 · 群号 27635246

一键加群