AAEQ (Adaptive Audio Equalizer) automatically applies the right EQ preset to each song based on your preferences. It learns your per-song, per-album, or per-genre EQ choices and automatically switches them during playback.
- Linux, macOS, or Windows
- Rust toolchain (for building from source)
- WiiM device on your local network (Mini, Pro, Plus, etc.)
- Network access to your WiiM device
# Clone the repository
cd /path/to/AAEQ
# Build the project
cargo build --release
# Run the application
./target/release/aaeqThe binary will be located at ./target/release/aaeq
-
Launch AAEQ
cargo run --release
-
Enter your WiiM device IP address
- Find your WiiM's IP in the WiiM Home app or router
- Enter it in the "Device IP" field (e.g.,
192.168.1.100) - Click Connect
-
Refresh Presets
- Click Refresh from Device in the Presets panel
- This loads all available EQ presets from your WiiM device
-
Start Playing Music
- Use Spotify Connect, TIDAL Connect, or any other source
- AAEQ will display track information in the "Now Playing" section
- Select a Preset from the Presets list
- Click "Apply Selected Preset"
- Your WiiM will immediately switch to that EQ
After applying a preset you like:
- Click one of the Save buttons:
- This Song - Apply this preset every time this specific track plays
- This Album - Apply to all tracks from this album
- This Genre - Apply to all tracks of this genre (requires manual genre entry)
- Default - Use as the fallback for unmapped tracks
Once you've saved mappings, AAEQ will:
- Monitor your WiiM for track changes
- Look up the appropriate preset (Song → Album → Genre → Default)
- Automatically apply it when a new track starts
Scenario: You want "Bass Booster" for hip-hop albums but "Flat" for jazz
- Play a hip-hop album (e.g., Kendrick Lamar - DAMN.)
- Select "Bass Booster" and click Apply
- Click "This Album" to save the mapping
- Play a jazz album (e.g., Miles Davis - Kind of Blue)
- Select "Flat" and click Apply
- Click "This Album" to save
- Done! AAEQ will now remember these preferences
AAEQ uses a priority system to determine which preset to apply:
- Song-specific (highest priority)
"Pink Floyd - Time"→"Bass Boost"
- Album-specific
"Pink Floyd - The Dark Side of the Moon"→"Rock"
- Genre-specific
"Rock"→"Loudness"
- Default (lowest priority)
- Everything else →
"Flat"
- Everything else →
Example: If you have:
- Album mapping:
"The Dark Side of the Moon"→"Rock" - Song mapping:
"Time"→"Bass Boost"
When "Time" plays, AAEQ will use "Bass Boost" (song beats album).
Your WiiM device comes with these built-in presets:
- Flat
- Acoustic
- Bass Booster
- Bass Reducer
- Classical
- Dance
- Deep
- Electronic
- Hip-Hop
- Jazz
- Latin
- Loudness
- Lounge
- Piano
- Pop
- R&B
- Rock
- Small Speakers
- Spoken Word
- Treble Booster
- Treble Reducer
- Vocal Booster
The WiiM HTTP API does not support uploading custom EQ curves. The vertical sliders in the EQ editor are for future device support or reference only. For WiiM devices, you can only use the presets listed above.
WiiM devices do not provide genre information via the API. If you want to use genre-based mappings, you'll need to:
- Manually add genre info to tracks in your music library
- Or use a music player that provides richer metadata
Track metadata (artist, title, album) availability depends on your playback source:
- ✅ Spotify Connect, TIDAL Connect: Full metadata
- ✅ Local files: Depends on file tags
⚠️ Bluetooth, AUX-In: May not provide metadata
Problem: "Device offline" message
Solutions:
- Verify WiiM IP address in WiiM Home app
- Ensure AAEQ and WiiM are on the same network
- Try both HTTP and HTTPS (AAEQ tries both automatically)
- Check firewall settings
- Ping the device:
ping 192.168.1.100
Test API manually:
curl "http://192.168.1.100/httpapi.asp?command=getPlayerStatus"Problem: Track shows as "No track" or "Track 1 of 10"
Cause: Playback source doesn't provide metadata (AUX/BT) or track is stopped
Solution: Use streaming services (Spotify, TIDAL) for best metadata
Problem: Preset doesn't change when tracks change
Check:
- Is EQ enabled on device? (Check WiiM Home app)
- Is mapping saved? (Mappings are stored in database)
- Is poll interval too slow? (Default: 1 second)
- Are track metadata fields matching? (Check normalization)
Debug:
# Run with debug logging
RUST_LOG=debug cargo run --releaseProblem: AAEQ applies unexpected preset
Cause: Multiple mappings with different priorities
Solution: Check mapping hierarchy - song-specific beats album-specific.
AAEQ stores its database at:
- Linux:
~/.config/aaeq/aaeq.db - macOS:
~/Library/Application Support/AAEQ/aaeq.db - Windows:
%APPDATA%\AAEQ\aaeq.db
To start fresh:
# Linux/macOS
rm ~/.config/aaeq/aaeq.db
# Windows
del %APPDATA%\AAEQ\aaeq.dbEnable detailed logging:
RUST_LOG=debug cargo run --release
RUST_LOG=aaeq=trace cargo run --release # Very detailedMappings are stored in SQLite. You can use sqlite3 to inspect or modify them:
sqlite3 ~/.config/aaeq/aaeq.db
# List all mappings
SELECT scope, key_normalized, preset_name FROM mapping;
# Delete a specific mapping
DELETE FROM mapping WHERE id = 1;
# Clear all mappings
DELETE FROM mapping;- Start with Albums - Album mappings are more flexible than song-specific
- Use Default Wisely - Set a sensible default (like "Flat") for unmapped content
- Test First - Try presets manually before saving mappings
- Leverage Spotify/TIDAL - These provide the best metadata for automatic matching
- Be Patient - Track changes are detected every second, not instantly
- Documentation: See
README.md,DEVELOPMENT.md,WIIM_API_REFERENCE.md - Issues: Report bugs at GitHub Issues
- API Reference: See
WIIM_API_REFERENCE.mdfor WiiM HTTP API details
Future Features:
- Device auto-discovery (mDNS/SSDP)
- Rules management UI
- Preset import/export
- System tray integration
- Cloud sync (optional)
- Support for additional devices (Sonos, HEOS, etc.)
Enjoy your adaptive audio experience! 🎵