# CDisc Music 1.6
One track, many jukeboxes. **Speaker groups** wire several jukeboxes together so
they play the same disc from their own positions, in sync, each with its own
channel and its own volume — a left speaker and a right speaker across a room,
or a whole club covered by one queue.
The second headline is **`/cdisc create-playlist`**: write an entire playlist to
a stack of blank discs in one pass instead of one disc at a time.
---
## Speaker groups
Open the player GUI on a jukebox and hit **Speaker group**. Name the group in
chat, then pick free jukeboxes nearby out of a list — the picker shows every
unpaired jukebox within range of the main, with its distance.
The jukebox you started from becomes the **main**: it holds the discs, the
queue and the player, and it is the only one that decodes the track. The rest
are **speakers** — they emit that same audio from where they stand. Two
jukeboxes playing the same disc separately drift apart within seconds; a group
does not, because there is only ever one decode.
**Speakers are locked.** No discs go in, no queue, no player GUI, no ejecting —
everything goes through the main. Dropping a vanilla record into a speaker is
refused rather than silently playing over the group.
**Ownership.** Only the player who created the group may change its jukeboxes,
add or remove speakers, or break them. Operators always may, so a group whose
owner never comes back doesn't become permanently unbreakable. Turn the whole
protection off with `speaker-group.protect-members: false`.
Breaking a **speaker** removes it from the group. Breaking the **main**
dissolves the group entirely and every jukebox becomes ordinary again.
A jukebox belongs to **one group at a time**. Try to pair one that is already
taken and the refusal tells you which group is holding it, so two people
building nearby can't quietly fight over the same block.
**A paired jukebox cannot be carried** — not even by the owner. Take it with
you and the group would be pointing at a block that isn't there; the button
says so instead.
Limits, all in `config.yml` under `speaker-group`:
| Setting | Default | What it does |
| --- | --- | --- |
| `enabled` | `true` | Off switch for the whole feature |
| `max-distance` | `64` | How far a speaker may sit from the main, same world only |
| `max-per-group` | `8` | Members including the main |
| `protect-members` | `true` | Owner-only changes and breaking |
The distance limit isn't arbitrary: a speaker emits from an entity in its own
chunk, so one across the world would only play while somebody stood there
keeping that chunk loaded — a speaker that works sometimes. Raise it for a very
large build, not for a relay network.
Commands, if you'd rather not use the GUI:
```
/cdisc pair gui
/cdisc pair create <name>
/cdisc pair add <name> | remove | unlink | dissolve
/cdisc pair tag <name>
/cdisc pair channel <stereo | mono | left | right>
/cdisc pair volume <0-100>
/cdisc pair info | list
```
## Settings for each speaker
Click any member in the group screen to open its own settings:
- **Name** — give the speaker a tag ("Left", "Bar", "Upstairs", up to 24
characters) and it's labelled that way everywhere it appears.
- **Channel** — *stereo*, *mono*, *left* or *right*. Left and right are a
genuine split of the source: the left speaker plays the track's left channel
and nothing else, the right one the right. Put them either side of a room and
the stereo image spreads across it.
- **Volume** — 0 to 100 in steps of 10. **0 is a full mute**: the speaker keeps
its place in the group and comes straight back when you turn it up.
- **Particles** — the note particles above that jukebox, on or off.
- **Make this the main** — promotes a speaker; playback stops for the swap.
- **Unlink** — that one jukebox leaves the group and goes back to normal.
Everything is stored on the jukebox itself and survives restarts.
## Everything stays in sync
Three jukeboxes standing near each other used to drift apart badly — the
overlap made the music louder and smeared it. Each audio source runs its own
sender, and a one-second buffer let a source that fell behind stay behind
forever.
Group members now run on a **60 ms buffer** instead, which is short enough that
nothing can lag behind audibly, and it's applied live — pair a jukebox in the
middle of a track and it drops into step without a restart.
## Playlists, one command
```
/cdisc create-playlist <playlist URL>
```
CDisc reads the playlist and opens a screen with one slot per track, paginated
if it's a long one. Fill the slots with **blank music discs**, close the
screen, and every one of them is written at once — the action bar counts the
discs as they're stamped.
Fewer discs than tracks is fine: you're told how many tracks had no disc, so
you can top up and run it again. Discs that won't fit in your inventory drop at
your feet rather than vanishing.
`/cdisc create` with a playlist link used to write **only the first track and
silently discard the rest**. It now writes that first track and warns you how
many more the playlist held, pointing at `create-playlist`.
## Encoding moved to the voice server
Technical, but it's what the rest of this release stands on. CDisc used to have
LavaPlayer produce one already-encoded stereo stream and hand the same bytes to
everybody, so the channel count was fixed for every listener at once. It now
hands raw audio to Plasmo Voice and lets **each source encode its own**, which
is what makes per-speaker mono, left and right possible at all.
## Smaller things
- **Speaker groups are reachable from the player GUI**, not only through the
disc queue.
- **Every button in the player GUI has its own icon** — no two share a texture
any more. Speaker group is a jukebox, Take it with me a note block, Channels
a brewing stand, Track messages a bell.
- **New: Track messages** (the bell). The "now playing" line on the action bar
is now **per player** — turn it off if you don't want it and everyone else
keeps theirs. Also `/cdisc messages [on|off]`.
- **Setting confirmations go to the action bar** instead of the chat, so
stepping the volume up doesn't fill your chat log.
- **A way back** — the group screen has a back button to the player.
- Dropped the per-track "loaded successfully" line from the console.
---
## Fixes
- **Carrying a jukebox with a full queue disconnected you.** A jukebox holds
its discs as a blob of data, and placing one down copied that blob onto the
block and left it there. Pick it up again with a couple of dozen discs inside
and CDisc tried to write more than 64 KB into a field that cannot hold it,
which drops the connection. The leftover copy is now cleared when the jukebox
is placed — it was also a latent way to duplicate discs — and an oversized
snapshot is refused with a console warning instead of a kick.
- Speaker tags were stored but never actually displayed; members read
"Speaker" whatever you had named them.
- The group screen had no way back to the player.
---
## Compatibility
Minecraft **1.20 through 26.x**, on Spigot and Paper.
Speaker groups themselves work on both voice backends. **Per-speaker channel
and volume, and the tightened sync, need Plasmo Voice** — on Simple Voice Chat
a group plays from every member, but the settings have nothing to act on.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }