Back to mods
Disc Jockey Plus project artwork

CurseForge · Minecraft mod

Disc Jockey Plus

(Play Note Block Songs In Minecraft!) NBS SONGS!! Original mod is Disc Jockey. This project just upgraded it and added some features. 原作品为 Disc Jockey,此项目只是对它进行了升级,加装了一些功能。 仅此而已

Choose a version Pick your version below, then grab the matching file.

Quick answer

Which Disc Jockey Plus release should I use?

Updated today
Latest stable file DJP-NeoForge-2.9.5.1+mc26.3.jar
Game version 26.3
Loader NeoForge

Disc Jockey Plus DJP-NeoForge-2.9.5.1+mc26.3.jar targets 26.3 with NeoForge. The project page does not say whether this file belongs on the client, dedicated server, or both. No extra mods listed for this file.

Where it goes

Is Disc Jockey Plus required on the client, server, or both?

The project page does not say whether this file belongs on the client, dedicated server, or both.

Client Source doesn’t say
Dedicated server Source doesn’t say
Loader for this release NeoForge
Required install it here Optional supported, not mandatory Not supported do not install here Source doesn’t say do not assume

The source does not explicitly classify this release as client-only or server-only.

What else does Disc Jockey Plus DJP-NeoForge-2.9.5.1+mc26.3.jar need?

DJP-NeoForge-2.9.5.1+mc26.3.jar. Change the file and its required mods may change too.

No extra mods listed for this file

This file does not list any required mods. Do not add a library just because a different file uses it.

2 listed on this file 1 pulled in by one of those mods
PianoLib Optional for Disc Jockey Plus DJP-NeoForge-2.9.5.1+mc26.3.jar
optional
Matching file found Matched file: pianolib-1.2.5+DJP2.9.5-NeoForge.jar
PianoLib Optional for Disc Jockey Plus DJP-NeoForge-2.9.5.1+mc26.3.jar
optional
Matching file found Matched file: 1.1.2+DJP2.8.2-NeoForge
Disc Jockey Plus Needed by PianoLib
pulled in
Matching file found Matched file: DJP-NeoForge-2.9.5.1+mc26.3.jar

1 extra mod was pulled in by another dependency. Indented rows show who needs each one. We only count dependency files that match this setup. A file for another loader does not fill the gap.

Before you install it

Add Disc Jockey Plus without breaking your instance.

Built for Disc Jockey Plus DJP-NeoForge-2.9.5.1+mc26.3.jar. Pick another file and the loader, install side or required mods may change.

  1. 01

    Stick to this file

    Use DJP-NeoForge-2.9.5.1+mc26.3.jar. It targets 26.3 with NeoForge; another release may have different loader, side or dependency requirements.

  2. 02

    Bring the mods it needs

    This file does not list any required mods. Do not add a library just because a different file uses it.

  3. 03

    Put it on the correct side

    The project page does not say whether this file belongs on the client, dedicated server, or both.

  4. 04

    Pick the file you checked

    Use the “Get this file” button beside DJP-NeoForge-2.9.5.1+mc26.3.jar. It opens that exact file at the source.

About this project

What does Disc Jockey Plus add?

[center][size=6][b]🎵 Disc Jockey Plus[/b][/size] [size=4][b]A professional note-block music mod for Minecraft Java 26.2 – 26.3[/b][/size] [i]Unofficial fork of the original [b]Disc Jockey[/b] — fully ported to 26.2 / 26.3[/i]

Built-in i18n · Real-time Spectrum · 88-Key Piano · In-Game NBS Editor · MIDI ↔ NBS

[color=green][b][Fabric] ✅ Stable[/b][/color] — Fabric Loader ≥ 0.19.5 [color=orange][b][NeoForge] ✅ Stable[/b][/color] — NeoForge ≥ 26.3.0.76

[color=red][b]⚠️ Do NOT use NeoForge 26.3.0.56-beta — that build is broken and will crash.[/b][/color]

💬 Want the latest updates? Search [b]SQL_Minecraft[/b] on Bilibili and subscribe![/center]

[h1]Overview[/h1]

[b]Disc Jockey Plus[/b] is an unofficial fork of the original [i]Disc Jockey[/i], fully ported to [b]Minecraft Java 26.2 – 26.3[/b]. On top of the original feature set it adds an [b]88-key piano keyboard[/b], [b]real-time spectrum visualization[/b], [b]bidirectional MIDI ↔ NBS conversion[/b], [b]non-destructive NBS pitch repair (Clamp / Fold)[/b], [b]instrument remapping[/b], a [b]preview system[/b], a [b]sleep timer[/b], an [b]in-game NBS editor[/b], and [b]full localization[/b].

Press [b]J[/b] or run [code]/discjockey[/code] to open the main GUI.

Check for updates in-game with [code]/discjockey update[/code].

[h1]Dependencies[/h1]

[h3]Fabric[/h3] [list] [_][b]Fabric Loader[/b] ≥ 0.19.5 — [color=green]Required[/color] [_][b]Fabric API[/b] ≥ 0.161.0 — [color=green]Required[/color] [_][b]Cloth Config API[/b] ≥ 26.2.155 — [color=green]Required[/color] [_][b]Mod Menu[/b] ≥ 20.0.1 — Optional [*][b]PianoLib[/b] ≥ 1.0.7+DJP2.7.7 — Optional [/list]

[h3]NeoForge[/h3] [list] [*][b]NeoForge Loader[/b] ≥ 26.3.0.52 -beta — [color=green]Required[/color] [/list]

PianoLib provides the 88 high-quality piano samples used by the piano screen. Without it the mod falls back to [code]NOTE_BLOCK_HARP[/code] with pitch shifting.

[h1]Core Features[/h1]

[h2]🎹 88-Key Piano Keyboard[/h2] [list] [_]Covers all [b]88 semitones[/b], [b]A0 (−39) ~ C8 (48)[/b], zeroed at A0 — mapped one-to-one to PianoLib / NoteBlock pitches. [_][b]Physical keyboard mapping[/b] (C-major layout): [code]A S D F G H J K L ; '[/code] for white keys, [code]W E T Y U O P[/code] for black keys. Keys [b]1[/b] / [b]2[/b] / [b]3[/b] are fixed to A0 / A#0 / B0 for quick testing and recording. [_][b]Octave transposition[/b]: [code][−][/code] / [code][+][/code] buttons, or [b]0[/b] to jump back to C4. [_][b]Three-tier sound path[/b], tried in order: [list=1] [_][code]PianoAPI/code [_]PianoLib 88-note cache ([code]pianolib:key_0[/code] … [code]key_87[/code]) [_][code]NOTE_BLOCK_HARP[/code] with pitch fallback [/list] …so sound works both on the main menu and in-world. [_][b]MIDI recording[/b]: built-in [code]MidiRecorder[/code] supports sustain pedal (CC64), reverb (CC91 / CC93), ADSR envelopes and per-note release times. Recordings are auto-saved to [code]recordings/[/code]. [/list]

[h2]▶️ Piano-Screen MIDI Playback [color=green][NEW][/color][/h2]

Play [code].mid[/code] files straight from the piano screen — with note-block / piano timbre, live key highlighting and piano-roll animation.

[list] [_][code]● REC[/code] at [code]x=10[/code] — start / stop MIDI recording [_][b][code]▶ PLAY[/code][/b] at [code]x=74[/code] — play / stop the selected [code].mid[/code] [*][b][code]♪ filename.mid[/code][/b] at [code]x=138[/code] — cycle to the next [code].mid[/code] in the folder [/list]

[list] [_]MIDI files are read from [b][code]config/disc_jockey/midi/[/code][/b] — the same folder used by [i]Import MIDI[/i] and [i]Export MIDI[/i], so anything you export can be played back immediately. [_]Uses [code]javax.sound.midi.Sequencer[/code] with [b]no internal synthesizer attached/b, so notes are routed to the mod's own sound path instead of doubling up with Java's synth. [_]Percussion (channel 9) is skipped; notes outside A0–C8 are ignored safely. [_]While playing, the button becomes [code]■ STOP[/code], keys light up, and the roll scrolls. [/list]

[h2]✏️ In-Game NBS Editor [color=green][NEW][/color][/h2]

A full [b]piano-roll NBS editor/b — write and edit [code].nbs[/code] songs without leaving the game.

[b]How to open:[/b] in the Disc Jockey GUI, select a song and click [b]✏ 编辑[/b] ([b]top-left corner[/b] of the screen).

[list] [_][b]Left-click empty cell[/b] — place a note (previews immediately) [_][b]Left-click existing note[/b] — delete it [_][b]Space[/b] — play / stop [_][b]←[/b] [b]→[/b] — scroll the timeline [_][b]↑[/b] [b]↓[/b] — scroll the pitch axis [_][code]+[/code] / [code]−[/code] — zoom (row height 5–13, column width 4–16) [_][b]Instrument[/b] button — cycle through the 16 NBS instruments [_][code]t−[/code] / [code]t+[/code] — tempo ±50 (range 100–4000) [_][code]SAVE[/code] — save to [code]config/disc_jockey/songs/<name>.nbs[/code] [_][code]AS[/code] — save as [code]<name>_edit.nbs[/code] [*][code]MIDI[/code] — load the next [code].mid[/code] from [code]config/disc_jockey/midi/[/code] [/list]

[spoiler=Implementation details] [list] [_][b]Pitch range[/b] −33 … 54 (88 rows), matching [code]MidiToNbsImporter[/code] ([code]signedNoteId = midi − 54[/code]). [_]The keyboard column highlights the [b]playable note-block range[/b] ([code]noteId 0–24[/code]) in yellow; the grid tints that band green, so you can see at a glance which notes will need octave folding. [_]Notes are packed with [code]Note.packNoteId(packed, noteId)[/code], where [code]packed = tick | layer<<16 | instrument<<32[/code]; [code]uniqueNotes[/code] is rebuilt on save. [_]Playback timing follows [code]NbsToWavExporter[/code]: [code]tickMs = 100000 / tempo[/code]. [*][b]Preview audio uses note-block timbres[/b] (NBS is a note-block format), octave-folded into 0–24 and pitched with [code]2^((n−12)/12)[/code]. [/list] [/spoiler]

[h2]📊 Real-Time Spectrum[/h2] [list] [_][b]16-band[/b] spectrum with peak-hold and exponential decay — smooth, no ghosting. [_][b]Five render styles[/b], switchable with one click in the GUI: [code]BAR[/code] · [code]WAVE[/code] · [code]RING[/code] · [code]MIRROR[/code] · [code]PARTICLE[/code] [*]Shown on the main menu and as an in-world HUD (controlled by the [code]spectrumAlwaysVisible[/code] config). Both playback and preview drive the spectrum. [/list]

[h2]🎵 NBS Playback & Repair[/h2] [list] [_]Loads [code].nbs[/code] songs with [b]play / pause / stop / resume / loop / shuffle / autoplay[/b]. [_][b]Clamp / Fold (non-destructive)[/b]: performs runtime octave folding for songs outside the 0–24 range. The original file is never modified and nothing is written to disk — only a [code]foldedNotes[/code] cache is generated. [list] [_][code]fold auto[/code] — enable automatic repair [_][code]fold scan[/code] — scan every song [_][code]fold info <song>[/code] — pitch-range report for one song [/list] [_][b]Transpose[/b]: runtime octave-fold transposition that keeps [code]#F24[/code] from being clipped. [/list]

[h2]🎼 MIDI Import & Export[/h2] [list] [_][b]NBS → MIDI export/b: writes a standard [code].mid[/code] containing tempo, 4/4 time signature and bar markers; output goes to the [code]midi/[/code] folder and is opened automatically. [_][b]MIDI → NBS import/b: reads [code].mid[/code] / [code].midi[/code] through a built-in file chooser, parses note events, builds a [code]Song[/code], and falls back safely on empty files or parse failures. [/list]

[h2]👂 Preview System[/h2] [list] [_]Preview from both the [b]main menu[/b] and [b]in-world[/b] — uses [code]SoundSource.MASTER[/code] outside a world, then auto-switches to [code]playLocalSound[/code] after joining one. [_][b]M[/b] mutes / unmutes preview; [b]P[/b] toggles preview looping. Both keybindings are customizable in [b]Controls[/b]. [_]Preview and playback are [b]mutually exclusive[/b] — starting one stops the other. [_][code]/discjockey autoplay[/code] now governs [b]both[/b] the song player and the previewer, so turning it off stops the preview after the current song instead of continuing through the whole list. [/list]

[h2]📝 Lyrics Output[/h2] [list] [_]Loads companion lyric data alongside songs and can output lines to chat. [_]Configurable: chat output, public output, minimum interval, and DM-style delivery (burst limit, max targets, radius) — see the config screen. [/list]

[h2]🎷 Instrument Management[/h2] [list] [_][code]instrument <name>[/code] counts nearby note blocks of the specified instrument. [_][code]remapInstruments[/code] manages instrument mapping — [code]map[/code] / [code]unmap[/code] / [code]show[/code] / [code]clear[/code] — resolving server-side instrument detection differences. [/list]

