# Settings

Settings tabs, devices, volume, audio processing, instruments, HUD, status icons and custom icon packs

Source: https://socketsvc.vercel.app/client/settings
Press <kbd>V</kbd> or run `/ssvc` to open "Voice settings". If first-run setup hasn't been completed yet, "Welcome to voice" opens instead; it has the same contents and is finished with "Get started".

Settings is a centered dialog (capped at 600 × 360 GUI units). The tabs run down a rail on the left, each with an icon and its full name; on a panel too narrow to afford the names the rail keeps the icons and moves the names into tooltips. At the foot of the rail, under a divider, **Documentation** opens this site in your browser. The connection state (Connected / Connecting / Offline) sits at the top right behind a coloured light, and the footer carries the microphone and incoming-voice switches on the left and "Done" on the right, which closes and saves. Related settings are grouped into titled cards. On smaller screens the settings scroll while the rail and the footer stay in place.

If the connection has failed, a red banner across the top of the settings says so and how to retry — that being the reason every other setting on the screen is doing nothing.

| Tab | Contents |
| --- | --- |
| General | Microphone / incoming voice switches, voice mode, devices, and microphone, voice and soundboard volume |
| Advanced | Microphone test, audio processing, interface options, diagnostics |
| Instrument | Line in, MIDI, the drum machine and the looper — played alongside talking |
| Player volume | Speaker volumes and per-player voice volume |
| Customize | Custom icon packs |
| Flashback | Voice recording and replay volume; **only shown when Flashback is installed** |

## General

Two icon buttons sit in the footer, on every tab rather than only this one:

- **Microphone** — toggles the microphone. It stays off while incoming voice is disabled.
- **Incoming voice** — toggles hearing other players (deafen). Turning it off also mutes your microphone; turning it back on restores the previous mute state.

The tab is two cards — **Talking** and **Listening** — with a link to the [voice groups](/client/groups) menu underneath them, showing the group you are in without having to open it. Settings marked └ are indented under the device row above them: the input channel and microphone volume belong to the microphone, and the two playback volumes belong to the output device.

| Setting | Options / range | Default | Description |
| --- | --- | --- | --- |
| Voice mode | Voice activated / Push to talk | Voice activated | Voice activated: transmit automatically when you speak. Push to talk: hold the talk key (default <kbd>B</kbd>) to talk; release to stop |
| Microphone | System default or a specific device | System default | Click to choose a device; changes apply immediately, no reconnect needed |
| └ Input channel | Mix both / Input 1 / Input 2 | Mix both | Which socket of a multi-input device to record from. Harmless on a mono device, where it falls back to mixing |
| └ Microphone volume | 0–200% | 100% | Outgoing mic volume; 0% sends silence, above 100% amplifies with limiting |
| Output device | System default or a specific device | System default | As above |
| └ Voice volume | 0–200% | 100% | Master volume for all received audio (including soundboard) |
| └ Players' soundboard | 0–200% | 100% | A second master over every other player's [soundboard](/client/soundboard) audio only, on top of Voice volume. Turns clips down without touching anybody's voice; 0% silences incoming clips entirely. It does **not** affect the clips you play yourself — that is the soundboard master volume on the [Soundboard](/client/soundboard) screen |

If your saved device isn't detected, it is shown as "(not detected)" and the system default is used for now.

<Callout title="USB audio interfaces">
An interface such as a Volt 2, Scarlett or AudioBox reports itself as a two-channel device, and often at 44.1 kHz rather than 48. Any capture format it offers is accepted and converted, so it works as a microphone as well as an instrument input.

Set **Input channel**, just under the microphone picker on this tab, to the socket you actually used. An interface has your microphone in input 1 and nothing in input 2, so leaving it on *Mix both* costs 6 dB and mixes the empty input's hiss in with your voice.

The instrument tab has its own **Input channel** for its own device, so a guitar in input 2 and a microphone in input 1 can share one interface.
</Callout>

<Callout title="Two devices with the same name">
Identical hardware — two of the same USB headset, or a hub with two matching microphones — reports the same name to the system. SocketSVC numbers the repeats in the picker (`Headset`, `Headset (2)`) so each entry points at one specific device. If the one you chose cannot be opened, its twin is tried before anything else, and if the system default has to stand in instead the status line says so rather than continuing to show the name you picked.
</Callout>

## Advanced

"Automatic settings work well for most players." Switching to this tab starts the microphone test automatically; leaving the tab stops it.

### Microphone test

| Setting | Default | Description |
| --- | --- | --- |
| Level meter | — | Responds when you speak; shows the input before the microphone volume adjustment. If the mic is unavailable, choose a device on the General tab |
| Hear yourself | Off | Plays your mic back through your speakers with a short delay — use headphones to avoid feedback |

