A cross-platform desktop music visualizer built with Electron that captures system audio and displays minimalist, beat-reactive waveform visualizations with dynamic rainbow color cycling.
- Cross-Platform: Works on Windows, macOS, and Linux
- System Audio Capture: Real-time capture of system audio at 44.1kHz
- Beat Detection: Advanced beat detection with intensity levels and dramatic visual response
- Rainbow Color Cycling: Smooth color transitions through the spectrum with beat responsiveness
- Multiple Visualization Modes: Minimalist waveform, filled areas, circular patterns, and frequency bars
- Fullscreen Support: Toggle between windowed and fullscreen modes
- Real-time Controls: Adjust sensitivity, color speed, and smoothing in real-time
- Performance Optimized: Smooth 60 FPS rendering with efficient audio processing
- Node.js (v16 or higher)
- npm or yarn package manager
- Clone the repository:
git clone https://github.com/your-username/theias-symphony.git
cd theias-symphony- Install dependencies:
npm install- Start the application:
npm startBuild for all platforms:
npm run buildBuild for specific platforms:
npm run build:win # Windows
npm run build:mac # macOS
npm run build:linux # Linux- F11: Toggle fullscreen mode
- H: Show/hide control panel
- ?: Show/hide keyboard shortcuts help
- R: Reset all settings to defaults
- ESC: Exit fullscreen mode
Access the control panel by pressing H or clicking anywhere on the visualization. The panel includes:
- Beat Sensitivity: Adjust how responsive the visualization is to beats (0.1 - 2.0)
- Color Cycle Speed: Control the speed of color transitions (0.1 - 3.0)
- Waveform Smoothing: Smooth out rapid changes in the waveform (0.1 - 1.0)
The application currently supports a minimalist waveform style with:
- Rainbow color cycling
- Beat-responsive scaling
- Particle effects on strong beats
- Shockwave effects for dramatic beats
- Smooth color transitions
- Sample Rate: 44.1kHz
- Buffer Size: 1024 samples
- Audio Analysis: FFT-based frequency analysis with Hanning window
- Beat Detection: Energy-based algorithm with adaptive thresholds
- Target FPS: 60 FPS
- CPU Usage: Typically < 15% on modern hardware
- Memory Usage: < 200MB during normal operation
- Audio Latency: < 50ms
theias-symphony/
├── main.js # Electron main process
├── renderer.js # Main renderer process
├── index.html # Application window
├── style.css # UI styling
├── audio/ # Audio processing modules
│ ├── audioCapture.js # Cross-platform audio capture
│ ├── beatDetection.js # Beat detection algorithms
│ └── frequencyAnalysis.js # FFT and frequency analysis
├── visualization/ # Visualization components
│ ├── waveform.js # Waveform rendering
│ ├── colorCycling.js # Color management
│ └── animations.js # Beat-reactive animations
├── utils/ # Utility modules
│ ├── config.js # Configuration management
│ └── helpers.js # Helper functions
└── assets/ # Application assets
├── icon.ico # Windows icon
├── icon.icns # macOS icon
└── icon.png # Linux icon
The application uses platform-specific audio capture:
- Windows: WASAPI loopback capture
- macOS: Core Audio / AVAudioEngine
- Linux: PulseAudio capture
Audio capture runs in a subprocess for better performance and isolation.
- Electron: Cross-platform desktop framework
- fftjs: Fast Fourier Transform implementation
- electron-builder: Application packaging and distribution
The application stores configuration in platform-specific locations:
- Windows:
%APPDATA%/TheiasSymphony/config.json - macOS:
~/Library/Application Support/TheiasSymphony/config.json - Linux:
~/.config/theias-symphony/config.json
{
"audio": {
"sampleRate": 44100,
"bufferSize": 1024,
"smoothingFactor": 0.8
},
"visualization": {
"style": "minimalist",
"frameRate": 60,
"amplitude": 0.3
},
"colors": {
"mode": "rainbow",
"speed": 1.0,
"saturation": 100
},
"beatDetection": {
"sensitivity": 0.7,
"energyThreshold": 1.3
}
}No audio detected:
- Check system audio permissions
- Ensure audio is playing from other applications
- Try adjusting the beat sensitivity
- Restart the application
Poor performance:
- Lower the frame rate in settings
- Reduce particle count in animations
- Disable advanced effects
- Check for other CPU-intensive applications
Windows:
- May require "Stereo Mix" to be enabled in audio settings
- Some audio drivers don't support loopback capture
macOS:
- Requires microphone permission for audio capture
- May need to install additional audio routing software
Linux:
- Requires PulseAudio to be running
- Check audio group permissions
- Fork the repository
- Create a feature branch:
git checkout -b feature/new-feature - Commit your changes:
git commit -am 'Add new feature' - Push to the branch:
git push origin feature/new-feature - Submit a pull request
# Install dependencies
npm install
# Run in development mode
npm run dev
# Run tests (when available)
npm test
# Lint code
npm run lintThis project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by various music visualization projects
- Built with Electron for cross-platform compatibility
- Uses modern web technologies for high-performance graphics
- Multiple visualization themes
- Audio file playback support
- Recording/screenshot functionality
- Plugin system for custom visualizations
- MIDI input support
- Spectrum analyzer mode
- Customizable color palettes
- Performance profiling tools
- Audio capture may not work on some systems without additional setup
- High DPI displays may have scaling issues
- Some audio drivers don't support system audio capture
For support, bug reports, or feature requests:
- Check the Issues page
- Create a new issue with detailed information
- Include system information and logs when reporting bugs
- Initial release
- Cross-platform audio capture
- Basic waveform visualization
- Beat detection and responsive animations
- Rainbow color cycling
- Real-time controls
- Fullscreen support
Made with ❤️ for music lovers and visualization enthusiasts