🔊 Keep Any Speaker Awake
A lightweight macOS tray utility that prevents speakers from going to sleep by playing silent or ping audio at configurable intervals. Perfect for keeping Bluetooth speakers, USB DACs, and audio interfaces active.
- Marshall Speakers Keep Alive / Awake (Action III, Acton, Stanmore, etc.)
- Bluetooth Speakers that auto-sleep after inactivity
- USB DACs and audio interfaces
- Studio Monitors and powered speakers
- Any audio device that causes delays or pops when waking up
- 🔇 Silent or Ping Audio: Choose between completely silent audio or audible ping sounds
- ⏰ Configurable Intervals: Set timing from 5 seconds to 1 hour (in 5-second increments)
- 💾 Persistent State: Remembers your settings and continues running after switching apps
- 🎛️ System Tray Integration: Lives in your menu bar, stays out of the way
- 🌙 Dark Mode Support: Automatically adapts to your system theme
- 📱 Clean Interface: Minimal, native macOS-style popup window
- 🚀 Lightweight: Minimal resource usage, efficient timer management
- 🔄 Smart Resume: Automatically resumes playback when returning to the app
- Go to the Releases page
- Download the
.dmgfile for macOS - Open the DMG and drag the app to your Applications folder
- Launch and enjoy!
- Node.js (version 14 or higher)
- npm package manager
git clone https://github.com/yourusername/speaker-awake.git
cd speaker-awake
npm install- Launch the app - it will appear in your system tray (menu bar)
- Click the tray icon to open the control panel
- Choose audio type:
- Silent (Empty): Completely silent audio to keep speakers awake
- Ping Sound: Audible ping for confirmation that it's working
- Set the interval: Use the slider to choose how often to play audio (5s - 1hr)
- Click Start - the app will begin keeping your speakers awake
- Switch apps freely - your settings and timer persist across app switches
- Start with 60-300 second intervals for most Bluetooth speakers
- Use Silent mode for background operation
- Use Ping mode when testing or for audible confirmation
- The app remembers your last settings automatically
npm startnpm run build:mac # Build macOS DMG
npm run build-all # Build with custom iconspeaker-awake/
├── main.js # Main Electron process with tray integration
├── preload.js # Secure IPC bridge
├── renderer.js # UI logic with state persistence
├── index.html # Main application window
├── styles.css # Native macOS-style CSS
├── assets/ # Icons and audio files
│ ├── empty.mp3 # Silent audio file
│ ├── ping.mp3 # Ping audio file
│ └── trayIcon.png # System tray icon
└── package.json # Project configuration
The app uses a smart approach to prevent audio device sleep:
- Timer Management: Creates a single, persistent timer that survives app switching
- Audio Playback: Plays very short audio clips at your chosen interval
- State Persistence: Uses localStorage to remember settings and running state
- Window Reuse: Reuses the same window instead of creating new ones
- Smart Resume: Calculates time elapsed while away and adjusts accordingly
- macOS: 10.15 (Catalina) or later
- Memory: ~50MB RAM usage
- Disk: ~100MB storage space
Multiple audio streams playing
- Fixed in latest version - the app now ensures only one timer runs
Settings reset when switching apps
- Fixed in latest version - state persists across app switches
Dropdown not working
- Replaced with reliable radio buttons in latest version
App asks to start again after switching
- Fixed in latest version - maintains running state
- No audio playing: Check system volume and audio output device
- Speakers still sleeping: Try shorter intervals (15-30 seconds)
- Pops or clicks: Switch to silent mode and ensure interval isn't too short
- Built with: Electron 27.x
- Audio Format: MP3 files for broad compatibility
- Timer Precision: JavaScript setInterval with cleanup protection
- State Storage: Browser localStorage with JSON serialization
- UI Framework: Native HTML/CSS with system font stack
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- ✅ Fixed multiple timer issue
- ✅ Added persistent state across app switches
- ✅ Replaced dropdown with reliable radio buttons
- ✅ Added smart resume functionality
- ✅ Improved window management
- ✅ Enhanced audio selection with silent/ping modes
Having issues? Here's how to get help:
- Check the Issues page
- Create a new issue with:
- Your macOS version
- Speaker/audio device model
- Steps to reproduce the problem
- Screenshots if applicable
- Thanks to the Electron team for the excellent framework
- Inspired by Marshall speaker users experiencing auto-sleep issues
- Built for the audio community who just wants their speakers to work reliably
**Made with ❤️ for audio enthusiasts who are tired of speaker sleep issues