### Audio processing

| Setting | Options / range | Default | Description |
| --- | --- | --- | --- |
| Noise suppression | On / Off | On | RNNoise, applied before gain, voice detection and Opus encoding |
| └ Advanced Noise Cancellation | On / Off | On | A much stronger AI noise model that also cleans up game sound and music, not just steady background noise, at some extra CPU/latency cost. Only shown while noise suppression is on and the platform is supported |
| └└ Model | Download / delete | Not downloaded | About 50MB, downloaded on demand. Left click to download (a confirmation screen appears first); right click to delete once ready |
| Echo cancellation | On / Off | On | Adaptive echo cancellation |
| └ Automatic echo delay | On / Off | On | Waits for a confident match before cancelling |
| └└ Echo delay | 0–500 ms | 100 ms | Manual delay when automatic is off, for difficult devices/rooms |
| Microphone gain | Automatic / Manual | Automatic | Automatic gain with peak limiting |
| └ Gain | -30–30 dB | 0 dB | Input gain in Manual mode |
| Voice detection | Automatic / Manual | Automatic | Automatic uses RNNoise speech probability when available |
| └ Threshold | 0–2000 | 300 | RMS threshold in Manual mode; Automatic uses a fixed 300 |

- **Advanced Noise Cancellation** is available on Windows x64, Linux x64 and macOS Apple Silicon; other platforms show "Not available on this platform". Until the model is downloaded, or if it fails mid-session, RNNoise is used instead.
- **Echo cancellation** only uses SocketSVC's own playback as its reference, not Minecraft game or system audio. If a processed frame ends up louder than the original mic signal, the original samples are kept and the filter relearns, so switching speakers/headphones does not require toggling it off and on. During simultaneous local and remote speech, some real echo may pass through temporarily while it relearns.
- **Automatic voice detection** keeps the last 60 ms before speech starts and sends it with the speech, and keeps transmitting for 300 ms after speech ends, so word onsets and endings aren't clipped. Releasing push-to-talk stops immediately.

The bottom of the tab shows the current processing status, for example "Noise suppression active / Echo delay 120 ms" or "Learning echo".

### Surroundings

What the world does to other players' voices. **All three are off by default**, and each changes only what you hear.

