Documentation — Free Edition
Home Free vs Pro Support Download
Getting Started Chapter 1

What is AudioLink?

AudioLink is a lossless audio streaming system designed to replace hardware Studio-to-Transmitter Links (STL). It streams raw uncompressed PCM audio from a studio computer to a remote destination — a transmitter site, a remote studio, or anywhere else — over any internet connection.

AudioLink is a streaming bridge, not a streaming server. It carries audio from point A to point B in real time. It does not serve audio to listeners. For listener broadcasting you need an Icecast or SHOUTcast server.

What AudioLink does

  • Capture audio from any Windows audio input device or virtual cable
  • Stream raw PCM Float32 or Int16 audio over a secure WebSocket connection
  • Relay audio from TX (studio) to RX (destination) with under 20ms latency on LAN
  • Monitor levels with real-time VU meters before going live
  • Auto-reconnect on network drops — no manual intervention
  • Test network quality with a built-in speed and packet loss test

How it works

AudioLink has three components that work together:

ComponentWhere it runsWhat it does
TX (Transmitter)Studio computer — browserCaptures audio and streams it to the relay
Relay serverYour VPS — Node.jsRoutes audio from TX to all connected RX clients
RX (Receiver)Destination computer — browserReceives and plays the audio stream

Free vs Pro

AudioLink Free Edition is self-hosted — you run the relay server on your own VPS. The Pro edition (coming soon) provides a hosted relay managed by SoundCast, adaptive bitrate streaming, and a station dashboard.

Getting Started Chapter 2

Requirements

Before installing AudioLink, make sure you have the following in place.

Server (VPS)

  • Node.js 20 LTS — download from nodejs.org
  • A VPS running Ubuntu 20.04, 22.04 or 24.04 (any Linux distro works)
  • Port 8765 open in your firewall (TCP)
  • A dedicated IP address — shared hosting will not work

TX Computer (Studio)

  • Windows, macOS or Linux
  • Chrome or Edge browser (latest version)
  • An audio input device — microphone, USB audio interface, or virtual cable
  • Stable internet connection with at least 3 Mbps upload (16-bit mode) or 6 Mbps upload (32-bit Float mode)

RX Computer (Destination)

  • Windows, macOS or Linux
  • Chrome or Edge browser (latest version)
  • A audio output device (speakers or headphones)
  • Stable internet connection with at least 3 Mbps download
Note: If TX and RX are on the same internet connection, bandwidth usage doubles. At 32-bit Float mode (6.1 Mbps each way) you need at least 12 Mbps on the same connection. Use 16-bit Int mode (~3 Mbps each way) to reduce this.
Getting Started Chapter 3

Installation

Installing AudioLink on your VPS takes about 10 minutes. Everything runs as a single Node.js process — no web server, no database, no complex setup.

Step 1 — Connect to your VPS

ssh root@YOUR.VPS.IP.ADDRESS

Step 2 — Install Node.js

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs

Verify it installed correctly:

node --version
npm --version

Step 3 — Create the AudioLink folder

mkdir -p /opt/audiolink
cd /opt/audiolink

Step 4 — Upload the files

Upload server.js, tx.html, rx.html and config.json to /opt/audiolink/ using WinSCP or SCP.

Step 5 — Install the WebSocket dependency

cd /opt/audiolink
npm install ws

Step 6 — Open the firewall port

# If using UFW:
sudo ufw allow 8765/tcp

# If using iptables:
sudo iptables -A INPUT -p tcp --dport 8765 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4

Step 7 — Start the server

node server.js

You should see the server start and print the TX and RX URLs. Open http://YOUR.VPS.IP:8765/tx in your browser to confirm it works.

For 24/7 operation: See Chapter 9 — Running 24/7 with PM2 to keep AudioLink running after you close the terminal.
Getting Started Chapter 4

config.json

All settings for the AudioLink server are in a single file — config.json — located in the same folder as server.js. Edit this file before starting the server.

{
  "username": "admin",
  "password": "changeme123",
  "port": 8765,
  "https_port": 8766,
  "station_name": "My Radio Station",
  "ssl_cert": "",
  "ssl_key": ""
}

Settings reference

SettingDescription
usernameLogin username for the TX and RX pages
passwordLogin password — change this from the default
portHTTP port — default 8765. Change if this port is already in use.
https_portHTTPS port when SSL is enabled — default 8766
station_nameYour station name — shown on the login page
ssl_certFull path to your SSL certificate file (leave blank for HTTP only)
ssl_keyFull path to your SSL private key file (leave blank for HTTP only)
Important: Change the default password before exposing the server to the internet. Anyone who can access your login page with the default credentials can control your broadcast.

After editing config.json, restart the server for changes to take effect:

pm2 restart audiolink
Using AudioLink Chapter 5

TX — Transmitter

The TX page is where you capture and transmit audio. Open it on the studio computer at:

http://YOUR.VPS.IP:8765/tx

Connecting to the server

Enter the WebSocket URL in the Server section:

ws://YOUR.VPS.IP:8765

Enter your station label and click CONNECT. The status shows CONNECTED when the server is reached.

Selecting your audio source

AudioLink automatically scans your audio devices and selects the best one. Devices are scored and ranked — professional audio interfaces and virtual cables are preferred over built-in microphones. The device quality badge shows what was detected.

If the wrong device is selected, choose the correct one from the Source Device dropdown and click ↻ SCAN to refresh the list.

Audio settings

SettingRecommendedNotes
Sample Rate44100 HzMatch this to your browser and audio device native rate to avoid slow-motion audio
ChannelsStereoUse Mono if your source is mono to halve bandwidth
Chunk Samples1024Larger chunks are more resilient to network jitter
Bit Depth32-bit FloatLossless — switch to 16-bit Int to halve bandwidth with CD quality

Monitoring before going live

Click MONITOR AUDIO to open your audio input and start the meters without transmitting. Use this to check levels before the broadcast:

  • Signal — confirms audio is reaching AudioLink
  • No Clip — warns if you are hitting 0 dBFS
  • Stereo — confirms both channels are present and balanced
  • Level OK — green when signal is in the broadcast sweet spot (−18 to −6 dBFS)

Adjust the Input Gain slider until all four checks show green, then click GO LIVE.

Going live

Click GO LIVE. The ON AIR badge appears with a live elapsed timer. The same audio pipeline that was already running for monitoring starts transmitting immediately — no gap, no click.

Click END BROADCAST to stop transmitting. AudioLink returns to monitoring mode, keeping the audio pipeline open so you can check levels again before your next segment.

Using AudioLink Chapter 6

RX — Receiver

The RX page receives and plays the audio stream. Open it on the destination computer at:

http://YOUR.VPS.IP:8765/rx

Connecting

Enter the same WebSocket URL as TX:

ws://YOUR.VPS.IP:8765

Click CONNECT. When TX is broadcasting, a banner appears showing the TX station name and audio configuration.

Buffer size

Choose the buffer size based on your network stability:

BufferLatencyUse when
20 msUltra lowSame building, wired LAN only
40 msLowLocal network, stable connection
80 msStableInternet connection, good quality
150 msSafeInternet connection, variable quality
300 msBroadcastLong distance, unstable or congested links

For a 24/7 broadcast over the internet, 150 ms or 300 ms is recommended. The extra buffer absorbs network jitter and prevents dropouts.

Starting playback

Click START PLAYBACK. The RX engine pre-buffers audio to the target level before starting output — you will see BUFFERING 0%…100% then PLAYING. This pre-buffer phase ensures smooth, glitch-free playback from the first second.

Monitoring playback health

  • Buffer Health — should stay above 50% (green). If it drops to red frequently, increase the buffer size.
  • Dropouts — occasional dropouts are normal. Many dropouts indicate a network issue — run the speed test.
  • Buf Lat — current audio in buffer in milliseconds. Should be close to your chosen buffer size.

Audio sounds slow or distorted

This is caused by a sample rate mismatch between the TX and the RX browser. Fix: on the TX page, change the Sample Rate to 44100 Hz. This matches most browsers' native audio rate and eliminates the mismatch entirely.