[h2]⚡ Speed & Transpose[/h2] [list] [_][code]speed <value>[/code] adjusts playback / preview speed (default [code]1.0[/code], shared with preview stepping). [_][code]transpose[/code] transposes the current song (octave folding, preserving [code]#F24[/code]). [/list]

[h2]🛡️ Anti-Anti-Cheating[/h2] Reinforced anti-anti-cheat handling compared with the original Disc Jockey.

[h1]📜 Command Reference[/h1]

[spoiler=Basic Playback] [list] [_][code]/discjockey[/code] — Open the Disc Jockey GUI [_][code]/discjockey play <song>[/code] — Play the specified song [_][code]/discjockey pause[/code] — Pause playback [_][code]/discjockey stop[/code] — Stop playback [_][code]/discjockey resume[/code] — Resume playback [_][code]/discjockey now[/code] — Show the song currently playing [_][code]/discjockey info[/code] — Show current song info and playback speed [_][code]/discjockey progress[/code] — Show playback progress [/list] [/spoiler]

[spoiler=Playback Modes] [list] [_][code]/discjockey loop yes|no[/code] — Enable / disable single-song loop [_][code]/discjockey shuffle[/code] — Toggle shuffle mode [_][code]/discjockey autoplay[/code] — Toggle auto-play (queue continuation) [_][code]/discjockey random[/code] — Play a random song from the GUI list [/list] [/spoiler]

[spoiler=Preview] [list] [_][code]/discjockey preview <song>[/code] — Preview a song, or show preview status [_][b]M[/b] — Mute / unmute preview [*][b]P[/b] — Enable / disable preview looping [/list] Keybindings are customizable in [b]Controls[/b]. [/spoiler]

[spoiler=Speed & Transpose] [list] [_][code]/discjockey speed <value>[/code] — Adjust playback speed [_][code]/discjockey transpose[/code] — Transpose the current song [/list] [/spoiler]

[spoiler=NBS Repair (Clamp / Fold)]

Non-destructive and temporary — the original file is never modified.

[list] [_][code]/discjockey clamp <xxx.nbs>[/code] — Temporarily repair the specified song [_][code]/discjockey unclamp[/code] — Cancel repair [_][code]/discjockey clampstatus[/code] — Show the current repair status [_][code]/discjockey fold auto[/code] — Enable automatic repair [_][code]/discjockey fold info <xxx.nbs>[/code] — Pitch-range report for one song [_][code]/discjockey fold rebuild[/code] — Re-run repair (refresh status) [_][code]/discjockey fold scan[/code] — Scan all songs for needed repair [_][code]/discjockey fold status[/code] — Same as [code]clampstatus[/code] [/list] [/spoiler]

[spoiler=Instrument Management] [list] [_][code]/discjockey instrument <name>[/code] — Count nearby note blocks of an instrument [_][code]/discjockey remapInstruments map <src> <dst>[/code] — Create an instrument mapping [_][code]/discjockey remapInstruments unmap <src> <dst>[/code] — Remove a mapping [_][code]/discjockey remapInstruments show[/code] — Show current mappings [*][code]/discjockey remapInstruments clear[/code] — Clear all mappings [/list] [/spoiler]

[spoiler=Utilities] [list] [_][code]/discjockey reload[/code] — Reload all songs (includes hot-reload watching) [_][code]/discjockey spectrum[/code] — Toggle the in-GUI spectrum display [_][code]/discjockey sleep <seconds>[/code] — Stop playback after a timer / cancel it [_][code]/discjockey update[/code] — Check for updates in-game [*][code]/discjockey help[/code] — Show help [/list] [/spoiler]

[h1]🖥️ GUI Cheat Sheet[/h1]

[h3]Disc Jockey main screen[/h3] [list] [_][code]✏ 编辑[/code] — [b]Top-left[/b] — Open the NBS editor for the selected song [_][code]⚙[/code] — Bottom-left — Open the config screen [_][code]🎹 🎶→[/code] — Bottom bar — Open the piano screen [_]Search box — Top — Filter songs [*]Right-click a song — List — Show song details [/list]

[h3]Piano screen[/h3] [list] [_][code]● REC[/code] — [code]x=10[/code] — Start / stop MIDI recording [_][code]▶ PLAY[/code] — [code]x=74[/code] — Play / stop the selected [code].mid[/code] [_][code]♪ filename[/code] — [code]x=138[/code] — Cycle to the next [code].mid[/code] [_][code]🔊[/code] / [code]🔇[/code] — Top-right — Toggle note-block broadcast [_][code]X[/code] — Top-right — Close (auto-saves any recording) [_][code][−][/code] [code][+][/code] [code]C4[/code] [code]CLR[/code] [code]SCN[/code] — Below the roll — Octave / reset / clear / rescan [/list]

[h3]NBS editor[/h3] See the [b]In-Game NBS Editor[/b] section above.

[h1]📌 Notes[/h1] [list] [_]Only [b]legal [code].nbs[/code] files[/b] are supported. [_][b]Clamp / Fold[/b] is non-destructive: it only takes effect at runtime and reverts when disabled or cancelled. [_]The GUI includes real-time spectrum visualization (5 styles). [_]All keybindings can be customized in [b]Controls[/b]. [_]Requires [b]Fabric Loader[/b] + Minecraft 26.2–26.3 (NeoForge support is in development); optionally depends on [b]PianoLib[/b] / [code]sqlmc.PianoAPI[/code] for high-quality piano sound. [_]MIDI playback and the NBS editor read from [code]config/disc_jockey/midi/[/code]; songs live in [code]config/disc_jockey/songs/[/code]. [/list]

[h1]🔧 Technical[/h1] [list] [_][b]Two-layer spectrum architecture[/b] — [code]SpectrumDataSmoother[/code] (peak-hold + exponential decay) and [code]SpectrumVisualizer[/code] (unified playback/preview source) — for stable, non-pegging rendering. [_][b]Playback[/b] uses [code]SongPlayer[/code] (configurable async playback, [code]RateLimiter[/code]-based packet rate limiting, sleep timer) together with [code]Tuner[/code] (multi-layer fallback note-block lookup after octave folding). [_][b]Cross-frame safe GUI opening[/b]: [code]Main.openScreenOnNextTick[/code] defers screen requests to the next tick via a [code]ConcurrentLinkedQueue[/code], avoiding the race where a closing chat screen carries the new GUI away with it. [_][b]NBS editor[/b] reuses the existing conversion layer: [code]MidiToNbsImporter[/code] for MIDI → NBS, [code]NbsToMidiExporter.writeNbs()[/code] for saving, and [code]Note.packNoteId[/code] / [code]Note.extractNoteId[/code] for note packing — so edited files stay byte-compatible with the rest of the mod. [*][b]Obfuscation-friendly[/b]: all [code]Screen[/code] subclasses, [code]MidiRecorder[/code], and reflection-using classes ([code]PianoPlayer[/code] / [code]DiscJockeyHud[/code]) are preserved verbatim via ProGuard keep rules to prevent [code]VerifyError[/code]. [/list]

[hr][hr]

[center][size=6][b]🎵 Disc Jockey Plus[/b][/size] [size=4][b]为 Minecraft Java 版 26.2 – 26.3 打造的专业级音符盒音乐模组[/b][/size] [i]原版 [b]Disc Jockey[/b] 的非官方分支 · 完整适配 26.2 / 26.3[/i]

内置多语言 · 实时频谱 · 88 键钢琴 · 游戏内 NBS 编辑器 · MIDI ↔ NBS 互转

[color=green][b][Fabric] ✅ 稳定主分支[/b][/color] — Fabric Loader ≥ 0.19.5 [color=orange][b][NeoForge] ✅ 稳定分支[/b][/color] — NeoForge ≥ 26.3.0.76

[color=red][b]⚠️ 切勿使用 NeoForge 26.3.0.56-beta —— 该版本本身有问题,会崩溃。[/b][/color]

💬 想要获取最新更新?在 B 站搜索 [b]SQL_Minecraft[/b] 并关注我![/center]

[h1]简介[/h1]

[b]Disc Jockey Plus[/b] 是原版 [i]Disc Jockey[/i] 的非官方分支,已完整适配 [b]Minecraft Java 版 26.2 – 26.3[/b]。在原版基础上追加了 [b]88 键钢琴键盘[/b]、[b]实时频谱可视化[/b]、[b]MIDI ↔ NBS 双向转换[/b]、[b]NBS 音域修复(Clamp / Fold)[/b]、[b]音色映射[/b]、[b]预览系统[/b]、[b]睡眠定时器[/b]、[b]游戏内 NBS 编辑器[/b],并内置完整多语言支持。

按 [b]J[/b] 键或输入 [code]/discjockey[/code] 即可打开主界面。

游戏内检查更新:[code]/discjockey update[/code]

[h1]依赖项目[/h1]

[h3]Fabric[/h3] [list] [_][b]Fabric Loader[/b] ≥ 0.19.5 — [color=green]必需[/color] [_][b]Fabric API[/b] ≥ 0.161.0 — [color=green]必需[/color] [_][b]Cloth Config API[/b] ≥ 26.2.155 — [color=green]必需[/color] [_][b]Mod Menu[/b] ≥ 20.0.1 — 可选 [*][b]PianoLib[/b] ≥ 1.0.7+DJP2.7.7 — 可选 [/list]

[h3]NeoForge[/h3] [list] [*][b]NeoForge Loader[/b] ≥ 26.3.0.52 — [color=green]必需[/color] [/list]

PianoLib 提供钢琴界面所用的 88 个高品质钢琴采样;未安装时自动回退到 [code]NOTE_BLOCK_HARP[/code] 变调发声。

[h1]核心功能[/h1]

[h2]🎹 88 键钢琴键盘[/h2] [list] [_]完整覆盖 [b]88 个半音[/b],[b]A0(−39)~ C8(48)[/b],零点为 A0,与 PianoLib / NoteBlock 音高一一对应。 [_][b]物理键盘映射[/b](C 大调布局):白键 [code]A S D F G H J K L ; '[/code],黑键 [code]W E T Y U O P[/code];[b]1[/b] / [b]2[/b] / [b]3[/b] 固定映射 A0 / A#0 / B0,便于试音与录制。 [_][b]八度移调[/b]:[code][−][/code] / [code][+][/code] 按钮,或 [b]0[/b] 键一键回到 C4。 [_][b]三级发声路径[/b],依次择优: [list=1] [_][code]PianoAPI[/code]([code]sqlmc.api.PianoAPI[/code]) [_]PianoLib 88 音缓存([code]pianolib:key_0[/code] … [code]key_87[/code]) [_][code]NOTE_BLOCK_HARP[/code] 变调兜底 [/list] 因此主菜单与世界内均可发声。 [_][b]MIDI 录制[/b]:内置 [code]MidiRecorder[/code],支持延音踏板(CC64)、混响(CC91 / CC93)、ADSR 包络与按音区分段的释放时间;录音自动保存至 [code]recordings/[/code] 目录。 [/list]

[h2]▶️ 钢琴界面 MIDI 回放 [color=green][新增][/color][/h2]

在钢琴界面直接播放 [code].mid[/code] 文件,使用音符盒 / 钢琴音色,并同步点亮琴键、驱动滚落动画。

[list] [_][code]● REC[/code] 位于 [code]x=10[/code] — 开始 / 停止 MIDI 录制 [_][b][code]▶ PLAY[/code][/b] 位于 [code]x=74[/code] — 播放 / 停止当前 [code].mid[/code] [*][b][code]♪ 文件名.mid[/code][/b] 位于 [code]x=138[/code] — 切换到下一首 [code].mid[/code] [/list]

[list] [_]MIDI 文件读取自 [b][code]config/disc_jockey/midi/[/code][/b] —— 与「导入 MIDI」「导出 MIDI」共用同一目录,导出的文件可立即回放。 [_]使用 [code]javax.sound.midi.Sequencer[/code] 且 [b]不挂载 Java 自带合成器[/b]([code]getSequencer(false)[/code]),音符统一走模组自身发声通道,避免双重发声。 [_]自动跳过打击乐轨(通道 9);超出 A0–C8 的音符安全忽略。 [_]播放中按钮变为 [code]■ STOP[/code],琴键高亮、Piano Roll 同步滚落。 [/list]

[h2]✏️ 游戏内 NBS 编辑器 [color=green][新增][/color][/h2]

内置完整的 [b]钢琴卷帘 NBS 编辑器[/b]([code]NoteBlockEditScreen[/code]),无需离开游戏即可编写、修改 [code].nbs[/code] 曲目。

[b]打开方式[/b]:在 Disc Jockey 主界面选中一首曲子,点击 [b]✏ 编辑[/b](位于界面 [b]左上角[/b])。

[list] [_][b]左键点击空格[/b] — 放置音符(立即试听) [_][b]左键点击已有音符[/b] — 删除该音符 [_][b]空格键[/b] — 播放 / 停止 [_][b]←[/b] [b]→[/b] — 横向滚动时间轴 [_][b]↑[/b] [b]↓[/b] — 纵向滚动音高轴 [_][code]+[/code] / [code]−[/code] — 缩放(行高 5–13、列宽 4–16) [_][b]乐器[/b] 按钮 — 循环切换 16 种 NBS 乐器 [_][code]t−[/code] / [code]t+[/code] — 速度 ±50(范围 100–4000) [_][code]SAVE[/code] — 保存到 [code]config/disc_jockey/songs/<名称>.nbs[/code] [_][code]AS[/code] — 另存为 [code]<名称>_edit.nbs[/code] [*][code]MIDI[/code] — 载入 [code]config/disc_jockey/midi/[/code] 中的下一个 [code].mid[/code] [/list]

[spoiler=实现要点] [list] [_][b]音高范围[/b] −33 … 54(共 88 行),与 [code]MidiToNbsImporter[/code] 完全一致([code]signedNoteId = midi − 54[/code])。 [_]左侧键盘列用 [b]黄色[/b] 标出音符盒可发声区([code]noteId 0–24[/code]),网格中该区间带绿色底色,一眼即可看出哪些音符需要八度折叠。 [_]音符打包复用 [code]Note.packNoteId(packed, noteId)[/code],其中 [code]packed = tick | layer<<16 | instrument<<32[/code];保存时自动重建 [code]uniqueNotes[/code]。 [_]播放时序沿用 [code]NbsToWavExporter[/code]:[code]tickMs = 100000 / tempo[/code]。 [*][b]试听使用音符盒音色[/b](NBS 属音符盒格式),先八度折叠到 0–24,再以 [code]2^((n−12)/12)[/code] 计算音高。 [/list] [/spoiler]

[h2]📊 实时频谱可视化[/h2] [list] [_][b]16 段频谱[/b],峰值保持 + 指数衰减,渲染丝滑无重影。 [_][b]5 种渲染样式[/b],GUI 内一键切换:[code]条形 BAR[/code] · [code]波形 WAVE[/code] · [code]圆环 RING[/code] · [code]镜像 MIRROR[/code] · [code]粒子 PARTICLE[/code] [*]主菜单与世界内 HUD 常驻显示(由 [code]spectrumAlwaysVisible[/code] 配置项控制);播放与预览均驱动频谱。 [/list]

[h2]🎵 NBS 播放与修复[/h2] [list] [_]加载 [code].nbs[/code] 曲目,支持 [b]播放 / 暂停 / 停止 / 恢复 / 循环 / 随机 / 自动连播[/b]。 [_][b]Clamp / Fold(非破坏性)[/b]:对超出 0~24 音域的曲目做运行时八度折叠,[b]不改原文件、不写盘[/b],仅生成 [code]foldedNotes[/code] 缓存。 [list] [_][code]fold auto[/code] — 启用自动修复 [_][code]fold scan[/code] — 扫描全部曲目 [_][code]fold info <曲目>[/code] — 查看单首音域报告 [/list] [_][b]移调[/b]:运行时八度折叠移调,保护 [code]#F24[/code] 不被压掉。 [/list]

[h2]🎼 MIDI 双向转换[/h2] [list] [_][b]NBS → MIDI 导出[/b]([code]disc_jockey.screen.export_midi[/code]):导出标准 [code].mid[/code],含速度、4/4 拍号与小节线标记,输出至 [code]midi/[/code] 目录并自动打开。 [_][b]MIDI → NBS 导入[/b]([code]disc_jockey.screen.import_midi[/code]):通过内置文件选择器读取 [code].mid[/code] / [code].midi[/code],解析音符事件并生成 [code]Song[/code],空文件与解析失败均有安全兜底。 [/list]

[h2]👂 预览系统[/h2] [list] [_][b]主菜单与世界内[/b] 均可预览;世界外使用 [code]SoundSource.MASTER[/code],进世界后自动切换为 [code]playLocalSound[/code]。 [_][b]M[/b] 预览静音 / 取消静音;[b]P[/b] 开启 / 关闭预览循环;按键绑定可在「控制」中自定义。 [_]预览与播放 [b]互斥[/b]:启动一方自动停止另一方。 [_][code]/discjockey autoplay[/code] 现在 [b]同时控制播放器与预览器[/b] —— 关闭后预览会在当前这首播完时停止,而不再继续串联整个列表。 [/list]

[h2]📝 歌词输出[/h2] [list] [_]随曲目加载配套歌词数据,并可输出到聊天栏。 [_]可配置项:聊天输出、公共输出、最小间隔,以及私信式推送(突发上限、最大目标数、推送半径)—— 详见配置界面。 [/list]

[h2]🎷 乐器管理[/h2] [list] [_][code]instrument <名称>[/code] 统计周围指定乐器的音符盒数量。 [_][code]remapInstruments[/code] 音色映射管理:[code]map[/code] / [code]unmap[/code] / [code]show[/code] / [code]clear[/code],把一种乐器映射到另一种,解决服务器乐器判定差异。 [/list]

[h2]⚡ 速度与移调[/h2] [list] [_][code]speed <数值>[/code] 调整播放 / 预览速度(默认 [code]1.0[/code],与预览步进共享)。 [_][code]transpose[/code] 对当前曲目移调(八度折叠,保护 [code]#F24[/code] 不被压掉)。 [/list]

[h2]🛡️ 防反作弊[/h2] 增强了原版 Disc Jockey 的防反作弊处理。

[h1]📜 指令大全[/h1]

[spoiler=基础播放控制] [list] [_][code]/discjockey[/code] — 打开 Disc Jockey GUI [_][code]/discjockey play <曲目>[/code] — 播放指定曲目 [_][code]/discjockey pause[/code] — 暂停播放 [_][code]/discjockey stop[/code] — 停止播放 [_][code]/discjockey resume[/code] — 恢复播放 [_][code]/discjockey now[/code] — 查看当前正在播放的曲目 [_][code]/discjockey info[/code] — 查看当前曲目信息与播放速度 [_][code]/discjockey progress[/code] — 查看播放进度 [/list] [/spoiler]

[spoiler=播放模式] [list] [_][code]/discjockey loop yes|no[/code] — 开启 / 关闭单曲循环 [_][code]/discjockey shuffle[/code] — 切换随机播放模式 [_][code]/discjockey autoplay[/code] — 开启 / 关闭自动连播 [_][code]/discjockey random[/code] — 随机播放 GUI 列表中的一首曲目 [/list] [/spoiler]

[spoiler=预览系统] [list] [_][code]/discjockey preview <曲目>[/code] — 预览指定曲目或查看预览状态 [_][b]M[/b] — 预览静音 / 取消静音 [*][b]P[/b] — 开启 / 关闭预览循环 [/list] 按键绑定可在「控制」设置中修改。 [/spoiler]

[spoiler=速度与移调] [list] [_][code]/discjockey speed <数值>[/code] — 调整播放速度 [_][code]/discjockey transpose[/code] — 对当前曲目进行移调 [/list] [/spoiler]

[spoiler=NBS 修复]

修复为 [b]临时、非破坏性操作[/b],不会改动原文件。

[list] [_][code]/discjockey clamp <xxx.nbs>[/code] — 对指定曲目进行临时修复 [_][code]/discjockey unclamp[/code] — 取消修复 [_][code]/discjockey clampstatus[/code] — 检查当前修复状态 [_][code]/discjockey fold auto[/code] — 启用自动修复 [_][code]/discjockey fold info <xxx.nbs>[/code] — 查看单首曲目的修复状态 [_][code]/discjockey fold rebuild[/code] — 重新执行修复(刷新状态) [_][code]/discjockey fold scan[/code] — 扫描所有曲目是否需要修复 [_][code]/discjockey fold status[/code] — 等同于 [code]clampstatus[/code] [/list] [/spoiler]

[spoiler=乐器管理] [list] [_][code]/discjockey instrument <名称>[/code] — 统计周围指定乐器的音符盒数量 [_][code]/discjockey remapInstruments map <源> <目标>[/code] — 建立音色映射 [_][code]/discjockey remapInstruments unmap <源> <目标>[/code] — 移除指定映射 [_][code]/discjockey remapInstruments show[/code] — 查看当前映射状态 [*][code]/discjockey remapInstruments clear[/code] — 清空所有音色映射 [/list] [/spoiler]

[spoiler=实用工具] [list] [_][code]/discjockey reload[/code] — 重新加载所有曲目(含热重载监听) [_][code]/discjockey spectrum[/code] — 开启 / 关闭 GUI 内频谱显示 [_][code]/discjockey sleep <秒数>[/code] — 定时停止播放 / 取消定时 [_][code]/discjockey update[/code] — 游戏内检查更新 [*][code]/discjockey help[/code] — 查看帮助信息 [/list] [/spoiler]

[h1]🖥️ 界面速查[/h1]

[h3]Disc Jockey 主界面[/h3] [list] [_][code]✏ 编辑[/code] — [b]左上角[/b] — 为选中曲目打开 NBS 编辑器 [_][code]⚙[/code] — 左下角 — 打开配置界面 [_][code]🎹 🎶→[/code] — 底部栏 — 打开钢琴界面 [_]搜索框 — 顶部 — 过滤曲目 [*]右键曲目 — 列表 — 查看曲目详情 [/list]

[h3]钢琴界面[/h3] [list] [_][code]● REC[/code] — [code]x=10[/code] — 开始 / 停止 MIDI 录制 [_][code]▶ PLAY[/code] — [code]x=74[/code] — 播放 / 停止当前 [code].mid[/code] [_][code]♪ 文件名[/code] — [code]x=138[/code] — 切换到下一首 [code].mid[/code] [_][code]🔊[/code] / [code]🔇[/code] — 右上角 — 切换音符盒广播 [_][code]X[/code] — 右上角 — 关闭(自动保存录音) [_][code][−][/code] [code][+][/code] [code]C4[/code] [code]CLR[/code] [code]SCN[/code] — 滚落区下方 — 八度 / 复位 / 清空 / 重扫 [/list]

[h3]NBS 编辑器[/h3] 详见上方 [b]游戏内 NBS 编辑器[/b] 一节。

[h1]📌 注意事项[/h1] [list] [_]仅支持带有 [b][code].nbs[/code][/b] 后缀名的合法音乐文件。 [_][b]Clamp / Fold[/b] 为非破坏性操作,仅临时生效,关闭或取消后恢复原状。 [_]GUI 内自带 [b]实时频谱可视化[/b](5 种样式可切换)。 [_]所有快捷键均支持在「控制」设置中 [b]自定义[/b]。 [_]依赖 [b]Fabric Loader[/b] + Minecraft 26.2–26.3(NeoForge 支持开发中);可选依赖 [b]PianoLib[/b] / [code]sqlmc.PianoAPI[/code] 以获得高品质钢琴音色。 [_]MIDI 回放与 NBS 编辑器读取 [code]config/disc_jockey/midi/[/code];曲目存放于 [code]config/disc_jockey/songs/[/code]。 [/list]

[h1]🔧 技术说明[/h1] [list] [_]采用 [code]SpectrumDataSmoother[/code](峰值保持 + 指数衰减)与 [code]SpectrumVisualizer[/code](统一播放/预览数据源)[b]双层架构[/b],频谱稳定无卡顶。 [_]播放采用 [code]SongPlayer[/code](可配置异步播放、基于 [code]RateLimiter[/code] 的发包限速、睡眠定时器)+ [code]Tuner[/code](八度折叠后多层 fallback 查找音符盒)。 [_][b]跨帧安全开界面[/b]:[code]Main.openScreenOnNextTick[/code] 通过 [code]ConcurrentLinkedQueue[/code] 把界面请求推迟到下一 tick,规避聊天框关闭带走界面的竞争。 [_][b]NBS 编辑器复用既有转换层[/b]:MIDI → NBS 走 [code]MidiToNbsImporter[/code],保存走 [code]NbsToMidiExporter.writeNbs()[/code],音符打包走 [code]Note.packNoteId[/code] / [code]Note.extractNoteId[/code],保证编辑产物与模组其余部分字节兼容。 [*][b]混淆友好[/b]:所有 [code]Screen[/code] 子类、[code]MidiRecorder[/code],以及使用反射的类([code]PianoPlayer[/code] / [code]DiscJockeyHud[/code])均通过 ProGuard keep 规则原样保留,避免 [code]VerifyError[/code]。 [/list]

[hr]

[center]© Disc Jockey Plus — 基于原版 [i]Disc Jockey[/i] 的非官方分支[/center]

Project description from CurseForge.

Pick your setup

Disc Jockey Plus by Minecraft version and loader

Choose the version and loader you play, then open the matching release.

7 available setups

Check the dependencies, then try the file in a copied instance before changing a world you care about.

Recent files

Disc Jockey Plus versions and loaders

104 of 104 releases match

Looking for an older file? The official CurseForge project page is in Resources.