| Setting | Options / range | Default | Description |
| --- | --- | --- | --- |
| Follow Sound Physics Remastered | On / Off | On | Only shown when [Sound Physics Remastered](/client/compatibility#sound-physics-remastered) is installed. While on, the three settings below are replaced by its settings |
| Walls muffle voices | On / Off | Off | A player on the other side of a wall sounds duller and a little quieter |
| └ Muffling | 0–100% | 100% | How much a wall muffles |
| Muffled underwater | On / Off | Off | When you, or whoever is talking, is under water, they sound it |
| Room echo | On / Off | Off | Caves and big halls echo around voices; open ground does not |
| └ Echo amount | 0–100% | 100% | How much echo a room adds |
| └ Hear your own echo | On / Off | Off | When you talk in a cave or hall, hear the room echo your voice back |

- **Muffle, never mute.** Fully muffled is a voice with its highs taken off at a little over half the volume: clearly behind something, never gone. The first block in the way does most of it; three or more is as muffled as it gets. Anything with a collision shape counts, so glass and fences dull a voice too.
- **Worked out by your client, from the world it already has.** Your client raycasts from your eyes to each player within 96 blocks a few times a second. The server does nothing extra, and nobody else is affected by your choice. A voice whose source your client cannot see as a player — too far away to be tracked, or a plugin's speaker — is not muffled by walls.
- **Under water** muffles every voice while your head is under water, and a speaker's voice while theirs is.
- **Room echo** feels out the space around you with rays in every direction: the more of it is wall and ceiling, the more it echoes, and the bigger it is, the longer the echo rings. A forest or a village street is too open to echo. Leaving a cave lets the last echo ring out rather than cutting it.
- **Hear your own echo** feeds what you transmit into the same room, so you hear the echo of your own voice — the echo only, never your voice played back. It follows exactly what others hear: nothing while you are muted or not holding push-to-talk. Echo cancellation takes it back out of your microphone, so it cannot feed back.
- These apply to player voices and other players' soundboard clips. Cinema screens and other addon sound are not affected.
- **With Sound Physics Remastered installed**, walls, water and room echo are taken from its settings instead: its *block absorption* sets the muffling, its *underwater filter* the underwater muffle, its *reverb gain* the echo and its *Simple Voice Chat hear self* option whether you hear your own echo, with its defaults matching 100% here. If Sound Physics Remastered is switched off, or its *Simple Voice Chat integration* option (its switch for voice chat effects) is off, voices get no effects. Turn **Follow Sound Physics Remastered** off to use the settings above instead.

## Instrument

Non-microphone inputs, played into voice chat **alongside** talking rather than instead of it. The instrument is a separate stream, so your own playing does not stop when you speak, and muting your microphone does not silence it.

Each source has its own switch and **they work together** — a drum pattern under a MIDI keyboard, with a guitar on a line-in over the top. Everything switched on is mixed into the one instrument stream.

Each switch is named after its source, and that source's own settings appear indented under it once it is on — the same nesting the General tab uses for a device and its settings. Settings that apply to everything at once are collected under **All sources** at the bottom, and appear only once at least one source is on.

Every row on the tab, and every control in the drum and looper editors, explains itself on hover. If a control's name is not enough, rest the pointer on it rather than guessing.

| Source | What it is |
| --- | --- |
| Line in | A second capture device: an audio interface, a keyboard's audio output, or a virtual cable from a DAW |
| MIDI | A MIDI keyboard or guitar, played through SocketSVC's own synthesiser or a sound bank you load |
| Drum machine | A built-in step sequencer with eight synthesised drums, 1–32 beats long |
| Looper | Records what you play and layers over it, on up to 16 tracks |

| All sources | Options | Meaning |
| --- | --- | --- |
| Push to play | Off by default | Only transmit while the "Play instrument" key is held |
| Instrument volume | 0–200% | Trim before the instrument is sent, and the level you monitor at |
| Hear yourself | On by default | Play the instrument through your own speakers as well as sending it |

A source that cannot start does not take the others down with it: an unplugged MIDI keyboard leaves the drum machine playing and says why the keyboard is silent. When several are loud at once the mix is ridden down rather than clipped.

### Drum machine

A step sequencer with eight synthesised drums — kick, snare, closed and open hi-hat, clap, tom, rim and cymbal. Nothing to install: the sounds are made from oscillators and noise, in the manner of an analogue drum machine, so it works with no sample pack or SoundFont.

The hats and cymbal are built from a bank of six detuned square waves rather than from noise, which is what makes them ring like metal instead of hissing, and the kick and tom sweep in pitch as they decay. Levels across the kit are set so a pattern sits together without any one drum having to be turned down.

Switch on **Drum machine**, then **Edit pattern** to open the grid, which fills the window. Click a square to place a hit, or drag across several to fill a run in one go — the first square you press decides whether the drag is placing or clearing. Click a drum's name to audition it.

| Setting | Range | Default | Description |
| --- | --- | --- | --- |
| Tempo | 40–240 BPM | 100 | Shared with the metronome and the looper |
| Swing | 0–50% | 0 | Pushes every second step later for a shuffled feel, without changing the tempo |
| Beats | 1–32 | 16 | How long the pattern is |
| Beats per bar | 1–12 | 4 | Where a bar line falls in the shading. The same setting as the looper's, since it is also what the metronome accents |
| Steps per beat | 1–8 | 4 | How finely each beat is divided — 4 is sixteenths, 3 gives triplets, 8 gives thirty-seconds |

Columns are shaded at two depths: lightly where a beat starts, more strongly where a bar does — and how many beats make a bar is **Beats per bar**, so a waltz reads as three. The numbers along the top count the beats. The longest pattern is 32 × 8 = 256 columns, so the squares shrink to fit the window and, when they can shrink no further, the grid **scrolls sideways** — drag the bar under it, or use the wheel or a trackpad over the grid. The drum names stay put while it scrolls.

Making the grid shorter hides the steps past its new end rather than deleting them, so shortening and lengthening it again brings the pattern back. A pattern saved on a shorter grid repeats across a longer one, so an existing beat keeps sounding the way it did.

The pattern is saved with your settings and keeps playing while you do other things, so you can lay down a loop and then talk, play a guitar on another input, or walk around over the top of it.

### Looper

Switch on **Looper**, then **Open looper** for an editor that fills the window. It sits at the end of the chain, so what it records is everything above it — a guitar on the line-in, a MIDI keyboard, the drum machine, or all three at once. What you play passes straight through, the way a looper pedal works.

Each of the **16 tracks** is one line: its number, five buttons, what it is doing in words, the waveform, and its volume. The track you last touched is highlighted — that is the one the keyboard acts on.

| Key | What it does |
| --- | --- |
| <kbd>1</kbd>–<kbd>9</kbd>, <kbd>0</kbd> | Record on that track. The same press that the ● button makes, so it cycles record → play → layer |
| <kbd>R</kbd> | Record on the highlighted track |
| <kbd>Space</kbd> | Play everything, or stop everything if anything is running |
| <kbd>M</kbd> | Mute the highlighted track |
| <kbd>Z</kbd> | Undo its last layer |
| <kbd>Delete</kbd> | Clear it |
| <kbd>↑</kbd> <kbd>↓</kbd> | Choose a track |

A looper is played with your hands on an instrument, so the number keys matter more than the buttons — they are how every hardware looper arms a track. The buttons stay for reading the state and for reaching a track that is not the one you are on.

The five buttons are:

| Button | What it does |
| --- | --- |
| ● | Record. Press once to start, again to close the loop and play it, again to layer another pass on top, again to stop layering. With a count-in set, the first press counts you in — pressing it again during the count calls it off |
| ▶ / ■ | Play or stop that track, without losing what is on it |
| ↶ | Undo the last layer — press again to put it back |
| M | Mute |
| × | Clear the track |

Each track draws **the waveform of what is recorded on it**, brightening as the playhead passes and with a line at the playhead itself, so you can see where the hits are and whether a layer landed in time — not just how far through the loop you are. `3×` at its end is how many layers deep the track is, and the short bar on the right is its volume. An empty track says `press ● to record`. A track waiting on the count says `counting in` and shows an **amber** record light, not the red one — nothing is being recorded yet, and the take only begins when the count ends. **Stop all** calls a pending count off.

An overdub gets no count-in: it joins a loop that is already running and already in time.

**Metronome**, in this editor, is a click on every beat at the drum machine's tempo — it is what you play along to while recording, which is why it lives here. **It is heard only by you**: the click is rendered separately from the instrument mix and reaches your speakers through the local monitor, so it is never encoded and never sent to anyone else. Switching it on starts the count on beat one rather than wherever it had got to, and the first beat of each bar is higher and louder, because a click that does not say where the bar starts tells you the tempo but not the time.

| Setting | Range | Default | Description |
| --- | --- | --- | --- |
| Count-in | 0–8 beats | 4 | Clicks this many beats before a **first** take starts, so the downbeat is something you hear coming. Four means four ticks, and recording begins on the silent beat after them. Sounds even with the metronome off; 0 records straight away |
| Metronome | On / Off | Off | The click, for you only |
| Click volume | 0–200% | 70% | |
| Beats per bar | 1–12 | 4 | The time signature's top number — **3** for a waltz, 4 for most things. Also on the drum machine's editor, since it draws that grid's bar lines |
| Loop length | 1–32 beats | 8 | How long a *new* recording is, **in beats** at the drum machine's tempo, so loops line up with a pattern you already have. The line under it says what that is in seconds — eight beats at 100 BPM is 4.8 s |
| Loop volume | 0–200% | 100% | The looper's own level, over every track |

Tracks keep the length they were recorded at, and all of them share one clock, so tracks of different lengths stay in phase with each other. **Play all**, **Stop all** and **Clear all** act on everything at once.

The controls above stay put and only the track list scrolls, so the transport is still there when you have scrolled down to track 14 with a take running. A single track cannot be longer than 40 seconds.

<Callout title="Loops are not saved">
Recorded audio is minutes of samples rather than a setting, so loops live only while the game is running. A looper whose loops came back after a restart would be a sampler.
</Callout>

### Custom drum samples

The built-in generator exists so the drum machine works with nothing installed, not because oscillators are the goal. To use recorded sounds instead, put a folder of samples in `config/socketsvc/drumkits/` and pick it with **Drum kit**.

Name each file after the drum it is — WAV, MP3, OGG, Opus, FLAC or AIFF:

```
config/socketsvc/drumkits/
  my kit/
    kick.wav
    snare.wav
    closed hat.wav
    open hat.wav
    clap.wav
    tom.wav
    rim.wav
    cymbal.wav
```

Matching ignores case, spaces and punctuation, and accepts the abbreviations sample packs usually ship with, so `BD.WAV`, `909 Kick Drum 01.wav` and `kick.wav` all land on the kick. `SideStick` is the rim and `crash` is the cymbal. **Open** and **closed** are read wherever they appear in the name, so `Open HH`, `HH Open`, `Hat Open` and `OH` are all the open hat, and a bare `hat` or `HH` is the closed one. Two-letter abbreviations (`BD`, `SD`, `HH`, `OH`, `CH`, `CP`, `CY`) have to be words of their own, so a `China.wav` or `Vocal Chop.wav` sitting in the folder is left alone rather than taking a drum's place. If two files name the same drum, the more specific name wins — `kick.wav` over `bd.wav`.

The **Drum kit** setting lists anything it did not use, and why: a name that matches no drum, a second file for a drum already taken, or a file it could not read. If a drum is still playing the built-in sound, that line says which case it is.

Any drum without a file keeps its synthesised sound, so a folder holding nothing but a kick is a valid kit, and the setting lists which drums that applies to — if your clap is still the built-in one, its file name matched no drum. A file that will not decode costs that one drum rather than the whole kit. Adding, replacing or renaming a file in a folder you have already selected takes effect on its own; there is no need to pick the kit again. Samples at any sample rate are converted, so the 44.1 kHz files most packs ship work as they are, and a closed hat still cuts off an open one.

<Callout title="For a full acoustic kit, a SoundFont also works">
A General MIDI SoundFont played from a MIDI pad controller gives you a whole sampled kit with velocity layers, which a folder of one-shots does not — see [Sound banks](#sound-banks-soundfont).
</Callout>

### Playing from a DAW (FL Studio, Ableton, Reaper...)

Switch on **Line in**, send the DAW's output to a **virtual audio cable**, then pick that cable as the input device. Everything the DAW makes — its own synths, any VST3 you own, a guitar through its effects chain — arrives in voice chat.

| Platform | Cable | In the DAW |
| --- | --- | --- |
| Windows | [VB-Cable](https://vb-audio.com/Cable/) or VoiceMeeter | Set the audio device to the cable's input. With ASIO, FL Studio needs FL Studio ASIO or ASIO4ALL pointed at it |
| macOS | [BlackHole](https://existential.audio/blackhole/) or Loopback | Set the audio output device to the cable |
| Linux | PipeWire / PulseAudio null sink | Route the DAW's sink to it with `pw-link` or `qpwgraph` |

To keep *hearing* the DAW yourself, either use a multi-output device that feeds both the cable and your headphones, or leave **Hear yourself** on in SocketSVC.

The device's own format is used as-is — stereo is downmixed and any sample rate is converted to what the voice pipeline needs, so a cable left at 44.1 kHz stereo works without reconfiguring it.

<Callout title="SocketSVC cannot be a DAW output device itself">
A DAW can only send audio to a real audio device, and creating one means shipping a system audio driver — a kernel extension on macOS, a signed driver on Windows — which a Minecraft mod cannot do. That is exactly the job a virtual cable already does, which is why the route goes through one.
</Callout>

**Line in** suits anything that already makes its own sound: an electric guitar through an audio interface, a keyboard's audio output, or a virtual cable carrying a soft-synth you already use.

On an interface with more than one socket, set the instrument's own **Input channel** to the one the instrument is plugged into. It is separate from the microphone's channel on the General tab, so a guitar in input 2 and a microphone in input 1 can share one interface without either picking up the other. Changing it reopens the device, which briefly cuts the instrument.

**Hear yourself** is on by default for both kinds. MIDI has no other sound at all, so without it you would be playing in silence. A line-in is only self-monitoring if the hardware it is plugged into happens to do that — many interfaces do not — so it starts on there too rather than leaving you wondering whether anything is working. Turn it off if you are already hearing the instrument some other way, otherwise you will hear it twice.

**MIDI** listens to a MIDI keyboard or guitar and makes the sound itself. Note velocity, the sustain pedal and pitch bend all work. It sounds like a synthesiser, not a sampled piano: see [Why the built-in synth is oscillators](#why-the-built-in-synth-is-oscillators).

The "Play instrument" key has no default binding — set one under Controls if you want push-to-play.

<Callout type="warn" title="Use headphones while monitoring">
What you monitor goes out of your speakers, and your microphone picks it up — and unlike SocketSVC's own voice playback, the monitor path is not in the echo canceller's reference, so it cannot be cancelled out. On speakers, other players will hear your instrument twice: once from the instrument channel and once bleeding into your microphone. Headphones remove the problem entirely.
</Callout>

<Callout title="None of the speech processing runs on the instrument">
Noise suppression, automatic gain, voice activation and echo cancellation all exist to serve one talking voice, and each one actively damages music: noise suppression is trained to keep a voice and discard everything else, automatic gain flattens a deliberate crescendo, and voice activation cuts a sustained note as soon as it decays past a threshold meant for pauses in speech. The instrument is sent as played, with only your volume trim and a limiter in the way.
</Callout>

### Sound banks (SoundFont)

Drop `.sf2` or `.sf3` files into `config/socketsvc/soundfonts` and pick one under **Sound bank**. Notes then play that bank's recorded instruments — a real piano, guitar or strings — instead of the built-in oscillators, and **Bank preset** chooses which of the bank's instruments to play.

**Sound bank**, **Bank preset**, **MIDI device** and **Input device** each open a searchable list rather than stepping one entry per click. Type to filter: every word has to appear somewhere in the name, in any order, so `grand piano` and `piano grand` both find the same preset. That matters most for **Bank preset** — a General MIDI bank has well over a hundred presets, which is not a list to click through. Free General MIDI banks are widely available; `.sf3` is the same format with Ogg-compressed samples, which is how a full GM bank fits in tens of megabytes instead of hundreds.

Loading happens in the background, since a large bank takes a moment; the status line says so, and the oscillators keep playing until it is ready. Velocity, the sustain pedal and pitch bend work either way.

Drum kits work: a one-shot sample stops at its own end, and a preset that splits its instruments across the keyboard is honoured, so each key plays only what belongs to it.

Not every SoundFont feature is implemented: samples, tuning, loop points and volume envelopes are, while modulators, filters, LFOs, chorus and reverb are not. Those shape a sound; the sample, its pitch, its loop and its envelope *are* the sound.

### Your own recordings as an instrument

A SoundFont is a real sampled instrument, but you have to find one, and making one is a project in itself. To play your own recordings instead, put a folder of them in the same `config/socketsvc/soundfonts` directory — it appears under **Sound bank** alongside the `.sf2` files.

Name each file after the note it was recorded at, in WAV, MP3, OGG, Opus, FLAC or AIFF:

```
config/socketsvc/soundfonts/
  my piano/
    A0.wav
    C2.wav
    C4.wav
    A4.wav
```

`C4.wav`, `C#4.wav`, `Db4.wav` and the MIDI number `60.wav` all work, and the note is read from the end of the name, so `Grand Piano A4.wav` and `piano-A3.wav` are fine too. A file whose name says nothing about pitch is assumed to be middle C, so a single unnamed recording still plays.

A note with no file of its own is played from the **nearest** recording, resampled by the pitch ratio. One file therefore covers the whole keyboard, and each one you add narrows the stretch around it — four or five across the range is usually enough to stop it sounding obviously transposed.

Stretching costs quality, and the cost is not symmetrical. Notes near a recording are clean. Notes played well **above** one lose top end and pick up a faint ringing, because the recording's own high frequencies fold back as the playback speeds up — audible from roughly an octave and a half up, and plain by two octaves. Adding a recording higher in the range is the fix; nothing downstream can recover what folding destroys.

<Callout title="A note lasts as long as its recording">
There are no loop points in a bare audio file, so a held key plays the recording once and stops rather than sustaining. That suits struck and plucked sounds — piano, guitar, bells, drums, one-shot vocals. For sounds that have to hold indefinitely, a SoundFont carries the loop points that make that possible.
</Callout>

### Why the built-in synth is oscillators

With no bank loaded, SocketSVC synthesises notes itself, and it sounds like a synthesiser rather than a real instrument. The JDK does ship a General MIDI soundbank, but every route to it — rendering it to audio, or reading its samples — lives in a package the Java platform does not export, and a mod cannot change another player's launcher to open it. That is why sound banks exist as an option, and why the fallback is oscillators.

### VST3 plugins

Not supported, and not planned to be hosted inside SocketSVC. VST3 has no Java binding, so it would need a native host built per platform; its SDK is GPLv3 or a signed Steinberg agreement; and a third-party plugin running in the game's own process can crash Minecraft outright, which is why audio software sandboxes plugins in a separate process.

The supported route is **Line in**: run the plugin in whatever host you already use, send that host's output to a virtual audio cable, and pick the cable as the instrument device. Every plugin you own works, with nothing able to take the game down with it.

### If MIDI makes no sound

- **"No MIDI input device found"** in the status line means nothing on the machine can send notes. Only hardware MIDI ports count: the JDK's built-in "Real Time Sequencer" is not one, despite looking like an input, and is deliberately not offered.
- Turning the instrument on works at the title screen too, and monitors locally, so you can check a keyboard before joining a server. Nothing is transmitted until you are connected.
- If you hear yourself but nobody else does, check you are connected and that the server allows `socketsvc.soundboard`.
- If the device will not open at all, it offers no capture format SocketSVC can read; try setting the cable to 16-bit stereo at 44.1 or 48 kHz in its own control panel.
- If the sound stutters or cuts in and out while monitoring, that was a bug in the monitor mixer up to this version: a tick where no audio happened to be ready skipped the write entirely and let the output device run dry. It now writes silence instead, so the device is never starved, and the monitor's own buffer is capped at 160 ms so playing a note is heard promptly.
- If you hear nothing at all, check **Hear yourself** is on — with a line-in it is the difference between silence and sound on any interface that does not monitor by itself.

### Requirements and limits

- The server must support the soundboard channel, which is how a second concurrent stream reaches other players. On a server too old for it the instrument falls back to riding your microphone stream, which means it stops being independent of it.
- The `socketsvc.soundboard` permission covers the instrument too, and listeners' soundboard volume applies to it.
- Up to 24 notes can sound at once; beyond that the quietest is reused.

### Interface

| Setting | Default | Description |
| --- | --- | --- |
| Speaking indicator | On | Bottom-left HUD status icon; also toggled with <kbd>H</kbd> |
| Group overlay | On | Top-left list of everyone on your [voice group](/client/groups) — heads and names, no panel behind them. Only drawn while you are in a group, and hidden while the player list (<kbd>Tab</kbd>) is showing |
| Player nameplate voice icons | On | Voice icons next to other players' nameplates |
| Server list voice badge | On | Microphone badge in the margin to the left of a server's row in the multiplayer server list, for servers that run SocketSVC. Read from the status ping the list already sends, so it costs no extra connection; a server that does not advertise simply has no badge. See [Server list badge](/server/configuration#server-list-badge) |
| Reduce motion | Off | Disables UI transition animations, and holds animated GIF icons on their first frame |

### Diagnostics

Not things you see, but things you turn on to work out what is wrong — which is why they are a card of their own rather than the bottom of Interface.

| Setting | Default | Description |
| --- | --- | --- |
| Developer mode | Off | Shows local voice statistics at the top right, not true network loss. See [Troubleshooting](/client/troubleshooting#developer-mode) |
| Verbose logging | Off | Writes a detailed connection, audio and network trace to `latest.log` for troubleshooting |
| Share anonymous usage metrics | On | Sends aggregate mod/Minecraft version and OS info to the stats system; never player identities or voice data |

## Player volume

"Only changes what you hear. 0% mutes a player."

- **Speakers** — when the server defines [spatial speakers](/server/spatial-audio-api), they are listed at the top with one 0–200% slider each, saved per server and speaker ID.
- **Players** — one row per player connected to voice, with their skin head and a speaking level. Players who spoke most recently are listed first; players who never spoke are listed last.
  - Voice volume 0–200% (default 100%). 0% silences only that player, 100% is normal, 200% increases gain subject to the shared peak limiter.
  - Click the player head **or their name** to toggle mute; unmuting restores the last non-zero volume. Anywhere left of the slider works, so it is an easy target in a long list.

Each player's [soundboard](/client/soundboard) audio is no longer given its own row here — use **Players' soundboard** on the General tab instead.

Volumes are saved and survive reconnects and game restarts. When not connected the tab shows "Connect to voice to adjust other players' volume."; on an older server without roster support it shows "Waiting for players. Older servers do not support this list."

## Headphone spatial audio

Positioned voices are processed with MIT KEMAR head-related transfer functions (HRTFs) so headphone users can tell whether a voice comes from in front or behind. There is nothing to configure, but note the limits:

- The protocol only supplies horizontal X/Z offsets, so you get front/back and left/right localization, not elevation or head-pitch cues.
- Generic HRTFs cannot guarantee that sound feels "outside your head" for every listener and headphone.
- Use stereo headphones with other surround processing disabled for the best result.

## Status icons

| Icon | Custom icon name | Where it appears |
| --- | --- | --- |
| <img src="/images/icons/speak.png" alt="Mic - Unmuted" width={32} height={32} style={{ imageRendering: 'pixelated' }} /> | Mic - Unmuted | Microphone button, on state; HUD: you are speaking |
| <img src="/images/icons/mute.png" alt="Mic - Muted" width={32} height={32} style={{ imageRendering: 'pixelated' }} /> | Mic - Muted | Microphone button, off state; HUD: your mic is muted |
| <img src="/images/icons/mic.png" alt="Audio - On" width={32} height={32} style={{ imageRendering: 'pixelated' }} /> | Audio - On | Incoming voice button, on state; nameplate: that player is speaking |
| <img src="/images/icons/defend.png" alt="Audio - Deafened" width={32} height={32} style={{ imageRendering: 'pixelated' }} /> | Audio - Deafened | Incoming voice button, off state; HUD: you are deafened; nameplate: that player is deafened |
| <img src="/images/icons/disconnected.png" alt="Disconnected" width={32} height={32} style={{ imageRendering: 'pixelated' }} /> | Disconnected | HUD: voice is not connected; nameplate: that player is not connected to voice |
| <img src="/images/icons/soundboard.png" alt="Soundboard playing" width={32} height={32} style={{ imageRendering: 'pixelated' }} /> | Soundboard playing | Nameplate: that player's soundboard is playing, shown after any other status icon |

### HUD

The HUD sits unframed at the bottom left of the screen and shows one state, in this priority:

1. Voice not connected (shows "Connecting..." text while connecting, and "Reconnecting..." while an automatic retry is pending)
2. Deafened
3. Microphone muted
4. Speaking

Nothing is shown while connected, unmuted and idle. On a server that doesn't run SocketSVC, the disconnected icon shows straight away — there is nothing to connect to, so it doesn't say "Connecting..." first. On a server where Simple Voice Chat or Plasmo Voice has connected instead, nothing is shown, leaving the corner to that mod's icon. The HUD is also hidden by <kbd>F1</kbd>, by turning off "Speaking indicator", and while any screen is open.

### Nameplates

Icons are drawn to the right of another player's name, never inside it, so toggling an icon never shifts the nametag. Priority is disconnected, deafened, speaking; otherwise nothing is shown. A soundboard-playing icon is appended after it.

- "Speaking" reflects audio actually played back on your client.
- An unknown roster or your own disconnection does not falsely mark everyone offline.
- Deafened status is synchronized through a separately negotiated extension; update both ends for it.
- TAB list and chat names are not modified.
- Turn off all nameplate icons under Advanced → Interface → Player nameplate voice icons.

## Custom icon packs

The Customize tab lets you build icon packs from your own images to replace the six status icons above. Any picture works; it is auto-cropped to square and resized.

<Steps>
<Step>

### Create a pack

Click <kbd>+</kbd> at the top right to create a new pack. It starts as a copy of the currently active pack (or the defaults) and opens the pack editor.

</Step>
<Step>

### Add images

In the editor, left click an icon to open the "Choose an Image" list. Click "Open folder...", drop your image into that folder from your file browser, click "Refresh", then pick the file. Right click an icon to reset it to the default.

</Step>
<Step>

### Save and activate

Enter a name (up to 48 characters) and click "Save" — this also activates the pack. "Delete" removes the whole pack; deleting the active pack reverts to the default icons.

</Step>
</Steps>

In the pack gallery, left click a tile to apply it and right click to edit it. "Default by DragonL" can only be applied, not edited.

| Item | Rule |
| --- | --- |
| Icon folder | `config/socketsvc/icons/inbox/` (inside the game directory; files are listed newest first) |
| Image formats | PNG, JPG/JPEG, GIF, BMP |
| Processing | Center-cropped to square and scaled to 128×128 |
| Animated GIFs | Stored frame by frame and animated everywhere the icon appears — the HUD, the settings buttons and the nameplate icon above players' heads; up to 200 frames, per-frame delay clamped to 20 ms–30 s. Gallery thumbnails stay on the first frame, and so does everything while [Reduce motion](#interface) is on |
| Pack storage | `config/socketsvc/icons/packs/` |

### Export and import

- **Export...** saves the active pack as a zip in the icon folder (named `<name>-<timestamp>.zip`) and opens that folder. Icons that weren't customized are filled in with the defaults, so the zip is self-contained.
- **Import...** picks a zip from the icon folder and imports it as a new pack (never overwriting an existing one, and not activated automatically). If the zip has no recognized icons, it reports "That zip didn't contain any recognized icons".

Zip entries are recognized by icon file name: `pack.json` (the name), `speak.png`, `mute.png`, `mic.png`, `defend.png`, `disconnected.png`, `soundboard.png`. An animated icon is a folder with the same name containing `anim.json` plus `0.png`, `1.png`, and so on. The file names are historical internal names and don't necessarily describe the artwork — see [Status icons](#status-icons) for the mapping (for example, `mic.png` is "Audio - On").

## Flashback

This tab appears when Flashback is installed. Flashback's own voice setting only shows up in its menu when Simple Voice Chat is installed, so these settings are the real switches for SocketSVC.

| Setting | Range | Default | Description |
| --- | --- | --- | --- |
| Record voice chat in Flashback | On / Off | On | Captures nearby voice chat into Flashback recordings so it's audible when the replay plays back |
| Include my own voice | On / Off | On | Also captures your own outgoing mic audio |
| Hearing range | 8–256 blocks | 48 | Audible distance used for recording and playback |
| Fade start distance | 0–255 blocks | 0 | During playback, full volume until this distance, silent at the hearing range; must stay below the hearing range |

The server's actual values aren't sent to the client, so set these to match the server. "Recorded players" below lists the voice sources heard in the current replay, each with its own 0–200% volume, saved separately from live player volumes.

The recording itself is built into the Fabric/Quilt JAR on some Minecraft versions only — see [Compatibility](/client/compatibility#flashback-replay-mod).

## Config file

All client settings are stored in `config/socketsvc.json` in the game directory and written when a settings screen closes. The following option has no UI and can only be changed by editing the file:

| Field | Default | Description |
| --- | --- | --- |
| `lanVoiceHosting` | `true` | Whether opening a world to LAN (vanilla or Essential Mod's world hosting) also starts the built-in voice server — see [LAN and singleplayer](/client/lan) |