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:
| Component | Where it runs | What it does |
|---|---|---|
| TX (Transmitter) | Studio computer — browser | Captures audio and streams it to the relay |
| Relay server | Your VPS — Node.js | Routes audio from TX to all connected RX clients |
| RX (Receiver) | Destination computer — browser | Receives 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.
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
8765open 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
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.
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
| Setting | Description |
|---|---|
username | Login username for the TX and RX pages |
password | Login password — change this from the default |
port | HTTP port — default 8765. Change if this port is already in use. |
https_port | HTTPS port when SSL is enabled — default 8766 |
station_name | Your station name — shown on the login page |
ssl_cert | Full path to your SSL certificate file (leave blank for HTTP only) |
ssl_key | Full path to your SSL private key file (leave blank for HTTP only) |
After editing config.json, restart the server for changes to take effect:
pm2 restart audiolink
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
| Setting | Recommended | Notes |
|---|---|---|
| Sample Rate | 44100 Hz | Match this to your browser and audio device native rate to avoid slow-motion audio |
| Channels | Stereo | Use Mono if your source is mono to halve bandwidth |
| Chunk Samples | 1024 | Larger chunks are more resilient to network jitter |
| Bit Depth | 32-bit Float | Lossless — 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.
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:
| Buffer | Latency | Use when |
|---|---|---|
| 20 ms | Ultra low | Same building, wired LAN only |
| 40 ms | Low | Local network, stable connection |
| 80 ms | Stable | Internet connection, good quality |
| 150 ms | Safe | Internet connection, variable quality |
| 300 ms | Broadcast | Long 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.
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
- Download VB-Audio Virtual Cable (free) from vb-audio.com/Cable
- Run the installer as Administrator
- Restart Windows when prompted
Setting up RadioBOSS
- Open RadioBOSS → Settings → Options → Sound Devices
- Set Output Device to CABLE Input (VB-Audio Virtual Cable)
- Click OK
Setting up AudioLink TX
- On the TX page, the Source Device dropdown automatically detects and prefers VB-Audio Cable Output
- Select CABLE Output (VB-Audio Virtual Cable) if it is not already selected
- The device quality badge shows Virtual cable — capture system audio
- Click MONITOR AUDIO — meters should show RadioBOSS audio
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
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
| Metric | Good | Warning | Bad |
|---|---|---|---|
| Latency | Under 5ms | 5–20ms | Over 20ms |
| Jitter | Under 1ms | 1–5ms | Over 5ms |
| Throughput | Over 10 Mbps | 1–10 Mbps | Under 1 Mbps |
| Packet Loss | 0% | 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.
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
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.
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;
}
}
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):
- Open Chrome and go to:
chrome://flags/#unsafely-treat-insecure-origin-as-secure - In the text box, type your TX URL:
http://YOUR.VPS.IP:8765 - Set the dropdown to Enabled
- 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.
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 audiolinkfor 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 statusto 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.
Free vs Pro Edition
A complete summary of what is included in each edition.
| Feature | Free | Pro |
|---|---|---|
| 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 | — | ✓ |
| Price | Free | From $29 / month |
The Pro edition is coming soon. Join the waitlist to be notified at launch.