Audio and radio effects
All radio transmissions in radarcontrol.io can be voiced with TTS and PTT click sounds - the same click-on/squelch-off you'd hear on a real frequency.
Text-to-speech
The simulator uses your browser's built-in text-to-speech (TTS) to voice all radio communications:
- ATC transmissions - Your instructions to pilots
- Pilot readbacks - Pilots confirming your instructions
- Pilot requests - Weather deviations, altitude changes
- Emergency declarations - MAYDAY and PAN PAN calls
Enabling TTS
- Click the speaker icon in the top toolbar
- Or press T to toggle TTS on/off
When enabled, you'll hear:
- Your ATC instructions spoken aloud
- Pilots reading back clearances
- Check-ins from new aircraft
- Emergency declarations
High speed mode
TTS is automatically paused when simulation speed reaches 4x or higher. At high speeds, messages queue faster than they can be spoken, making real-time TTS impractical.
When TTS is paused due to speed:
- The speaker icon shows ⏸️ instead of 🔊
- Tooltip displays "Voice paused (speed ≥4x)"
- Messages still appear in the instruction history (visual log)
- TTS resumes automatically when you slow down below 4x
TIP
Message display durations also scale with simulation speed. At 2x, toasts disappear twice as fast. At higher speeds, the minimum display time ensures you can still read important messages.
Radio effects
For maximum immersion, enable radio effects to add realistic PTT (push-to-talk) sounds:
What you'll hear
| Sound | When it plays |
|---|---|
| Click on | Start of each transmission (PTT press) |
| Squelch | End of each transmission (PTT release) |
These sounds are generated synthetically using Web Audio API - no external files needed.
Enabling radio effects
Radio effects can be enabled via the TTS settings or programmatically:
// Enable radio effects
ttsService.setSettings({ radioEffects: true });
// Check current setting
const settings = ttsService.getSettings();
console.log(settings.radioEffects); // true or falseVoice variety
The simulator automatically assigns different voices to different pilots, creating a realistic mix of:
- Male and female voices
- Different accents (where available)
- Slight pitch variations
The ATC voice remains consistent throughout your session.
Selecting ATC voice
You can choose your preferred ATC voice:
// Get available voices
const voices = ttsService.getEnglishVoices();
// Set ATC voice by name
ttsService.setSettings({ atcVoiceName: 'Google UK English Male' });Settings reference
| Setting | Type | Default | Description |
|---|---|---|---|
enabled | boolean | false | Master TTS on/off |
volume | number | 0.8 | Volume level (0-1) |
speechRate | number | 1.1 | Speech speed (0.5-2) |
radioEffects | boolean | false | PTT click sounds |
pilotReadbacks | boolean | true | Speak pilot responses |
atcVoiceName | string | auto | Preferred ATC voice |
Example: Configure all settings
ttsService.setSettings({
enabled: true,
volume: 0.7,
speechRate: 1.2,
radioEffects: true,
pilotReadbacks: true,
atcVoiceName: 'Samantha'
});Scripting API
Speech events
You can trigger custom speech in your scripts:
// Speak as ATC
ttsService.speak({
type: 'atc',
text: 'All aircraft, expect delays due to weather'
});
// Speak as pilot
ttsService.speak({
type: 'pilot',
text: 'Roger, holding as published',
callsign: 'DAL456' // Determines voice
});Speech request options
| Property | Type | Description |
|---|---|---|
type | 'atc' | 'pilot' | Speaker type |
text | string | Text to speak |
callsign | string | Pilot callsign (for voice selection) |
priority | 'normal' | 'high' | Queue priority |
onStart | function | Called when speech starts |
onEnd | function | Called when speech ends |
Queue management
// Check queue status
const queueLength = ttsService.getQueueLength();
const isSpeaking = ttsService.isSpeaking();
// Control playback
ttsService.pause(); // Pause current speech
ttsService.resume(); // Resume playback
ttsService.stop(); // Stop and clear queue
// Reset (clears pilot voice assignments)
ttsService.reset();Tips
- Headphones make a big difference for the radio effects
- Try speech rate 1.1-1.2 - it matches real controller cadence better than 1.0
- If you're getting distortion, drop the volume a notch
- Radio effects + TTS together is where it really clicks
TIP
Speech rate 1.1-1.2 with radio effects enabled is the sweet spot.
Browser compatibility
TTS is supported in all modern browsers:
| Browser | TTS | Radio Effects |
|---|---|---|
| Chrome | ✅ | ✅ |
| Firefox | ✅ | ✅ |
| Safari | ✅ | ✅ |
| Edge | ✅ | ✅ |
Voice availability varies by browser and operating system. Chrome typically offers the most voice options.
Troubleshooting
No audio playing
- Check that TTS is enabled (speaker icon should be active)
- Verify browser volume isn't muted
- Try refreshing the page
- Check browser permissions for audio
Robotic voices
Some systems have limited voice options. Try:
- Using Chrome for best voice variety
- Installing additional system voices (macOS: System Preferences → Accessibility → Speech)
Audio cutting off
If transmissions cut off early:
- Reduce speech rate slightly
- Check for browser tab throttling (keep tab in foreground)