Using AudioLink Chapter 7

VB-Audio Virtual Cable

If your studio computer runs automation software like RadioBOSS, you can route its audio output directly into AudioLink TX using a free virtual audio cable — no physical cable or audio interface required.

What is a virtual audio cable?

A virtual audio cable creates two virtual devices in Windows — a virtual speaker (CABLE Input) and a virtual microphone (CABLE Output). Audio sent to the virtual speaker reappears on the virtual microphone. This lets you route audio between applications internally.

Installation

  1. Download VB-Audio Virtual Cable (free) from vb-audio.com/Cable
  2. Run the installer as Administrator
  3. Restart Windows when prompted

Setting up RadioBOSS

  1. Open RadioBOSS → Settings → Options → Sound Devices
  2. Set Output Device to CABLE Input (VB-Audio Virtual Cable)
  3. Click OK

Setting up AudioLink TX

  1. On the TX page, the Source Device dropdown automatically detects and prefers VB-Audio Cable Output
  2. Select CABLE Output (VB-Audio Virtual Cable) if it is not already selected
  3. The device quality badge shows Virtual cable — capture system audio
  4. Click MONITOR AUDIO — meters should show RadioBOSS audio
Note: RadioBOSS continues playing through your normal speakers or monitors at the same time. VB-Audio sends a copy of the audio to the virtual cable — it does not mute your existing output.

Other virtual cable options

  • VB-Audio (Windows) — free, most common, recommended
  • BlackHole (macOS) — free, works the same way
  • Stereo Mix — built into some Windows audio drivers, captures all system audio
Using AudioLink Chapter 8

Network Speed Test

AudioLink includes a built-in 3-phase network test that measures whether your connection can reliably sustain a live broadcast. Run it before going live to diagnose potential issues.

Running the test

Click RUN TEST on either the TX or RX page. You must be connected to the server first. The test takes about 10 seconds and runs three phases automatically.

What it measures

MetricGoodWarningBad
LatencyUnder 5ms5–20msOver 20ms
JitterUnder 1ms1–5msOver 5ms
ThroughputOver 10 Mbps1–10 MbpsUnder 1 Mbps
Packet Loss0%Under 2%Over 2%

Interpreting results

  • High jitter — packets arrive unevenly. Increase the RX buffer size to compensate.
  • Low throughput — your connection cannot sustain the full bitrate. Switch to 16-bit Int mode on TX to reduce bandwidth.
  • Packet loss above 0% — some packets are being dropped in transit. This will cause audio dropouts. Try a different network or contact your ISP.
Advanced Chapter 9

Running 24/7 with PM2

PM2 is a process manager for Node.js. It keeps AudioLink running after you close SSH, restarts it automatically if it crashes, and starts it again after a server reboot.

Installing PM2

sudo npm install -g pm2

Starting AudioLink with PM2

cd /opt/audiolink
pm2 start server.js --name audiolink

Auto-start on server reboot

# Generate and run the startup command
pm2 startup
# Copy and run the command it prints, then:
pm2 save
Important: pm2 startup prints a command starting with sudo env PATH=... — copy that entire line and run it. It is different for every server.

Daily PM2 commands

pm2 status              # Check if AudioLink is running
pm2 logs audiolink      # View live logs
pm2 restart audiolink   # Restart the server
pm2 stop audiolink      # Stop the server
pm2 start audiolink     # Start again

Keeping firewall rules after reboot

sudo apt install iptables-persistent -y
sudo netfilter-persistent save

This saves your iptables rules so port 8765 stays open after every reboot.

Advanced Chapter 10

SSL / HTTPS Setup

Running AudioLink over HTTPS and WSS is required when accessing the TX or RX pages from a domain with an SSL certificate. It also permanently resolves the browser microphone permission issue.

Getting an SSL certificate

If you have a domain pointing to your VPS, use Certbot to get a free Let's Encrypt certificate:

sudo apt install certbot -y
certbot certonly --standalone -d yourdomain.com

Configuring SSL in config.json

