Guitarix, Audacious and Jack

Since the end of the Windows 10 lifecycle is approaching, I have migrated most of my PCs to Ubuntu 24.04. This way, I can save them from the bin, as they are too old to run Windows 11.

One of the PCs I migrated is an Acer Aspire 3 laptop, which I have used for practicing guitar on the road with a Focusrite Scarlett Solo audio interface. My first idea for continuing to use it for that purpose was to install Wine and run my trusty Native Instruments Guitar Rig plugin along with Presonus Studio One 5. However, I soon discarded this idea because a quick Google search revealed that the setup was not straightforward. I was also concerned about latency—since Wine is an emulation layer, it could consume additional CPU resources and introduce latency.

To get the best latency possible, I looked around for native Linux options and found Guitarix and Audacious. Guitarix is an amp simulation software. It requires a bit more manual tweaking than Native Instruments products, but it is free and open source. Audacious is a simple media player that I use for backing tracks. Both can run through the JACK sound server, which provides low-latency audio.

In general, usage is not as comfortable as on Windows. Audacious, for example, does not have a playback speed setting, and Guitarix has very few presets. Setup also took about an hour because the JACK audio server works quite differently from the ASIO system I am used to on Windows. But after a while, I achieved quite satisfactory results. Playback speed can be adjusted with the Audacity WAV editor, which is also common on Windows, and the Guitarix presets sound pretty decent.

Fortunately, I was able to generate a start script with ChatGPT that makes setup a lot easier. In case you find it useful, feel free to copy it.

start-jam-session.sh (auto-detect version)

#!/bin/bash

set -e

# ========== CONFIGURATION ==========
# Set the names for ports/devices
SCARLETT_PLAYBACK_L="system:playback_1"
SCARLETT_PLAYBACK_R="system:playback_2"
GX_OUTPUT_L="guitarix:out_0"
GX_OUTPUT_R="guitarix:out_1"
AUDACIOUS_OUTPUT_L="PulseAudio JACK Sink:front-left"
AUDACIOUS_OUTPUT_R="PulseAudio JACK Sink:front-right"

# ========== FUNCTIONS ==========

check_pipewire_jack() {
    echo "Checking if PipeWire JACK is running..."
    if ! pw-jack jack_lsp >/dev/null 2>&1; then
        echo "PipeWire-JACK is not responding. Trying to start it..."
        systemctl --user start pipewire
        systemctl --user start pipewire-pulse
        systemctl --user start pipewire-jack
        sleep 2
        if ! pw-jack jack_lsp >/dev/null 2>&1; then
            echo "❌ Failed to start PipeWire JACK backend. Exiting."
            exit 1
        fi
    fi
    echo "✅ PipeWire JACK is running."
}

wait_for_port() {
    local port="$1"
    echo -n "Waiting for JACK port '$port'"
    for i in {1..10}; do
        if jack_lsp | grep -q "$port"; then
            echo " – found."
            return
        fi
        echo -n "."
        sleep 1
    done
    echo " ❌ Port '$port' not found."
    exit 1
}

connect_ports() {
    echo "Connecting Guitarix output to Scarlett..."
    jack_connect "$GX_OUTPUT_L" "$SCARLETT_PLAYBACK_L" || true
    jack_connect "$GX_OUTPUT_R" "$SCARLETT_PLAYBACK_R" || true

    echo "Connecting Audacious (PulseAudio JACK Sink) to Scarlett..."
    jack_connect "$AUDACIOUS_OUTPUT_L" "$SCARLETT_PLAYBACK_L" || true
    jack_connect "$AUDACIOUS_OUTPUT_R" "$SCARLETT_PLAYBACK_R" || true
}

# ========== MAIN SCRIPT ==========

check_pipewire_jack

echo "Launching Guitarix..."
guitarix &

echo "Launching Audacious..."
audacious &

echo "Waiting for apps to register with JACK..."
wait_for_port "$GX_OUTPUT_L"
wait_for_port "$AUDACIOUS_OUTPUT_L"

connect_ports

echo "🎶 Ready to jam! Your guitar goes through Guitarix, and Audacious plays clean through Scarlett."

How to use

  1. Save the script:

    nano start-jam-session.sh
    
  2. Paste the code above.

  3. Make it executable:

    chmod +x start-jam-session.sh
    
  4. Run it:

    ./start-jam-session.sh
    
  5. Run qjackctl

     pw-jack qjackctl
    
  6. Configure Inputs and Outputs on Guitarix

[AI used only for spellchecking when writing this article]