A cross-platform desktop application that merges CW (Morse Code) sidetone with your microphone audio for video conferencing. Perfect for amateur radio operators who want to send Morse code during Zoom, Teams, Discord, or other video calls.
Vail Zoomer bridges three audio streams:
- Your microphone - so you can talk normally
- CW sidetone - the tones generated when you key Morse code
- Virtual audio output - sends the mixed audio to your video conferencing app
This allows you to simultaneously speak and send Morse code in video calls, with real-time character decoding displayed on screen.
- A MIDI-compatible CW keyer (like the Vail Adapter)
- A virtual audio cable/device (see installation instructions below)
- A microphone
Download the latest release for your operating system from the Releases page:
- Windows:
Vail.Zoomer_x.x.x_x64-setup.exeor portable.msi - macOS (Apple Silicon):
Vail.Zoomer_x.x.x_aarch64.dmg - macOS (Intel):
Vail.Zoomer_x.x.x_x64.dmg - Linux:
vail-zoomer_x.x.x_amd64.AppImageor.deb
Security Note: If you see a security warning when opening the app, see the First Launch Security Warnings section below.
A virtual audio device creates a "loopback" that lets Vail Zoomer send mixed audio to your video conferencing app. This is required for the app to work.
VB-Cable is a free virtual audio driver for Windows, bundled with the Vail Zoomer installer.
The Vail Zoomer installer will prompt you to install VB-Cable. When prompted:
- Click "Yes" to open the VB-Cable installer folder
- Right-click on
VBCABLE_Setup_x64.exeand select "Run as administrator" - Click "Install Driver" when the window appears
- Wait for the "Installation Complete" message, then click OK
If you skipped VB-Cable during installation, you can install it later:
- Navigate to
C:\Program Files\Vail Zoomer\resources\VBCABLE\ - Right-click on
VBCABLE_Setup_x64.exeand select "Run as administrator" - Click "Install Driver"
Or download directly from vb-audio.com/Cable
After your computer restarts:
- Right-click the speaker icon in your taskbar (bottom right)
- Click "Sound settings"
- Scroll down and click "More sound settings"
- In the Playback tab, look for "CABLE Input (VB-Audio Virtual Cable)"
- In the Recording tab, look for "CABLE Output (VB-Audio Virtual Cable)"
If you see both devices, you're ready!
- VB-Cable not appearing after restart?
- Make sure you ran the installer as Administrator
- Check Windows Security → Virus & threat protection → Protection history - Windows may have blocked the driver
- Try running the installer again as Administrator
- Windows 11 users: You may need to temporarily disable Core Isolation / Memory Integrity in Windows Security during installation, then re-enable it after
BlackHole is a free, open-source virtual audio driver for macOS. Works on both Intel and Apple Silicon Macs.
Open Terminal (press Cmd+Space, type "Terminal", press Enter) and run:
brew install blackhole-2chDon't have Homebrew? Use Option B below instead.
- Go to existential.audio/blackhole
- Click "Download BlackHole 2ch" (you may need to enter your email)
- Open the downloaded
.pkgfile - Follow the installer prompts - click Continue → Install
- Enter your Mac password when asked
macOS blocks audio drivers by default. You must allow it:
- Open System Settings (click Apple menu → System Settings)
- Click "Privacy & Security" in the sidebar
- Scroll down - you should see a message about BlackHole being blocked
- Click "Allow" next to the message
- Enter your password if prompted
- Restart your Mac for the changes to take effect
After restarting:
- Open System Settings → Sound
- Click the "Output" tab
- Look for "BlackHole 2ch" in the list
By default, if you send to BlackHole, you won't hear the sidetone locally. To hear it AND send to Zoom:
- Open Audio MIDI Setup (search in Spotlight or find in /Applications/Utilities/)
- Click the + button in the bottom left
- Select "Create Multi-Output Device"
- Check both your headphones/speakers AND BlackHole 2ch
- Optionally rename it to "Vail Zoomer Output"
- In Vail Zoomer, select this new device as your output
- "System Extension Blocked": Go to System Settings → Privacy & Security → scroll down and click "Allow"
- Still not working? You may need to restart after allowing the system extension
- Apple Silicon (M1/M2/M3/M4): BlackHole works natively, no Rosetta needed
Linux uses software-based virtual audio devices through PulseAudio or PipeWire. Vail Zoomer can set this up automatically for you.
- Launch Vail Zoomer
- If no virtual audio device is detected, you'll see a blue banner at the top: "Virtual audio device not found"
- Click "Setup Virtual Audio"
- If prompted, enter your admin password (this is only needed if
pactlisn't installed) - The app will automatically detect your audio system (PipeWire or PulseAudio) and create the virtual device
- Once complete, "Vail Zoomer" will appear in your output device list
You can also trigger this setup anytime from the Audio Routing section at the bottom (look for "Linux Virtual Audio Setup").
The automatic setup creates:
- VailZoomer - The output device you'll select in Vail Zoomer
- VailZoomerMic - The microphone input that Zoom will see
The devices persist across reboots.
If the automatic setup doesn't work, you can set up the virtual device manually.
Step 1: Check which audio system you have
Open a terminal (press Ctrl+Alt+T) and run:
pactl info | grep "Server Name"- If it says "PipeWire" → follow PipeWire instructions below
- If it says "PulseAudio" → follow PulseAudio instructions below
For PipeWire (Ubuntu 22.04+, Fedora 34+, most modern distros):
mkdir -p ~/.config/pipewire/pipewire.conf.d
nano ~/.config/pipewire/pipewire.conf.d/vail-zoomer.confPaste this block, then save (Ctrl+O, Enter, Ctrl+X):
context.modules = [
{ name = libpipewire-module-loopback
args = {
node.description = "Vail Zoomer"
capture.props = {
node.name = "VailZoomer"
media.class = "Audio/Sink"
audio.position = [ FL FR ]
}
playback.props = {
node.name = "VailZoomerMic"
media.class = "Audio/Source"
audio.position = [ FL FR ]
}
}
}
]
Restart PipeWire:
systemctl --user restart pipewire pipewire-pulseFor PulseAudio (older systems):
mkdir -p ~/.config/pulse
echo 'load-module module-null-sink sink_name=VailZoomer sink_properties=device.description="Vail_Zoomer_Output"' >> ~/.config/pulse/default.pa
echo 'load-module module-remap-source master=VailZoomer.monitor source_name=VailZoomerMic source_properties=device.description="Vail_Zoomer_Microphone"' >> ~/.config/pulse/default.pa
pulseaudio -k && pulseaudio --startVerify Installation:
pactl list sources short | grep -i vailIf you see "VailZoomerMic", you're all set!
- Automatic setup fails: Try the manual setup instructions above
- No virtual device after setup: Log out and back in, or restart your computer
- AppImage won't run: Make it executable first:
chmod +x vail-zoomer*.AppImage - MIDI not detected: Install ALSA MIDI support:
sudo apt install libasound2-plugins - Zoom doesn't show the virtual microphone: Edit
~/.config/zoomus.confand setsystem.audio.type=default(instead ofalsa), then restart Zoom
- Connect your MIDI keyer before launching the app
- Launch Vail Zoomer
- Configure audio devices (see below)
- Configure your video app (see below)
- Test with the Dit/Dah buttons
- Your MIDI device should appear automatically - click on it to connect
- The status indicator will turn green when connected
- Keyer Type: Match your physical keyer (Straight Key, Iambic A/B, etc.)
- WPM: Set your preferred words-per-minute (5-50) - only for iambic keyers
- Sidetone Frequency: Adjust tone pitch (400-1000 Hz)
- Use Test Dit/Dah buttons to verify audio is working
- Microphone Input: Select your microphone
- Output to Zoom: Select the virtual audio device:
- Windows: "CABLE Input (VB-Audio Virtual Cable)"
- macOS: "BlackHole 2ch"
- Linux: "VailZoomer" or "Vail Zoomer Output"
- Zoom Only: Sidetone goes to Zoom only (you won't hear it locally) - use this if your Vail adapter has its own sidetone speaker
- Local Only: Sidetone goes to your speakers only (Zoom won't hear it)
- Both: Sidetone goes to both Zoom and your local speakers
- Open Zoom and click the gear icon (Settings) in the top right
- Click "Audio" in the left sidebar
- Under "Microphone", select:
- Windows: "CABLE Output (VB-Audio Virtual Cable)"
- macOS: "BlackHole 2ch"
- Linux: "Vail Zoomer Microphone" (or "VailZoomerMic")
- Uncheck "Automatically adjust microphone volume"
- Click "Test Mic" to verify it's working
- Click your profile picture in the top right
- Click "Settings"
- Click "Devices" in the left sidebar
- Under "Microphone", select the virtual audio device:
- Windows: "CABLE Output"
- macOS: "BlackHole 2ch"
- Linux: "Vail Zoomer Microphone" (or "VailZoomerMic")
- Click "Make a test call" to verify
- Click the gear icon (User Settings) next to your username
- Click "Voice & Video" in the left sidebar
- Under "Input Device", select the virtual audio device:
- Windows: "CABLE Output"
- macOS: "BlackHole 2ch"
- Linux: "Vail Zoomer Microphone" (or "VailZoomerMic")
- Turn OFF "Automatically determine input sensitivity"
- Use the "Let's Check" button under Mic Test to verify
- Join or start a meeting, then click the three dots (⋮) at the bottom
- Click "Settings"
- Click "Audio"
- Under "Microphone", select the virtual audio device:
- Windows: "CABLE Output"
- macOS: "BlackHole 2ch"
- Linux: "Vail Zoomer Microphone" (or "VailZoomerMic")
- Speak or use Test Dit/Dah to see the input level indicator move
- Set appropriate volumes: Keep sidetone at a comfortable level relative to your voice
- Test before meetings: Do a test call or use Zoom's audio test feature
- Mind your WPM: The decoder works best when you key consistently
- Use local monitoring: Helps you hear what you're sending without latency
Operating systems display security warnings for apps that aren't code-signed by registered developers. This is normal for open-source software and doesn't mean the app is unsafe.
When you see the blue SmartScreen warning:
- Click "More info"
- Click the "Run anyway" button that appears
- The app will now open normally
You only need to do this once. Windows will remember your choice.
Method 1: System Settings (try this first)
- Try to open the app (it will be blocked)
- Open System Settings → Privacy & Security
- Scroll down - you'll see a message about Vail Zoomer being blocked
- Click "Open Anyway"
- Click "Open" in the confirmation dialog
Method 2: Terminal (if Method 1 doesn't work)
xattr -cr /Applications/Vail\ Zoomer.appThen try opening the app again.
Linux requires you to make the file executable first. Open a terminal in your Downloads folder and run:
chmod +x vail-zoomer*.AppImage
./vail-zoomer*.AppImage- Verify the virtual audio device is installed and appears in system audio settings
- Check that Vail Zoomer's output is set to the virtual device
- Verify the video app's microphone is set to the virtual device's output/monitor
- Check volume levels in Vail Zoomer aren't at 0%
- Use the Test Dit/Dah buttons to confirm audio is flowing
- Ensure the keyer is connected before launching Vail Zoomer
- Try unplugging and reconnecting the USB cable
- Check if other apps are using the MIDI device (close them first)
- On Windows, check Device Manager for the device
- On macOS, check Audio MIDI Setup utility
- On Linux, run
aconnect -lto list MIDI devices
- Lower the sidetone and microphone volumes
- Close other audio-intensive applications
- Use wired headphones instead of Bluetooth
- Check CPU usage - audio processing needs consistent resources
- Use wired headphones instead of Bluetooth
- Reduce system audio buffer sizes
- Close unnecessary applications
- On Linux, consider using JACK for lower latency
- Node.js 18+
- Rust 1.70+
- Platform-specific requirements:
- Windows: Visual Studio Build Tools with C++ workload
- macOS: Xcode Command Line Tools (
xcode-select --install) - Linux:
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev libasound2-dev
# Clone the repository
git clone https://github.com/Vail-CW/vail-zoomer.git
cd vail-zoomer
# Install dependencies
npm install
# Run in development mode
npm run tauri dev
# Build for production
npm run tauri buildBuild outputs will be in src-tauri/target/release/bundle/.
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please open an issue or pull request.
- Tauri - Cross-platform app framework
- CPAL - Cross-platform audio library
- VB-Audio - VB-Cable for Windows (donationware - consider supporting them!)
- BlackHole - Virtual audio for macOS
The Windows installer includes VB-Cable by VB-Audio Software. VB-Cable is a donationware virtual audio driver that enables Vail Zoomer to route audio to video conferencing applications.
- Website: vb-audio.com/Cable
- License: Donationware - free to use, donations welcome
- Support VB-Audio: If you find VB-Cable useful, please consider donating to VB-Audio to support their continued development.