{
  "ssl_cert": "/etc/letsencrypt/live/yourdomain.com/fullchain.pem",
  "ssl_key":  "/etc/letsencrypt/live/yourdomain.com/privkey.pem"
}

Restart AudioLink after saving. The server now serves HTTPS on port 8766 and WSS for WebSocket connections.

Accessing the pages over HTTPS

https://yourdomain.com:8766/tx    ← TX page
https://yourdomain.com:8766/rx    ← RX page
wss://yourdomain.com:8766         ← WebSocket URL in TX and RX

Behind Nginx (optional)

If you run Nginx on the same server, you can proxy AudioLink through a subdomain. Create a new Nginx server block — do not modify your existing site's config:

server {
    listen 443 ssl;
    server_name audio.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/audio.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/audio.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8765;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 3600s;
    }
}
Advanced Chapter 11

Chrome Mic Permission

Chrome requires microphone permission for AudioLink TX to capture audio. This permission is granted once and remembered permanently — but only when the page is served over a trusted origin.

When Chrome asks for permission

The first time you click MONITOR AUDIO, Chrome shows a permission popup. Click Allow while visiting the site. Chrome will not ask again for this origin.

If Chrome blocks the microphone on HTTP

Chrome only remembers microphone permissions for HTTPS origins and localhost. If you access TX over plain HTTP with an IP address (e.g. http://185.67.45.7:8765), Chrome may ask every time or block it entirely.

Fix — Chrome flag (temporary):

  1. Open Chrome and go to: chrome://flags/#unsafely-treat-insecure-origin-as-secure
  2. In the text box, type your TX URL: http://YOUR.VPS.IP:8765
  3. Set the dropdown to Enabled
  4. Click Relaunch

Permanent fix: Set up SSL as described in Chapter 10. Once the TX page is served over HTTPS, Chrome remembers the permission permanently with no further steps.

Help Chapter 12

Troubleshooting

Audio sounds slow or in slow motion

Cause: Sample rate mismatch. TX is sending at 48000 Hz but the RX browser's native rate is 44100 Hz.

Fix: On the TX page, change Sample Rate to 44100 Hz. Stop and restart the broadcast. The audio will play at the correct speed.

To check your audio device's native rate on Windows: right-click the speaker icon → Sound Settings → Recording → your device → Properties → Advanced.

Audio cutting out / many dropouts

  • Increase the Buffer Size on RX to 150ms or 300ms
  • Run the Network Speed Test — check for packet loss above 0% or jitter above 5ms
  • Switch to 16-bit Int on TX to halve the bandwidth requirement
  • If TX and RX are on the same internet connection, the combined bandwidth (upload + download) may exceed the connection's stable throughput

Unable to load a worklet's module

Cause: Chrome blocks AudioWorklet from certain URL types.

Fix: Access the TX page via http:// (served from the Node.js server), not by opening the HTML file directly from your filesystem. The server URL is http://YOUR.VPS.IP:8765/tx.

TX connects but RX shows no TX online

  • Confirm both TX and RX are connected to the same WebSocket URL
  • Check pm2 status — confirm audiolink is online
  • Check pm2 logs audiolink for error messages

Page not loading at all

  • Confirm port 8765 is open in your firewall
  • Check if your VPS provider has a separate cloud-level firewall (DigitalOcean, Hetzner, AWS security groups)
  • Run pm2 status to confirm the server is running

Microphone permission denied

See Chapter 11 — Chrome Mic Permission for the complete fix.

Still stuck? Contact support@soundcast.ca — include a description of your setup, the browser console errors (F12 → Console), and what you see on screen.

Help Chapter 13

Free vs Pro Edition

A complete summary of what is included in each edition.

FeatureFreePro
Lossless PCM audio
Auto-reconnect
Pre-air level monitoring
Network speed test
Login protection
Windows desktop app (.exe)
Self-hosted server
Hosted relay — managed by SoundCast
Adaptive bitrate (PCM → Int16 → Opus)
Multiple stations per account
Station dashboard
SSL included — zero setup
Priority support
PriceFreeFrom $29 / month

The Pro edition is coming soon. Join the waitlist to be notified at launch.