XCent User Manual
Version 0.15.21 — September 2026
Introduction
XCent is a circuit-faithful emulation of the Yamaha DX100 — a four-operator FM synthesizer built around Yamaha's YM2164 OPP chip. It models the hardware's whole signal chain: incoming MIDI is turned into chip register writes the way the original's firmware does, a cycle-accurate YM2164 emulation generates the audio, and that passes through models of the hardware's DAC and analog output stage. The FM engine operates at the chip's native 55,930 Hz sample rate, resamples to your host's rate, and emulates the hardware's DAC quantization, aliasing characteristics, and reconstruction filter behavior.
XCent ships with the 192 factory voices from the original DX100 ROM, 24 per bank. 96 factory voices fill the four read-only ROM banks (100, 200, 300, 400); the other 96 factory voices arrive pre-loaded in the four writable RAM banks (A, B, C, D), where you can play them as they are or save your own patches over them. All eight FM algorithms are supported, with full four-operator control and OP4 self-feedback.
The interface provides three operating modes matching the DX100 hardware:
- PLAY — Browse and load patches
- EDIT — Edit voice parameters (Classic button grid or Modern knob/slider view)
- FUNC — Global settings (Master Tune, MIDI channel, portamento, etc.)
This manual covers XCent-specific operation: installation, the interface, patch management, MIDI, and preferences. FM synthesis theory and sound design technique are not covered here. The DX100 and XCent share the same synthesis engine, and the Yamaha DX100 Owner's Manual is the authoritative reference for those topics.
Requirements & Installation
System Requirements
| Platforms | Windows 10+, macOS 15 Sequoia+ (Apple Silicon or Intel), iOS/iPadOS 16+, Linux (x86-64) |
| Formats | VST3, CLAP, Standalone (desktop); AUv3, Standalone (iOS/iPadOS) |
| CPU | Any modern x86-64 processor (Windows, Linux), Apple Silicon or Intel (macOS), or Apple Silicon/A-series (iOS). The DSP runs at native hardware rate (55,930 Hz) — allow for that in dense sessions. |
| RAM | Minimal. Factory library is ROM-sourced and loaded on first use. |
Installation
Windows (recommended — installer):
Download the XCent-Setup-<version>.exe installer (currently XCent-Setup-0.15.21.exe) and run it. The installer:
- Places VST3, CLAP, and Standalone in their standard system folders automatically
- Installs the Microsoft Edge WebView2 runtime if it isn't already present
- Adds an entry to Add/Remove Programs for clean uninstallation
- Clears any stale WebView2 cache from previous installs
Windows (manual):
From the extracted zip:
# VST3 — copy the entire XCent.vst3 folder
Copy-Item "plugins\VST3\XCent.vst3" -Destination "$env:ProgramFiles\Common Files\VST3" -Recurse
# CLAP — NukedOPP.dll must stay next to XCent.clap; the plugin loads its chip
# emulator from its own folder and is silent without it
Copy-Item "plugins\CLAP\XCent.clap" -Destination "$env:ProgramFiles\Common Files\CLAP"
Copy-Item "plugins\CLAP\NukedOPP.dll" -Destination "$env:ProgramFiles\Common Files\CLAP"
If you install manually, you may need to install the Microsoft Edge WebView2 runtime separately.
macOS (recommended — installer):
XCent requires macOS 15 Sequoia or later; the installer refuses to run on older versions. It runs natively on both Apple Silicon and Intel Macs.
Download XCent-<version>-macos.dmg (currently XCent-0.15.21-macos.dmg), open it, and double-click the .pkg inside. The installer lets you choose which formats to install:
- VST3 →
/Library/Audio/Plug-Ins/VST3/(system-wide, visible to all DAWs) - CLAP →
/Library/Audio/Plug-Ins/CLAP/ - AU (Audio Unit) →
/Library/Audio/Plug-Ins/Components/ - Standalone →
/Applications/
Gatekeeper notice (early releases): Until XCent is distributed with a Developer ID certificate, macOS will block the installer and plugins with a security warning. To proceed:
- When the warning appears, click OK to dismiss it.
- Open System Settings → Privacy & Security.
- Scroll down to the Security section — you'll see a message about XCent being blocked.
- Click Open Anyway, then confirm in the dialog that follows.
You may need to do this once for the installer and once for each plugin format the first time your DAW loads it. This is a one-time step per format.
macOS (manual):
If you'd rather not run the installer, place the plugin formats yourself:
# VST3
cp -r "plugins/VST3/XCent.vst3" ~/Library/Audio/Plug-Ins/VST3/
# CLAP
cp -r "plugins/CLAP/XCent.clap" ~/Library/Audio/Plug-Ins/CLAP/
# AU
cp -r "plugins/AU/XCent.component" ~/Library/Audio/Plug-Ins/Components/
# Standalone
cp -r "plugins/Standalone/XCent.app" /Applications/
If macOS quarantines the copied files, run the included helper script (it also refreshes the AU cache automatically):
bash clear-quarantine.sh
Or clear the quarantine flag manually:
xattr -dr com.apple.quarantine ~/Library/Audio/Plug-Ins/VST3/XCent.vst3
xattr -dr com.apple.quarantine ~/Library/Audio/Plug-Ins/CLAP/XCent.clap
xattr -dr com.apple.quarantine ~/Library/Audio/Plug-Ins/Components/XCent.component
xattr -dr com.apple.quarantine /Applications/XCent.app
macOS uninstall:
The DMG ships an uninstall.sh script alongside the .pkg. Mount the
DMG, open Terminal in the mounted volume, and run:
./uninstall.sh # remove plugins + Standalone (keep user data)
./uninstall.sh --purge # also remove ~/Documents/KnivesOnStrings/XCent/
./uninstall.sh --dry-run # preview what would be removed
./uninstall.sh --yes # skip confirmation prompt
The script removes the four installed components from
/Library/Audio/Plug-Ins/{VST3,CLAP,Components}/ and /Applications/,
forgets the pkgutil receipts, and refreshes the AU cache. Your user
banks, preferences, and logs (under ~/Documents/KnivesOnStrings/XCent/)
are preserved by default — pass --purge to remove those too.
If you no longer have the DMG, the same removal can be done manually:
sudo rm -rf "/Library/Audio/Plug-Ins/VST3/XCent.vst3"
sudo rm -rf "/Library/Audio/Plug-Ins/CLAP/XCent.clap"
sudo rm -rf "/Library/Audio/Plug-Ins/Components/XCent.component"
sudo rm -rf "/Applications/XCent.app"
sudo pkgutil --forget com.knivesonstrings.xcent.vst3
sudo pkgutil --forget com.knivesonstrings.xcent.clap
sudo pkgutil --forget com.knivesonstrings.xcent.au
sudo pkgutil --forget com.knivesonstrings.xcent.standalone
killall -9 AudioComponentRegistrar 2>/dev/null || true
Linux (recommended — installer):
Download XCent-<version>-linux-x86_64.tar.gz (currently
XCent-0.15.21-linux-x86_64.tar.gz), extract it, and run install.sh:
tar -xzf XCent-0.15.21-linux-x86_64.tar.gz
cd XCent-0.15.21-linux-x86_64
./install.sh # per-user install (default)
./install.sh --system # system-wide install (requires sudo)
./install.sh --uninstall # remove a previous install
The installer places:
- Per-user (default) — VST3 in
~/.vst3/, CLAP in~/.clap/, LV2 in~/.lv2/, Standalone in~/.local/bin/. - System-wide (
--system) — VST3 / CLAP / LV2 under/usr/lib/, Standalone in/usr/local/bin/.
It also copies the LGPL-2.1 NOTICES.txt file alongside the binaries
so the LGPL component (Nuked-OPP) carries its required attribution at
the install site.
Linux (manual):
If you'd rather not run a script, the bundle's contents can be copied manually:
# VST3 — copy the entire XCent.vst3 folder
cp -r VST3/XCent.vst3 ~/.vst3/
# CLAP
cp CLAP/XCent.clap ~/.clap/
# LV2 — copy the entire XCent.lv2 folder
cp -r LV2/XCent.lv2 ~/.lv2/
# Standalone
cp Standalone/XCent ~/.local/bin/
If you choose the manual route, also copy NOTICES.txt somewhere
discoverable (e.g. ~/.local/share/doc/xcent/) so the LGPL attribution
is preserved.
iOS/iPadOS: Install via the App Store or TestFlight (beta).
User Data Location
Everything XCent writes for you lives in one folder inside your Documents
folder: the patch library (Library), your preferences, and the log file.
The path is the same on all three desktop platforms:
- Windows:
Documents\KnivesOnStrings\XCent - macOS:
~/Documents/KnivesOnStrings/XCent - Linux:
~/Documents/KnivesOnStrings/XCent
On Windows, that is wherever Windows currently keeps your Documents folder. If
Documents is redirected into OneDrive — as it is on many PCs — XCent's folder
goes with it, at OneDrive\Documents\KnivesOnStrings\XCent. To see the folder
itself, use Settings → Sound → User Patches Folder → Browse, which opens
the Library folder inside it in your file manager.
The location is fixed — Settings does not move it. To put XCent's data
somewhere else (a portable install, or a second profile), set the
XCENT_SETTINGS_DIR environment variable to an absolute path before launching
your DAW or the Standalone app; XCent then uses that folder for all of it.
Interface Overview
XCent's window is divided into four main areas: Top Bar, Left Panel, Center Panel, and Patch Browser/Parameter Grid (right panel).
First-run tour
The first time you open XCent, an onboarding tour starts automatically a moment after the UI finishes loading. A spotlight overlay walks through nine steps — Modes, Operators, parameter editing, Modern view, Func mode, and the Patch browser. Each step has a Skip button if you want to jump straight in, and a Next → button to advance.
The tour only runs once. To re-run it later (e.g., to refresh, or to show a colleague), open Settings → Appearance → Onboarding and click Run interface tour again.
Tooltips
Hovering a parameter button (in Classic Edit, Func mode, or on a Modern view knob/slider) shows a tooltip after a 500 ms delay containing the full parameter name and value range — handy if a 3-letter abbreviation isn't immediately obvious. Tooltips can be disabled in Settings → Appearance → Input.
Top Bar
From left to right:
| Control | Function |
|---|---|
| XCent Logo | Branding. Does not perform any action. |
| ◄ Patch name ► | Displays the active patch name. Click to open patch browser. Arrows step through patches in the current bank. |
| ⚙ Settings | Opens Settings modal (themes, MIDI channel, audio device, user patches folder). |
| ? About | Opens About modal with version info and links. |
| 🎹 Keyboard | Toggles on-screen keyboard (49 keys, C2–C6). |
| SCOPE | Opens the XCent Scope window — a floating 3D waterfall display of the current patch's waveform. Button glows accent colour when the scope is open. See the SCOPE section. |
| CPU | Real-time CPU load meter for this instance. |
| VU | Output level meter (8-segment LED). |
| OUTPUT | Master output level knob. Double-click to reset to unity (0 dB). |
Left Panel
The left panel mirrors the DX100 hardware layout:
| Control | Function |
|---|---|
| LCD Display | 16-character dot-matrix display showing current mode, patch name, and parameter values during editing. Available in Teal (authentic) or OLED Blue styles. |
| PLAY / EDIT / FUNC | Mode selector buttons. Active mode is lit. |
| OP1–OP4 | (EDIT mode only) Selects which operator's parameters are shown. Each button has an indicator dot; the lit one is active. |
| Bank buttons | (PLAY mode only) Two rows of four LEDs: top row selects ROM banks (100, 200, 300, 400); bottom row selects RAM banks (A, B, C, D). Press PLAY again to toggle between ROM and RAM bank groups. |
| INC / DEC | Increment/decrement the selected parameter. Hold for continuous stepping. |
| Data Knob | Rotary data entry for the selected parameter (equivalent to INC/DEC but continuous). |
Center Panel
Read-only information about the active patch:
| Display | Function |
|---|---|
| Algorithm Diagram | Visual representation of operator routing. Shows carriers and modulators and how they connect. Click the dropdown to select algorithms 1–8 directly. |
| Envelope Display | Graphical representation of the active operator's ADSR envelope (AR, D1R, D1L, D2R, RR). Updates in real time as you edit. |
Patch Browser / Parameter Grid (Right Panel)
In PLAY mode: Shows the patch browser (6×4 grid, 24 slots per bank). Click any slot to load that patch immediately. The active patch is highlighted.
In EDIT mode: Shows either:
- Classic Edit — 4×6 button grid matching DX100 hardware layout
- Modern view — Graphical knobs and sliders (toggle via second press of EDIT button; green indicator shows Modern view is active)
PLAY Mode
PLAY is the default mode. Browse and load patches; no parameters are editable here.
The LCD displays the current patch number and name (e.g., 101: IVORYEBONY).
Navigating Banks
XCent organizes patches into two groups of banks. Use the bank buttons on the left panel or the patch browser to select the active bank:
ROM banks (read-only — original DX100 factory voices):
| Button | Bank | Voices |
|---|---|---|
| 100 | Bank 100 | Patches 101–124 |
| 200 | Bank 200 | Patches 201–224 |
| 300 | Bank 300 | Patches 301–324 |
| 400 | Bank 400 | Patches 401–424 |
RAM banks (writable — your own patches):
| Button | Bank | Voices |
|---|---|---|
| A | Bank A | Patches A 1–A24 |
| B | Bank B | Patches B 1–B24 |
| C | Bank C | Patches C 1–C24 |
| D | Bank D | Patches D 1–D24 |
Press PLAY again while already in PLAY mode to toggle between the ROM bank group and the RAM bank group.
Selecting a Patch
- Click any slot in the browser grid
- Use ◄ ► arrows in the top bar to step through the current bank
- Use INC/DEC buttons to step through patches
Favorites & Recents
Above the bank selector:
- ★ Favorites — Shows all starred patches from any bank
- 🕐 Recents — Shows the last 24 loaded patches
Click the star icon on any patch to toggle its favorite status.
EDIT Mode
EDIT mode exposes all voice parameters. Two views are available:
- Classic Edit — Button grid matching DX100 hardware (default)
- Modern view — Graphical knobs and sliders (press EDIT again to toggle; green indicator shows Modern view is active). To make Modern view the default when entering EDIT mode, enable Default to Modern view in Settings → Appearance → Input.
Both views modify the same parameters. The active operator (OP1–OP4) is selected via the left panel buttons.
Note: Edits modify a working copy of the patch. Use Save in the patch browser to commit changes. Unsaved edits survive mode switches but are lost if you load a different patch without saving. A red indicator in the top bar shows when the edit buffer is dirty (has unsaved changes).
Data Entry
All parameters support these interactions:
| Action | Function |
|---|---|
| Click + Drag | Drag up/down to change value. Faster than INC/DEC for large adjustments. |
| Shift + Drag | Fine adjustment. Slower drag for precise changes. |
| Double-click | Resets parameter to its value from the loaded patch (not init default). This is the "load point" — the state when the patch was last loaded. |
| Right-click | (Operator parameters only) Copy menu — copy current operator's value (or all parameters) to other operators. |
| INC / DEC | Increment/decrement by one step. Hold for continuous stepping. |
| Data Knob | Continuous rotary entry for selected parameter. |
Classic Edit
Parameter grid layout (6 columns × 4 rows):
| Row | Col 1 | Col 2 | Col 3 | Col 4 | Col 5 | Col 6 |
|---|---|---|---|---|---|---|
| 1 | ALG | FBL | FREQ | DET | OUT | AMS ON |
| 2 | AR | D1R | D1L | D2R | RR | KEY VEL |
| 3 | LW | LFS | LFD | SYNC | PMD | AMD |
| 4 | LS | RS | EBS | PMS | AMS | XPOSE |
For full parameter descriptions, see the Modern view section below or the Yamaha DX100 Owner's Manual. Hovering any parameter button shows a tooltip with the full parameter name and value range (toggleable in Settings → Appearance → Input).
Modern view
Press EDIT twice to enter Modern view (green indicator on EDIT button confirms active). The parameter area is divided into three sections: Operator, LFO, and Patch.
Operator Section (OP1–OP4)
Select the active operator using the OP1–OP4 buttons on the left panel. Each operator has independent parameters:
Envelope (5 sliders):
| Control | Parameter | Range | Description |
|---|---|---|---|
| AR | Attack Rate | 0–31 | How quickly envelope rises from zero to peak after note-on. 31 = instant, 0 = slowest. |
| D1R | Decay 1 Rate | 0–31 | How quickly level falls from peak to D1L sustain. 31 = instant, 0 = no decay. |
| D1L | Decay 1 Level | 0–15 | Sustain level after initial decay. 0 = maximum sustain, 15 = decay to silence. |
| D2R | Decay 2 Rate | 0–31 | Second, slower decay during sustain phase. Useful for sounds that die away while held. 0 = disabled. |
| RR | Release Rate | 0–15 | How quickly envelope falls to zero after note-off. 15 = instant, 0 = slowest. |
Frequency & Level (3 knobs):
| Control | Parameter | Range | Description |
|---|---|---|---|
| FREQ | Frequency | 0.5–31 | Operator frequency as multiple of played note. 1 = unison, 2 = octave up, 0.5 = octave down. Non-integer values create inharmonic, bell-like or metallic tones. Primary timbre control. |
| DETUNE | Fine Detuning | -3 to +3 | Shifts operator slightly sharp or flat. Subtle detuning between operators adds richness and movement. Center = no detune. |
| LEVEL | Output Level | 0–99 | For carriers: volume contribution. For modulators: modulation depth (higher = brighter/more complex timbres). |
Key Scaling & Modulation (3 knobs):
| Control | Parameter | Range | Description |
|---|---|---|---|
| L.SCL | Left Key Scaling | 0–99 | Level change for notes below the scaling breakpoint. Positive = increase level toward bass, negative = decrease. |
| R.SCL | Right Key Scaling | 0–99 | Level change for notes above the scaling breakpoint. Commonly used to reduce harshness in upper register. |
| EG.BS | EG Bias Sensitivity | 0–7 | How strongly breath controller (CC2) modulates this operator's envelope. 0 = no effect. |
Switches (2 toggles):
| Control | Parameter | Description |
|---|---|---|
| AME | Amplitude Mod Enable | When ON, LFO amplitude modulation affects this operator (governed by A.DEP in Patch section). |
| KVS | Key Velocity Sensitivity | When ON, harder keypresses increase operator level. OFF = full level regardless of velocity. |
LFO Section
Voice-global LFO parameters (shared by all four operators):
| Control | Parameter | Range | Description |
|---|---|---|---|
| Waveform | LFO Shape | 4 choices | Triangle (smooth vibrato/tremolo), Sawtooth (sweep), Square (trill), S&H (random stepped). |
| SPEED | LFO Rate | 0–99 | How fast the LFO cycles. Low = slow modulation, high = fast tremolo/vibrato. |
| DELAY | LFO Delay | 0–99 | Time after note-on before LFO begins. 0 = immediate, higher = delayed fade-in. |
Patch Section
Voice-global parameters (apply to entire patch):
Structure (2 knobs):
| Control | Parameter | Range | Description |
|---|---|---|---|
| ALG | Algorithm | 1–8 | Operator routing configuration. Determines carriers vs modulators. See Algorithm Reference. |
| FBL | Feedback Level | 0–7 | OP4 self-feedback. 0 = none, higher = buzzy/noisy/chaotic tones. DX100 only feeds back OP4. |
LFO Modulation (3 knobs + 1 toggle):
| Control | Parameter | Range | Description |
|---|---|---|---|
| P.DEP | Pitch Mod Depth | 0–99 | LFO pitch modulation amount (vibrato width). Works with P.SNS and mod wheel. |
| A.DEP | Amp Mod Depth | 0–99 | LFO amplitude modulation amount (tremolo) for operators with AME enabled. |
| P.SNS | Pitch Mod Sensitivity | 0–7 | Scales P.DEP's effect. Master sensitivity for pitch LFO. |
| SYNC | LFO Key Sync | ON/OFF | When ON, LFO resets phase on every note-on for consistent attack. |
Tuning & Performance (6 knobs + 2 toggles):
| Control | Parameter | Range | Description |
|---|---|---|---|
| XPOSE | Transpose | -24 to +24 | Shifts entire voice in semitones. Stored per-patch. |
| POLY | Polyphony | ON/OFF | ON = polyphonic (8 voices), OFF = monophonic (latest note cuts earlier). |
| PORT | Portamento | ON/OFF | Enables pitch glide between notes. Speed set by P.TIME. |
| P.TIME | Portamento Time | 0–99 | Glide speed when portamento active. Higher = slower. |
| P.BEND | Pitch Bend Range | 0–12 | Max pitch deviation in semitones at full pitch wheel deflection. |
Controller Routing (6 knobs):
| Control | Parameter | Range | Description |
|---|---|---|---|
| MW.P | Mod Wheel → Pitch | 0–99 | How much mod wheel (CC1) adds to vibrato (P.DEP). |
| MW.A | Mod Wheel → Amplitude | 0–99 | How much mod wheel adds to tremolo (A.DEP). |
| BC.P | Breath → Pitch | 0–99 | Breath controller (CC2) pitch modulation sensitivity. |
| BC.A | Breath → Amplitude | 0–99 | Breath controller amplitude sensitivity (expression). |
| BC.PB | Breath → Pitch Bias | 0–99 | Breath pressure applies DC offset to pitch (upward bend), not LFO modulation. |
| BC.EB | Breath → EG Bias | 0–99 | Breath raises operator levels for operators with EG.BS > 0 (brightness/attack). |
FUNC Mode
FUNC mode contains global performance and MIDI settings. These are not stored per-patch — they apply to the entire XCent instance.
| Parameter | Description |
|---|---|
| M.TUNE | Master Tune — fine-tunes entire instrument (±50 cents). Useful when matching hardware at non-concert pitch. |
| POLY/MONO | Global polyphonic/monophonic mode (can also be set per-patch in EDIT). |
| PORT MODE | Portamento mode: Full-time (always glide) or Fingered (glide only on legato). |
| PORT TIME | Global portamento glide speed (can also be set per-patch in EDIT). |
| P.BEND | Global pitch bend range in semitones (can also be set per-patch in EDIT). |
| MW PITCH | Global mod wheel pitch modulation sensitivity. |
| MW AMPLITUDE | Global mod wheel amplitude modulation sensitivity. |
| BC PITCH | Global breath controller pitch sensitivity. |
| BC AMPLITUDE | Global breath controller amplitude sensitivity. |
| BC PITCH BIAS | Global breath controller pitch bias. |
| BC EG BIAS | Global breath controller EG bias. |
SCOPE
The SCOPE button in the top bar opens the XCent Scope — a floating window that displays the current patch's waveform as an animated 3D waterfall. Play any note and watch the harmonics reshape in real time; tweak parameters and see the results immediately.
Live Mode
Click SCOPE in the top bar to open the window. Play any note on the keyboard — the most recent voice's pre-filter output scrolls into the waterfall. Older frames fade toward the back of the stack. The frontmost (brightest) trace is the current cycle; older frames fade as they recede.
Controls at the bottom of the scope window:
| Control | Description |
|---|---|
| Trigger | Note On (default) emits one frame per note trigger. Continuous emits frames at the display refresh rate regardless of triggers. |
| Cycles | How many frames stack in the waterfall: 8 / 16 / 32 / 64. Smaller values give a larger, bolder front-most frame. |
| Freeze | Pauses the waterfall scroll. New frames are ignored until you unfreeze. |
| Export… | Disabled for now — wavetable export arrives in a future update. |
Mouse gestures on the canvas:
| Gesture | Action |
|---|---|
| Click + drag horizontally | Rotate the waterfall yaw ±30°. |
| Click + drag vertically | Adjust amplitude zoom (0.5× – 4×). |
| Scroll wheel | Adjust perspective depth. |
| Double-click | Reset view. |
Themes
Choose the trace colour in Settings → Appearance → XCENT SCOPE:
| Theme | When to use |
|---|---|
| Classic Cyan (default) | Maximum contrast against XCent's dark skin. |
| XCent Amber | Matches XCent's LCD and OP-select LEDs. |
| OLED Blue | High-contrast on dim displays. |
| Light Mode | Pair with XCent's Light skin; inverts the fade direction. |
Theme changes apply immediately to an open scope window and persist across plugin sessions.
Window
- Minimum 500 × 360 pixels; default 720 × 500; resizable.
- Position and size persist across plugin sessions.
- On iOS, Scope opens as a fullscreen sheet (coming in a future update).
Render Mode
Click the RENDER tab to synthesise a wavetable from the current patch. The render runs on a background thread (~100–250 ms for a 256-frame capture) and drops the result into the waterfall display.
Controls:
| Control | Description |
|---|---|
| Mode | Single-cycle (one steady-state frame), Envelope Morph (N frames across an attack→decay window), or LFO Sweep (N frames across one LFO period). |
| Note | MIDI note the renderer simulates (default C4). Lower notes produce longer fundamental periods — useful for audibly-bassy wavetables. |
| Vel | Velocity 1–127 (default 100). Affects KVS-sensitive operators. |
| Frames | Number of frames in the output: 16 / 32 / 64 / 128 / 256 / 512. More frames = smoother morph, more CPU. |
| Length | Duration of the render window in seconds (0.1–8.0). Single-cycle ignores this. |
| Render | Starts the offline render. While running, the button reads "Rendering…" and a fade-in overlay sits over the waterfall. |
The rendered wavetable is stable — it doesn't scroll. Use the same mouse gestures (drag, wheel, double-click) to inspect it.
Switching between LIVE and RENDER tabs preserves both buffers: the live scope keeps its rolling frames while the render tab holds the last completed render.
Wavetable export
Coming in a future update — the Export… button on the Render tab will save the rendered wavetable as Serum .wav (with ClmS + uhWT chunks), Vital .vital, Surge .wt, or plain WAV for u-he Zebra / Hive / generic wavetable consumers.
Patch Management
Banks
XCent has two types of banks:
ROM banks (100, 200, 300, 400): 96 original DX100 factory voices, read-only. These match the hardware's factory ROM exactly. Patch slots are numbered in the DX100 style: bank 100 contains patches 101–124, bank 200 contains 201–224, and so on.
RAM banks (A, B, C, D): 96 writable slots for your own patches (24 per bank), pre-loaded with the other 96 factory voices so no slot starts empty — save over any slot to make it yours. Patch slots are displayed as A 1–A24, B 1–B24, etc. RAM bank contents are automatically saved to disk when changed.
Saving a Patch
After editing:
- Click SAVE button in the patch browser (or right-click a slot → Save here)
- Select a destination RAM bank (A–D) and slot
- Enter a patch name (10 characters max, DX100 compatible)
- Click Save
ROM banks are read-only and cannot be overwritten. The red "dirty" indicator in the top bar disappears when changes are saved.
Favorites & Recents
- ★ Favorites — Click the star icon on any patch to add it to Favorites. Access via PLAY mode → Favorites view.
- 🕐 Recents — Automatically tracks the last 24 loaded patches. Access via PLAY mode → Recents view.
Drag and Drop
Patches can be reordered within a bank and moved between banks:
- Move: Click and drag from one slot to another
- Copy: Hold Shift while dragging
- Swap: Drag occupied slot onto another occupied slot
Dragging to a ROM bank slot is not permitted.
Rename & Delete
Right-click any patch slot in a RAM bank:
- Rename — Change patch name (10 chars max)
- Delete — Clear slot (confirmation required)
- Initialize — Reset slot to init patch (all parameters to default)
SysEx Import & Export
XCent is compatible with standard DX100 SysEx formats:
Export:
- Single voice (VCED) — Right-click patch → Export SysEx → saves as
.syxfile - Bank (VMEM) — Right-click bank header → Export Bank → saves 32 voices as
.syx
A DX100 bank dump always carries 32 voices while a bank holds 24: XCent pads the extra eight with initialized voices on export, and discards them on import, as the hardware does.
Import:
- Drag
.syxfile onto patch browser - Or right-click → Import SysEx → select
.syxfile
Imported bank dumps load into the first RAM bank (A). Compatible with hardware DX100 units and librarians:
- Dexed
- DX Manager
- Patch Base
- MIDI Quest
- Any DX100/DX21/DX27 compatible editor
MIDI
MIDI Channel
Plugin mode (VST3/CLAP): Responds to the MIDI channel configured in your DAW's instrument routing.
Standalone mode: Select MIDI channel in Settings → MIDI / Audio tab:
- Omni — Responds to all channels
- 1–16 — Responds only to the selected channel
Control Change (CC)
| CC | Function | Description |
|---|---|---|
| 1 | Mod Wheel | Adds to pitch/amp modulation per MW.P and MW.A settings |
| 2 | Breath Controller | Modulates pitch/amp/EG bias per BC.P, BC.A, BC.PB, BC.EB settings |
| 4 | Foot Controller | Expression (amplitude) |
| 5 | Portamento Time | Real-time control of portamento speed |
| 64 | Sustain Pedal | Hold notes (standard sustain behavior) |
| 65 | Portamento On/Off | Toggle portamento without using front panel |
Pitch Bend
Full-resolution 14-bit pitch bend. Range is set:
- Per-patch: P.BEND in EDIT mode (Patch section)
- Globally: P.BEND in FUNC mode
Default range is 2 semitones (±2). Maximum range is 12 semitones (±1 octave).
Velocity
Velocity sensitivity is controlled per-operator via KVS (Key Velocity Sensitivity) in EDIT mode:
- 0 — No velocity sensitivity (operator always at full level)
- 1–7 — Increasing velocity response (7 = maximum dynamic range)
Each operator can have independent velocity sensitivity. This allows, for example:
- Carrier with KVS=0 for constant level
- Modulator with KVS=7 for velocity-sensitive brightness
Program Change
Program Change messages (0–127) load patches from the active bank:
| Program | Patch |
|---|---|
| 0 | Slot 1 |
| 1 | Slot 2 |
| ... | ... |
| 23 | Slot 24 |
Bank Select (CC 0 / CC 32) switches banks before sending Program Change:
| Bank Select value | Bank |
|---|---|
| 0 | 100 (ROM) |
| 1 | 200 (ROM) |
| 2 | 300 (ROM) |
| 3 | 400 (ROM) |
| 4 | A (RAM) |
| 5 | B (RAM) |
| 6 | C (RAM) |
| 7 | D (RAM) |
Portamento
Two portamento modes (set via PORT MODE in FUNC mode):
- Full-time — Glide always active between consecutive notes
- Fingered — Glide only when notes overlap (legato playing)
Portamento time is controlled by:
- PORT TIME in FUNC mode (global)
- P.TIME in EDIT mode Patch section (per-patch)
- CC 5 (real-time MIDI control)
SysEx
XCent responds to and transmits standard DX100 SysEx messages over MIDI:
Receive:
- VCED (single voice dump) — Loads into edit buffer
- VMEM (32-voice bank dump) — Imports bank to RAM bank A
Transmit:
- VCED — Sends edit buffer on request from librarian
- VMEM — Sends current bank (32 voices) on request
SysEx exchange works bidirectionally with:
- Hardware DX100/DX21/DX27 units
- Software librarians (Dexed, DX Manager, etc.)
- Generic MIDI SysEx utilities
Settings
Click the ⚙ icon in the top bar to open Settings. Three tabs:
Sound
| Setting | Description |
|---|---|
| Engine Mode | Vintage (authentic — includes YM3014 DAC + NJM072D analog filter) or Modern (clean — bypasses analog stage for alias-free FM). |
| User Patches Folder | Click Browse to open the folder where your RAM banks and imported banks are stored (see User Data Location). The location is fixed; only the XCENT_SETTINGS_DIR environment variable changes it. |
Appearance
| Setting | Options | Description |
|---|---|---|
| Window Size | 100%, 125%, 150%, 175%, 200% | Plugin window scale. 100% = 800×600 px. Does not affect audio. |
| Skin | Dark, Light | Global color theme. Applies to all UI elements. |
| Matrix Display | Teal, OLED Blue | LCD display color. Teal = authentic DX100 LCD green. OLED Blue = modern blue OLED aesthetic. |
| XCENT SCOPE | Classic Cyan, XCent Amber, OLED Blue, Light Mode | Trace colour for the floating scope window. Classic Cyan is the default. Changes apply immediately to an open scope window. |
| Modified Indicator | DX-style (e→E case flip), Standard (asterisk) | How the LCD signals an edited patch with unsaved changes. |
| Mouse wheel edits parameters | On / Off | Enables scroll-wheel adjustment of Modern view knobs and sliders. Hold Ctrl for coarse, Shift for fine. Disable if your trackpad accidentally grabs controls. |
| Show tooltips on hover | On / Off | Shows the full parameter name and value range when you hover an Edit/Func grid button or a Modern view knob. 500 ms delay to avoid flashing during quick mouse passes. |
| Default to Modern view | On / Off | When EDIT mode is entered, automatically switch to Modern view rather than the Classic button grid. |
| Run interface tour again | (button) | Re-runs the first-run onboarding spotlight tour. See First-run tour. |
MIDI / Audio
| Setting | Description |
|---|---|
| MIDI Receive Channel | Omni (all channels) or 1–16 (specific channel). Plugin mode: use DAW routing. Standalone only. |
| Audio Device | (Standalone only) Output device selection + sample rate. |
| MIDI Input | (Standalone only) MIDI input device selection. Shows all available MIDI ports. |
Settings are saved automatically and persist across sessions.
FM Sound Design
XCent uses the same four-operator FM synthesis engine as the Yamaha DX100. Every parameter works identically to the hardware. If you know how to program a DX100, you know how to program XCent.
The Yamaha DX100 Owner's Manual is a thorough resource for FM synthesis theory and sound design technique. It applies directly to XCent.
XCent-Specific Features
XCent adds modern conveniences not available on the hardware:
- Undo/redo — Available via Ctrl+Z / Ctrl+Y (or Cmd+Z / Cmd+Shift+Z on macOS). Explore freely without fear.
- Visual Edit view — All parameters accessible simultaneously without sequential button navigation.
- Algorithm diagram — Visual operator routing updates in real time as you change ALG.
- Envelope display — Envelope shape updates live as you edit stages.
- Favorites & Recents — Quick access to frequently-used patches.
- On-screen keyboard — 49-key (C2–C6) keyboard with pitch and mod wheels. Play from the plugin window without a MIDI controller.
- Drag and drop — Reorder patches within and between RAM banks.
Authentic Hardware Behavior
XCent intentionally preserves the hardware's character:
FM aliasing: Native 55,930 Hz sample rate means sidebands fold back into the audible range. This is not a bug — it's the DX100 sound. Higher frequency ratios and feedback create brighter, noisier tones due to aliasing.
DAC quantization: YM3014 floating-point DAC (10-bit mantissa + 3-bit exponent) introduces subtle quantization artifacts at low levels. Audible as noise floor grain.
Reconstruction filter: NJM072D analog low-pass filter (-3 dB at ~10,600 Hz) with soft treble rolloff. Authentic DX100 warmth.
Integer signal path: All DSP computed at hardware bit widths (20-bit phase, 14-bit operators, 13-bit EG). No floating-point "cleaning" — bit-exact to the chip.
To bypass these characteristics: Set Engine Mode to Modern in Settings → Sound. This skips the analog output stage for clean, alias-free FM (still at 55,930 Hz native rate, but without DAC quantization or filter coloration).
Appendix
Algorithm Reference
XCent supports all eight DX100 FM algorithms. Each algorithm defines which operators are carriers (produce audible output) and which are modulators (shape carrier timbre).
Algorithm 1: Linear Stack
OP1 → OP2 → OP3 → OP4 → OUT
Four operators in series. Maximum modulation depth. Useful for complex, evolving timbres and aggressive, metallic sounds.
Algorithm 2: Three Modulators + Carrier
OP1 → OP2 → OP3 → OP4 → OUT
(OP4 is the sole carrier)
Three modulators feeding one carrier. Extreme timbral complexity. Good for bells, gongs, and dense harmonic content.
Algorithm 3: Dual Stacks
OP1 → OP2 → OUTOP3 → OP4 → OUT
Two independent 2-operator chains. Useful for layered sounds: bass + lead, pad + pad, dual timbres.
Algorithm 4: Two Modulators + Two Carriers
OP1 → OP2 → OUTOP3 → OUTOP4 → OUT
One modulated carrier + two pure carriers. Good for adding brightness or octaves to a modulated tone.
Algorithm 5: Two Carriers, Two Chains
OP1 → OP2 → OUTOP3 → OP4 → OUT
Two independent carriers, each with one modulator. Balanced complexity. Versatile for pads, leads, basses.
Algorithm 6: Three Independent Carriers + One Modulator
OP1 → OP2 → OUTOP3 → OUTOP4 → OUT
One modulated carrier + two pure carriers. Similar to Alg 4 but different routing. Useful for adding harmonics.
Algorithm 7: Three Carriers + One Modulated Pair
OP1 → OUTOP2 → OUTOP3 → OP4 → OUT
Three independent carriers: two pure, one modulated. Good for organ-like tones, stacked harmonics.
Algorithm 8: Four Independent Carriers
OP1 → OUTOP2 → OUTOP3 → OUTOP4 → OUT
Four sine waves (no modulation). Pure additive synthesis. Useful for organs, simple waveforms, tuned percussion.
Note: OP4 self-feedback is available in all algorithms. Set FBL > 0 to add harmonics, noise, or chaotic character.
Keyboard Shortcuts
| Action | Windows/Linux | macOS |
|---|---|---|
| Undo | Ctrl+Z | Cmd+Z |
| Redo | Ctrl+Y or Ctrl+Shift+Z | Cmd+Shift+Z |
| Save Patch | Ctrl+S | Cmd+S |
| Open Patch Browser | Ctrl+O | Cmd+O |
| Toggle On-Screen Keyboard | Ctrl+K | Cmd+K |
| Next Patch | → | → |
| Previous Patch | ← | ← |
| Mode: PLAY | F1 | F1 |
| Mode: EDIT | F2 | F2 |
| Mode: FUNC | F3 | F3 |
Known Issues
See bugs.md in the repository for current known issues and workarounds.
Support
Bug reports & feature requests: GitHub Issues
General questions: knivesonstrings@gmail.com
Website: knivesonstrings.com/xcent
Source code: github.com/Knives-On-Strings/xcent
Trademarks & Attribution
Yamaha and DX100 are trademarks of Yamaha Corporation. XCent is an independent emulation, not affiliated with or endorsed by Yamaha.
ASIO is a trademark and software of Steinberg Media Technologies GmbH. ASIO support is included in the Windows Standalone build to allow users to connect ASIO-compatible audio interfaces.
VST is a trademark of Steinberg Media Technologies GmbH.
Apple, macOS, iOS, iPadOS, and Audio Units (AU/AUv3) are trademarks of Apple Inc.
Windows is a trademark of Microsoft Corporation.
Open-Source Components
XCent's compiled binary statically links the following open-source libraries:
- Nuked-OPP — Cycle-accurate YM2164 (OPP) emulator. A modified fork of Nuke.YKT's Nuked-OPM with DX100-specific behavioural tweaks and renamed symbols. Original © 2020, 2026 Nuke.YKT; modifications © Knives on Strings. Licensed under the GNU Lesser General Public License version 2.1 (LGPL-2.1-or-later). Modified source available at the Knives on Strings public GitHub organization (URL in
NOTICES.txt) and on request via knivesonstrings@gmail.com. - JUCE 9 — Cross-platform audio plugin framework. © Raw Material Software Limited. Used under the JUCE 9 license, not under the AGPLv3.
- clap-juce-extensions — CLAP format support for JUCE. © 2019–2020 Paul Walker. MIT License.
- VST3 SDK — © Steinberg Media Technologies GmbH. Used under MIT License (via JUCE).
- React + React DOM — © Meta Platforms. MIT License.
- Zustand — MIT License.
- Tailwind CSS — MIT License.
- Inter typeface by Rasmus Andersson — SIL Open Font License 1.1.
Acknowledged as an upstream reference but not linked into the shipped product:
- Nuked-OPM — Original YM2151 emulator by Nuke.YKT (LGPL-2.1-or-later). Used by the test suite as a verification baseline for Nuked-OPP.
The complete third-party notices are in NOTICES.txt, and the full license texts in the licenses folder beside it; both come with every XCent download.
XCent User Manual v0.15.21 — September 2026
© 2026 Knives on Strings. All rights reserved.
For the most up-to-date version of this manual, visit knivesonstrings.com/xcent/manual.
