Electric guitar interface setup: Difference between revisions
Mr.Smith1970 (talk | contribs) update: fixed PipeWire/Pulse config, switched to sessionVariables for GUI plugin paths, added memlock limits, expanded software guide with categorized explanations |
Mr.Smith1970 (talk | contribs) Electric guitar interface setup: clean up, fix Wine package, add Audient iD4, remove unavailable plugins, comply with MOS |
||
| Line 1: | Line 1: | ||
= Electric guitar interface setup = | = Electric guitar interface setup = | ||
This guide covers setting up an electric guitar with NixOS to achieve professional, low-latency audio processing. It targets live playing with round-trip latency (RTL) under 6 ms using the modern PipeWire/JACK stack. | This guide covers setting up an '''electric guitar''' with NixOS to achieve professional, low-latency audio processing. It targets live playing with round-trip latency (RTL) under 6 ms using the modern PipeWire/JACK stack. | ||
{{Warning|Always start with monitoring volume at minimum when testing new signal chains. A sudden, loud feedback loop can be generated during loopback testing. Increase volume gradually only after the plugin is open and stable.}} | |||
The digital signal chain for a guitar consists of: | The digital signal chain for a guitar consists of: | ||
| Line 12: | Line 10: | ||
# '''Real-time processing''' on NixOS using a low-latency kernel and specialized software. | # '''Real-time processing''' on NixOS using a low-latency kernel and specialized software. | ||
{{Note|Software-reported latency values are often inaccurate. Physical measurement via loopback test is mandatory for verification.}} | |||
== Installation == | == Installation == | ||
=== System | === System configuration === | ||
Add the following to your <code>/etc/nixos/configuration.nix</code>. This configuration is optimized for high-performance CPUs like the AMD Ryzen 7 9700X (Zen 5 architecture). | Add the following to your <code>/etc/nixos/configuration.nix</code>. This configuration is optimized for high-performance CPUs like the AMD Ryzen 7 9700X (Zen 5 architecture). | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
{ pkgs | { pkgs, ... }: | ||
{ | { | ||
| Line 59: | Line 57: | ||
# Critical: Allow unlimited memlock for real-time audio buffers | # Critical: Allow unlimited memlock for real-time audio buffers | ||
security.pam.loginLimits = [ | security.pam.loginLimits = [ | ||
{ | { domain = "@audio"; item = "memlock"; type = "-"; value = "unlimited"; } | ||
{ domain = "@audio"; item = "rtprio"; type = "-"; value = "95"; } | |||
{ | |||
]; | ]; | ||
| Line 90: | Line 78: | ||
programs.gamemode.enable = true; | programs.gamemode.enable = true; | ||
# 4 | # 4. Plugin Search Paths (Crucial for NixOS DAWs) | ||
# Use sessionVariables for GUI apps launched from DE menu | # Use sessionVariables for GUI apps launched from DE menu | ||
environment.sessionVariables = let | environment.sessionVariables = let | ||
makePluginPath = format | makePluginPath = format: | ||
(pkgs.lib.makeSearchPath format [ | |||
"$HOME/.nix-profile/lib" | |||
"/run/current-system/sw/lib" | |||
"/etc/profiles/per-user/$USER/lib" | |||
]) + ":$HOME/.${format}"; | |||
in { | in { | ||
LV2_PATH = makePluginPath "lv2"; | LV2_PATH = makePluginPath "lv2"; | ||
| Line 109: | Line 93: | ||
}; | }; | ||
# | # 5. Essential Packages | ||
nixpkgs.config.allowUnfree = true; # Required for REAPER, Tonelib, etc. | nixpkgs.config.allowUnfree = true; # Required for REAPER, Tonelib, etc. | ||
environment.systemPackages = with pkgs; [ | environment.systemPackages = with pkgs; [ | ||
| Line 129: | Line 113: | ||
# --- Standalone Guitar Processors --- | # --- Standalone Guitar Processors --- | ||
guitarix | guitarix | ||
# --- Plugins (LV2/CLAP) --- | # --- Plugins (LV2/CLAP) --- | ||
| Line 140: | Line 123: | ||
chow-centaur # Klon Centaur emulation | chow-centaur # Klon Centaur emulation | ||
chow-phaser | chow-phaser | ||
# --- Practice & Learning --- | # --- Practice & Learning --- | ||
| Line 149: | Line 131: | ||
yabridge | yabridge | ||
yabridgectl | yabridgectl | ||
wineWow64Packages.stable # Use wineWow64Packages, as wineWowPackages is deprecated | |||
]; | ]; | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Note|1=For advanced users, the [https://github.com/musnix/musnix musnix] flake automates many low-level audio optimizations (such as PREEMPT_RT kernel tuning and rtirq). If you experience persistent Xruns with the standard Zen kernel, replacing manual tweaks with <code>musnix.enable = true;</code> is highly recommended. For Linux kernels 6.12 and newer, PREEMPT_RT is built-in.}} | |||
== Configuration == | |||
=== Applying | === Applying changes === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Line 165: | Line 149: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | === Pro audio profile === | ||
To achieve minimal latency, you must bypass standard software mixing: | |||
# Open <code>pavucontrol</code>. | |||
# Go to the '''Configuration''' tab. | |||
# Set your interface profile to '''Pro Audio'''. | |||
If the "Pro Audio" profile is missing, ensure <code>pipewire-alsa</code> is installed and restart PipeWire. This profile disables software mixing and enables hardware-exclusive mode, which is critical for achieving the lowest latency. | |||
=== Dynamic buffer control === | |||
You can change latency without rebuilding the system. Note that these settings affect PipeWire clients only; ALSA-direct applications (like Ardour with ALSA backend) use their own buffer settings. | |||
<syntaxhighlight lang="bash"> | |||
# Modern syntax (PipeWire 0.3.65+): | |||
pw-cli set-param 0 clock.force-quantum 64/48000 | |||
# Verify current settings: | |||
pw-cli dump settings | grep -E "quantum|rate" | |||
</syntaxhighlight> | |||
Use <code>pw-top</code> in a separate terminal to monitor which applications are consuming the most DSP processing time. Look for the <code>ERR</code> column — values greater than zero indicate Xruns. | |||
== Hardware and connection == | |||
=== Verified compatible devices | Standard PC line-ins are unsuitable for guitar. Use a dedicated interface with a Hi-Z (Instrument) input. | ||
=== Verified compatible devices === | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 181: | Line 189: | ||
|- | |- | ||
| '''Arturia MiniFuse 1''' || Stable performance under PipeWire. | | '''Arturia MiniFuse 1''' || Stable performance under PipeWire. | ||
|- | |||
| '''Audient iD4 (Gen 1)''' || Fully functional on NixOS. No special drivers needed. | |||
|} | |} | ||
=== Hardware | === Hardware rules === | ||
# Connect the interface '''directly to the motherboard''' (rear panel USB 3.0/3.2). Avoid USB hubs — they add latency and can cause Xruns. | # Connect the interface '''directly to the motherboard''' (rear panel USB 3.0/3.2). Avoid USB hubs — they add latency and can cause Xruns. | ||
# Use a high-quality, shielded USB cable. Audio dropouts are frequently caused by cheap cables acting as antennas for electrical interference. | # Use a high-quality, shielded USB cable. Audio dropouts are frequently caused by cheap cables acting as antennas for electrical interference. | ||
# '''Disable Bluetooth''' during live playing: <code>rfkill block bluetooth</code>. BT audio stack can generate interrupt storms causing Xruns. | # '''Disable Bluetooth''' during live playing: <code>rfkill block bluetooth</code>. The BT audio stack can generate interrupt storms causing Xruns. | ||
=== Verification === | === Verification === | ||
| Line 195: | Line 205: | ||
arecord -l # Verify ALSA sees the capture input | arecord -l # Verify ALSA sees the capture input | ||
aplay -l # Verify ALSA sees the playback output | aplay -l # Verify ALSA sees the playback output | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Software guide == | |||
== Software | |||
This section explains the available software for guitar processing on NixOS, organized by purpose. | This section explains the available software for guitar processing on NixOS, organized by purpose. | ||
=== Digital | === Digital audio workstations === | ||
{| class="wikitable" | {| class="wikitable" | ||
| Line 242: | Line 221: | ||
|} | |} | ||
=== Amp | === Amp simulators and neural modelers === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Software !! Purpose !! Notes | ! Software !! Purpose !! Notes | ||
|- | |- | ||
| '''Neural Amp Modeler (NAM)''' | | '''Neural Amp Modeler (NAM)''' || Loads <code>.nam</code> files — AI captures of real tube amps || No built-in GUI in LV2 version. In Carla/Ardour: look for <code>atom:Path</code> parameter and point to your <code>.nam</code> file. Models: [https://tonehunt.org tonehunt.org] | ||
|- | |- | ||
| '''Kapitonov Plugins Pack (KPP)''' || Profile-based traditional amp modeling || Excellent for classic rock/metal. Lower CPU than neural nets. | | '''Kapitonov Plugins Pack (KPP)''' || Profile-based traditional amp modeling || Excellent for classic rock/metal. Lower CPU than neural nets. | ||
| Line 254: | Line 233: | ||
|} | |} | ||
{{Warning|Neural amps (NAM, KPP) only model preamp/poweramp. You must load a Cabinet IR (via LSP IR Loader or similar) to get a usable guitar tone. Without an IR, it sounds like a swarm of angry bees.}} | |||
=== Effects | === Effects plugins === | ||
{| class="wikitable" | {| class="wikitable" | ||
! Plugin Pack !! Key Features | ! Plugin Pack !! Key Features | ||
|- | |- | ||
| '''LSP Plugins''' || Professional EQ, compression, gating. | | '''LSP Plugins''' || Professional EQ, compression, gating. Includes LSP Latency Meter and LSP Impulse Response Loader (required for cabinet sims). | ||
|- | |- | ||
| '''Dragonfly Reverb''' || High-quality algorithmic reverb (Hall, Room, Plate). | | '''Dragonfly Reverb''' || High-quality algorithmic reverb (Hall, Room, Plate). | ||
|- | |- | ||
| '''Chow Plugins''' | | '''Chow Plugins''' || High-fidelity emulations of classic pedals using RNN/WDF. | ||
|- | |- | ||
| '''Calf Studio Gear''' || Vintage-style effects with "warm" analog character. | | '''Calf Studio Gear''' || Vintage-style effects with "warm" analog character. | ||
| Line 272: | Line 251: | ||
|} | |} | ||
=== Modular | === Modular hosts === | ||
{| class="wikitable" | {| class="wikitable" | ||
| Line 282: | Line 261: | ||
|} | |} | ||
=== Windows VST | === Windows VST compatibility === | ||
{| class="wikitable" | {| class="wikitable" | ||
| Line 295: | Line 274: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Tips and tricks == | |||
== Rocksmith 2014 | === Rocksmith 2014 === | ||
Rocksmith 2014 runs on NixOS via Proton and PipeWire. | Rocksmith 2014 runs on NixOS via Proton and PipeWire. | ||
# '''Install dependencies''': | # '''Install dependencies''': | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
programs.steam.enable = true; | programs.steam.enable = true; | ||
programs.gamemode.enable = true; | programs.gamemode.enable = true; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# '''Steam Launch Options''' (force low latency + real-time priority): | # '''Steam Launch Options''' (force low latency + real-time priority): | ||
<pre> | <pre>PIPEWIRE_LATENCY=128/48000 gamemoderun %command%</pre> | ||
PIPEWIRE_LATENCY=128/48000 gamemoderun %command% | Start with <code>128/48000</code> (~5ms). If stable, try <code>64/48000</code> (~2.5ms). Values below 64 may cause crashes. | ||
</pre> | |||
Start with <code>128/48000</code> (~5ms). If stable, try <code>64/48000</code> (~2.5ms). Values | |||
# '''Sample Rate''': Rocksmith strictly requires | # '''Sample Rate''': Rocksmith strictly requires 48000 Hz. Do not force 96000 Hz while playing. | ||
# '''For interface users''' (no Real Tone Cable): Install the [https://github.com/mdias/rs_asio RS_ASIO] mod to enable direct interface support. | |||
=== Measuring latency === | |||
Always perform a physical loopback test. | |||
{{Warning|Before starting, turn output volume on your audio interface all the way down. A sudden, loud feedback loop can be generated if the connection is unstable. Increase volume gradually only after the plugin is open.}} | |||
# Connect a cable from your interface '''Output''' back into the '''Input''' (use a TS/TRS patch cable). | # Connect a cable from your interface '''Output''' back into the '''Input''' (use a TS/TRS patch cable). | ||
| Line 355: | Line 310: | ||
# Play a sharp transient (string scratch) and read the '''Round-trip Latency (RTL)''' value. | # Play a sharp transient (string scratch) and read the '''Round-trip Latency (RTL)''' value. | ||
'''Target values''': | |||
* < 5 ms: Professional / Imperceptible | |||
* 5–10 ms: Acceptable for practice | |||
* > 12 ms: Noticeable "lag", difficult to play in time | |||
== Quick | === Quick start checklist === | ||
Before playing, verify: | Before playing, verify: | ||
| Line 408: | Line 336: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== See | == Troubleshooting == | ||
{| class="wikitable" | |||
! Symptom !! Cause & Solution | |||
|- | |||
| '''Xruns (audio glitches)''' || Ensure <code>powerManagement.cpuFreqGovernor = "performance"</code> is active. Check <code>pw-top</code> for high-CPU nodes. Close browsers/heavy apps during playing. Disable Wi-Fi. As a last resort, add <code>processor.max_cstate=1</code> to <code>boot.kernelParams</code> (disables CPU sleep — high power draw). | |||
|- | |||
| '''No sound''' || Check <code>qpwgraph</code> — PipeWire does not auto-connect hardware. Verify Pro Audio profile in <code>pavucontrol</code>. Run <code>sudo lsof /dev/snd/*</code> to find conflicting processes. | |||
|- | |||
| '''DAW cannot find plugins''' || Ensure <code>environment.sessionVariables</code> block is applied. Log out/in after rebuild. Verify paths: <code>echo $LV2_PATH</code>. | |||
|- | |||
| '''GPU causing audio glitches''' || Disable GPU power management. Prefer X11 over Wayland for lowest latency. | |||
|- | |||
| '''Bluetooth causing Xruns''' || Disable Bluetooth stack: <code>rfkill block bluetooth</code> during live sessions. | |||
|- | |||
| '''PipeWire config not applying''' || Restart user services after rebuild: <code>systemctl --user restart pipewire wireplumber</code>. Check for WirePlumber overrides: <code>wpctl status</code>. | |||
|} | |||
== See also == | |||
* [[PipeWire]] — Official NixOS PipeWire documentation | * [[PipeWire]] — Official NixOS PipeWire documentation | ||
* [[Audio production]] — General audio configuration and plugin paths | |||
* [https://github.com/musnix/musnix musnix] — Deep NixOS audio optimizations module | * [https://github.com/musnix/musnix musnix] — Deep NixOS audio optimizations module | ||
* [https://linuxmusicians.com/ LinuxMusicians Forum] — Community support | * [https://linuxmusicians.com/ LinuxMusicians Forum] — Community support | ||
Latest revision as of 17:26, 15 May 2026
Electric guitar interface setup
This guide covers setting up an electric guitar with NixOS to achieve professional, low-latency audio processing. It targets live playing with round-trip latency (RTL) under 6 ms using the modern PipeWire/JACK stack.
The digital signal chain for a guitar consists of:
- Instrument-level signal from Hi-Z pickups.
- Analog-to-Digital conversion via an external audio interface.
- Real-time processing on NixOS using a low-latency kernel and specialized software.
Installation
System configuration
Add the following to your /etc/nixos/configuration.nix. This configuration is optimized for high-performance CPUs like the AMD Ryzen 7 9700X (Zen 5 architecture).
{ pkgs, ... }:
{
# 1. Sound Server: PipeWire with JACK/PulseAudio support
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true; # Required for yabridge/wine VST bridging
pulse.enable = true;
jack.enable = true;
wireplumber.enable = true;
# Global low-latency defaults for native JACK clients
extraConfig.pipewire."92-low-latency" = {
"context.properties" = {
"default.clock.rate" = 48000; # Fixed rate avoids resampling latency
"default.clock.quantum" = 128; # ~5ms latency at 48kHz
"default.clock.min-quantum" = 64; # ~2.5ms latency at 48kHz
"default.clock.max-quantum" = 512;
};
};
# Crucial: Match low-latency for PulseAudio clients (browsers, Steam/Rocksmith)
extraConfig.pipewire-pulse."92-low-latency" = {
"pulse.properties" = {
"pulse.min.req" = "64/48000"; # Start with 64, not 32, for stability
"pulse.default.req" = "64/48000";
"pulse.max.req" = "128/48000";
};
};
};
# 2. Real-time Scheduling
# RTKit handles real-time privileges via D-Bus/Polkit.
security.rtkit.enable = true;
# Critical: Allow unlimited memlock for real-time audio buffers
security.pam.loginLimits = [
{ domain = "@audio"; item = "memlock"; type = "-"; value = "unlimited"; }
{ domain = "@audio"; item = "rtprio"; type = "-"; value = "95"; }
];
users.users.yourname.extraGroups = [ "audio" ]; # Replace 'yourname' with your username
# 3. Kernel and Performance Tweaks
boot.kernelPackages = pkgs.linuxPackages_zen;
boot.kernelParams = [
"threadirqs"
"preempt=full" # Optional: add if experiencing Xruns
"amd_pstate=passive" # Zen 4/5: passive + performance governor = stable freq
# For Intel or older AMD: remove amd_pstate or use "intel_pstate=active"
"usbcore.autosuspend=-1" # Prevent USB audio interface sleep
];
powerManagement.cpuFreqGovernor = "performance";
# GameMode can elevate priorities for real-time audio applications
programs.gamemode.enable = true;
# 4. Plugin Search Paths (Crucial for NixOS DAWs)
# Use sessionVariables for GUI apps launched from DE menu
environment.sessionVariables = let
makePluginPath = format:
(pkgs.lib.makeSearchPath format [
"$HOME/.nix-profile/lib"
"/run/current-system/sw/lib"
"/etc/profiles/per-user/$USER/lib"
]) + ":$HOME/.${format}";
in {
LV2_PATH = makePluginPath "lv2";
VST3_PATH = makePluginPath "vst3";
CLAP_PATH = makePluginPath "clap"; # Modern plugin format, supported by LSP/Chow
};
# 5. Essential Packages
nixpkgs.config.allowUnfree = true; # Required for REAPER, Tonelib, etc.
environment.systemPackages = with pkgs; [
# --- Utilities & Routing ---
qpwgraph # Visual patchbay for PipeWire
pavucontrol # Profile selection (Pro Audio mode)
pw-top # Real-time CPU usage per audio node
pw-cli # Modern alternative to pw-metadata
cpupower # CPU frequency scaling controls
alsa-scarlett-gui # Hardware mixer for Focusrite Scarlett (may require firmware)
# --- DAWs ---
ardour
reaper
# --- Plugin Hosts ---
carla # Modular plugin host / pedalboard, supports Windows VST via yabridge
# --- Standalone Guitar Processors ---
guitarix
# --- Plugins (LV2/CLAP) ---
neural-amp-modeler-lv2 # NAM: loads .nam files from https://tonehunt.org
lsp-plugins # Includes latency meter, compressors, IR loader
calf
dragonfly-reverb
gxplugins-lv2
kapitonov-plugins-pack # Profile-based amp models (KPP)
chow-centaur # Klon Centaur emulation
chow-phaser
# --- Practice & Learning ---
tuxguitar
hydrogen
# --- Windows VST Compatibility ---
yabridge
yabridgectl
wineWow64Packages.stable # Use wineWow64Packages, as wineWowPackages is deprecated
];
}
musnix.enable = true; is highly recommended. For Linux kernels 6.12 and newer, PREEMPT_RT is built-in.Configuration
Applying changes
sudo nixos-rebuild switch
# Apply PipeWire configuration changes (required after rebuild):
systemctl --user restart pipewire pipewire-pulse wireplumber
Pro audio profile
To achieve minimal latency, you must bypass standard software mixing:
- Open
pavucontrol. - Go to the Configuration tab.
- Set your interface profile to Pro Audio.
If the "Pro Audio" profile is missing, ensure pipewire-alsa is installed and restart PipeWire. This profile disables software mixing and enables hardware-exclusive mode, which is critical for achieving the lowest latency.
Dynamic buffer control
You can change latency without rebuilding the system. Note that these settings affect PipeWire clients only; ALSA-direct applications (like Ardour with ALSA backend) use their own buffer settings.
# Modern syntax (PipeWire 0.3.65+):
pw-cli set-param 0 clock.force-quantum 64/48000
# Verify current settings:
pw-cli dump settings | grep -E "quantum|rate"
Use pw-top in a separate terminal to monitor which applications are consuming the most DSP processing time. Look for the ERR column — values greater than zero indicate Xruns.
Hardware and connection
Standard PC line-ins are unsuitable for guitar. Use a dedicated interface with a Hi-Z (Instrument) input.
Verified compatible devices
| Device | Notes |
|---|---|
| Focusrite Scarlett Solo (4th Gen) | Plug-and-play. Use alsa-scarlett-gui for hardware monitoring. May require firmware update.
|
| MOTU M2 / M4 | Native ALSA kernel support for direct hardware mixer control via alsamixer. Exceptionally stable USB-C latency.
|
| Universal Audio Volt 276 | Reliable USB-C class-compliant interface. |
| Arturia MiniFuse 1 | Stable performance under PipeWire. |
| Audient iD4 (Gen 1) | Fully functional on NixOS. No special drivers needed. |
Hardware rules
- Connect the interface directly to the motherboard (rear panel USB 3.0/3.2). Avoid USB hubs — they add latency and can cause Xruns.
- Use a high-quality, shielded USB cable. Audio dropouts are frequently caused by cheap cables acting as antennas for electrical interference.
- Disable Bluetooth during live playing:
rfkill block bluetooth. The BT audio stack can generate interrupt storms causing Xruns.
Verification
lsusb # Confirm hardware connection
arecord -l # Verify ALSA sees the capture input
aplay -l # Verify ALSA sees the playback output
Software guide
This section explains the available software for guitar processing on NixOS, organized by purpose.
Digital audio workstations
| Software | Purpose | Notes |
|---|---|---|
| Ardour | Professional recording, mixing, editing | For absolute minimum RTL, use ALSA backend (bypasses PipeWire). Warning: ALSA locks device exclusively — no other app can produce sound. |
| REAPER | Commercial DAW, lightweight, scriptable | Uses PipeWire-JACK natively. Excellent Linux support. Unlimited trial. |
Amp simulators and neural modelers
| Software | Purpose | Notes |
|---|---|---|
| Neural Amp Modeler (NAM) | Loads .nam files — AI captures of real tube amps |
No built-in GUI in LV2 version. In Carla/Ardour: look for atom:Path parameter and point to your .nam file. Models: tonehunt.org
|
| Kapitonov Plugins Pack (KPP) | Profile-based traditional amp modeling | Excellent for classic rock/metal. Lower CPU than neural nets. |
| Guitarix | All-in-one virtual amp + pedals | Standalone or LV2. Good for quick practice. |
Effects plugins
| Plugin Pack | Key Features |
|---|---|
| LSP Plugins | Professional EQ, compression, gating. Includes LSP Latency Meter and LSP Impulse Response Loader (required for cabinet sims). |
| Dragonfly Reverb | High-quality algorithmic reverb (Hall, Room, Plate). |
| Chow Plugins | High-fidelity emulations of classic pedals using RNN/WDF. |
| Calf Studio Gear | Vintage-style effects with "warm" analog character. |
| GxPlugins.lv2 | Guitarix project pedals (distortion, overdrive, fuzz) as standalone LV2. |
Modular hosts
| Software | Purpose |
|---|---|
| Carla | Modular plugin host. Chain plugins visually: Input → Tuner → NAM → IR Loader → Reverb → Output. Hosts Windows VSTs via yabridge. |
| qpwgraph | Visual patchbay for PipeWire/JACK. Manually connect hardware inputs to software hosts (PipeWire does not auto-connect). |
Windows VST compatibility
| Tool | Purpose |
|---|---|
| yabridge + yabridgectl | Bridge for running Windows VST2/VST3 plugins on Linux via Wine. Essential for commercial plugins (Neural DSP, STL Tones, Amplitube). |
# After installing Windows plugins via Wine:
yabridgectl sync # Required to register plugins with Linux hosts
Tips and tricks
Rocksmith 2014
Rocksmith 2014 runs on NixOS via Proton and PipeWire.
- Install dependencies:
programs.steam.enable = true;
programs.gamemode.enable = true;
- Steam Launch Options (force low latency + real-time priority):
PIPEWIRE_LATENCY=128/48000 gamemoderun %command%
Start with 128/48000 (~5ms). If stable, try 64/48000 (~2.5ms). Values below 64 may cause crashes.
- Sample Rate: Rocksmith strictly requires 48000 Hz. Do not force 96000 Hz while playing.
- For interface users (no Real Tone Cable): Install the RS_ASIO mod to enable direct interface support.
Measuring latency
Always perform a physical loopback test.
- Connect a cable from your interface Output back into the Input (use a TS/TRS patch cable).
- Launch LSP Latency Meter:
# Option A: Via Carla (recommended for beginners)
carla # Add plugin "LSP Latency Meter Stereo", connect wires
# Option B: Via jalv (terminal)
jalv http://lsp-plug.in/plugins/lv2/latency_meter_stereo
- Play a sharp transient (string scratch) and read the Round-trip Latency (RTL) value.
Target values:
- < 5 ms: Professional / Imperceptible
- 5–10 ms: Acceptable for practice
- > 12 ms: Noticeable "lag", difficult to play in time
Quick start checklist
Before playing, verify:
# 1. CPU governor is performance
cpupower frequency-info | grep "current policy" # Should show "performance"
# 2. PipeWire buffer is set
pw-cli dump settings | grep quantum # Should show 64 or 128
# 3. No Xruns reported
pw-top | grep -E "ERR|XRUN" # Should show 0 or empty
# 4. Pro Audio profile active
pavucontrol # Configuration tab → your interface → Pro Audio
# 5. Plugin paths are set (for GUI apps)
echo $LV2_PATH # Should include /run/current-system/sw/lib/lv2
Troubleshooting
| Symptom | Cause & Solution |
|---|---|
| Xruns (audio glitches) | Ensure powerManagement.cpuFreqGovernor = "performance" is active. Check pw-top for high-CPU nodes. Close browsers/heavy apps during playing. Disable Wi-Fi. As a last resort, add processor.max_cstate=1 to boot.kernelParams (disables CPU sleep — high power draw).
|
| No sound | Check qpwgraph — PipeWire does not auto-connect hardware. Verify Pro Audio profile in pavucontrol. Run sudo lsof /dev/snd/* to find conflicting processes.
|
| DAW cannot find plugins | Ensure environment.sessionVariables block is applied. Log out/in after rebuild. Verify paths: echo $LV2_PATH.
|
| GPU causing audio glitches | Disable GPU power management. Prefer X11 over Wayland for lowest latency. |
| Bluetooth causing Xruns | Disable Bluetooth stack: rfkill block bluetooth during live sessions.
|
| PipeWire config not applying | Restart user services after rebuild: systemctl --user restart pipewire wireplumber. Check for WirePlumber overrides: wpctl status.
|
See also
- PipeWire — Official NixOS PipeWire documentation
- Audio production — General audio configuration and plugin paths
- musnix — Deep NixOS audio optimizations module
- LinuxMusicians Forum — Community support
- ToneHunt — Free NAM model library
- RS_ASIO — Rocksmith interface mod