Documentation

Everything you need to know about using and building JamWide.


Quick Start

  1. Install the plugin — Download from the releases page and copy to your plugin folder
  2. Load in your DAW — Add JamWide to a track
  3. Connect to a server — Enter a server address or pick from the browser
  4. Start jamming! — Route audio to the plugin and play

User Guide

Connecting to a Server

  1. Open the JamWide plugin GUI
  2. In the connection panel, enter:
    • Server: Address and port (e.g., ninbot.com:2049)
    • Username: Your display name
    • Password: Leave empty for public servers
  3. Click Connect

Tip: Use the built-in server browser to see active public servers with player counts.

Audio Routing

JamWide receives audio from your DAW track and sends it to the NINJAM session:

Your Input → DAW Track → JamWide Plugin → NINJAM Server
                              ↓
                        Plugin Output → Your Speakers
                              ↑
                     Other Players' Audio

Best Practice: Create a dedicated track for JamWide and route your instrument to it.

Understanding NINJAM Timing

NINJAM uses intervals instead of real-time audio:

This means there’s always a one-interval delay, but everyone is perfectly synchronized.

Example: At 120 BPM with 16 BPI, each interval is 8 seconds. You hear what others played 8 seconds ago.

Chat

The built-in chat lets you communicate with other musicians:

Metronome

Use the metronome to stay in time:


Parameters Reference

Parameter Range Default Description
Master Volume 0.0 – 1.0 0.8 Overall output level
Metronome Volume 0.0 – 1.0 0.5 Click track level
Metronome Pan -1.0 – 1.0 0.0 Click track stereo position
Monitor Input On/Off Off Hear your own input
Connected On/Off Off Connection state

Building from Source

Requirements

Clone the Repository

git clone --recursive https://github.com/mkschulze/JamWide.git
cd JamWide

Build (macOS)

# Configure - Development build (verbose logging)
cmake -B build -DCMAKE_BUILD_TYPE=Release -DJAMWIDE_DEV_BUILD=ON

# Or Production build (minimal logging)
cmake -B build -DCMAKE_BUILD_TYPE=Release -DJAMWIDE_DEV_BUILD=OFF

# Build
cmake --build build --config Release

Build (Windows)

Requirements:

# Configure with automatic dependency downloads
cmake -B build -G "Visual Studio 17 2022" -A x64 -DCLAP_WRAPPER_DOWNLOAD_DEPENDENCIES=TRUE

# Build with MSBuild (recommended)
$MSBUILD = "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe"
& $MSBUILD build\jamwide.sln /p:Configuration=Release /v:minimal

# Or build with CMake (alternative)
cmake --build build --config Release

Note: The first configuration downloads VST3 SDK and other dependencies automatically. For Visual Studio 2026 or other versions, adjust the generator name (e.g., "Visual Studio 18").

Quick Install

macOS

./install.sh

Installs to:

Windows

.\install-win.ps1

Installs to:

Build Output

macOS

Windows


Architecture

JamWide/
├── src/
│   ├── core/           # NJClient port (networking, audio decode/encode)
│   ├── plugin/         # CLAP entry point and wrapper
│   ├── platform/       # OS-specific GUI (Metal/D3D11 + ImGui)
│   ├── threading/      # Run thread, command queue, SPSC ring
│   ├── net/            # Server list fetcher
│   ├── ui/             # ImGui UI panels
│   └── debug/          # Logging utilities
├── wdl/                # WDL libraries (jnetlib, sha, etc.)
├── libs/               # Third-party submodules
└── CMakeLists.txt

Threading Model

JamWide uses a command queue architecture for thread safety:

Thread Responsibility
UI Thread Renders ImGui, sends commands to run thread
Run Thread Processes NJClient, handles network I/O
Audio Thread Calls AudioProc() for sample processing

Communication between threads is lock-free via SPSC ring buffers.


Troubleshooting

Plugin doesn’t appear in DAW

  1. Verify the plugin is in the correct folder
  2. Check that your DAW supports the format (CLAP/VST3/AU)
  3. Rescan plugins in your DAW
  4. On macOS, you may need to allow the plugin in System Preferences → Security

Can’t connect to server

  1. Check your internet connection
  2. Verify the server address and port
  3. Try a different server from the browser
  4. Check if a firewall is blocking the connection

Audio issues

  1. Ensure your DAW’s sample rate matches a common rate (44.1k, 48k)
  2. Check that audio is routed to the JamWide track
  3. Verify Master Volume is not at zero
  4. Check Monitor Input setting

Contributing

We welcome contributions! See the GitHub repository for: