Export outputs EqualizerAPO-compatible format with all 16 bands.
Import accepts EqualizerAPO format or simple freq/gain pairs,
maps to nearest GEQ band by log-frequency distance, and ignores
Q values since legacy mode uses fixed dB sliders.
https://claude.ai/code/session_01AgSx7SP1dH5KFmpGXCAUvU
Replace usages of parseFloat(... ) || default and parseInt(... ) || default with explicit parse + isNaN checks to avoid treating valid numeric zeros as falsy. Changes in js/settings.js and js/storage.js update parsing for replayGain preamp, playback speed, scrobble percentage, equalizer band count, and font size so only NaN triggers the fallback value and valid 0 values are preserved.
Android:
- Fix stale wake lock detection by checking isHeld() before reacquiring
- Wrap startForegroundService in try-catch to handle launch exceptions
- Add START/STOP intent actions to prevent stop/start race condition
HTML/Accessibility:
- Convert preset and preamp spans to proper <label> elements
- Add aria-controls to database collapse button
- Sync aria-expanded state when toggling database panel
JavaScript:
- Guard auto-resume with source check to avoid resuming when not playing
- Add _calculateQ() fallback in fast-path EQ filter updates
- Persist graphic EQ gains and preamp to storage from setters
- Include 'legacy' in EQ mode restoration check
- Clear container before rebuilding GEQ bands for idempotency
- Use AbortController for document-level listener cleanup
- Apply gain calculation for non-parametric modes in touch snap
- Validate stored GEQ values are finite numbers
CSS:
- Remove non-standard appearance: slider-vertical property
setEQMode() was unconditionally setting isEQEnabled = true, overriding
the user's toggle state. Now respects equalizerSettings.isEnabled().
Also fixed the toggle handler to properly disable the graphic EQ chain
in legacy mode.
- Add 16-band graphic equalizer with legacy EQ mode
- Add speaker measurement and room correction EQ
- Fix audio skipping with AutoEQ on Android background
- Improve audio performance to prevent skipping under CPU load
- Fix dual EQ applied when switching between legacy and parametric modes
- Remove redundant Equalizer settings tab
- Improve mobile EQ band layout and collapsible database section
This will write each artist separately to the metadata rather than as a single concatenated string. This allows for better library searching if the player supports it.
If multiple artists are written to an m4a file, iTunes will only show the first artist.
Engine & algorithm:
- Use default shelf Q (1/√2) in calculateBiquadResponse for shelf filters
- Compute normalization offset on measurement frequency grid to avoid bias
- Try stale cache for all fetch errors in autoeq-importer, not just timeouts
Audio pipeline:
- Pass postProcessingQuality (preserves Dolby Atmos override) in api.js
- Persist custom band frequencies in equalizerSettings storage
- Restore custom frequencies on _loadSettings instead of regenerating defaults
- Export clamped preamp value in applyAutoEQBands text output
- Propagate filter type and Q values through equalizer import chain
- Update freqRange after importing custom filter frequencies
- Remove return in finally block that hid LOSSLESS fallback failures
Data consistency:
- Normalize artist IDs with String() in blockArtist/unblockArtist
Lint & code quality:
- Annotate empty catch blocks (Atmos codec probes)
- Remove unused catch parameters
Accessibility:
- Add aria-label and for attributes to all AutoEQ form controls
- Add role="status" aria-live="polite" to feedback spans
- Update filter type documentation to reflect shelf support
- Hide parametric-only sections by default to match active tab
UI:
- Move AutoEq button directly under graph
- Hide shared button in Parametric/Speaker modes
- Replace hardcoded white legend dot with theme-adaptive color-mix
- Add pointer-events:none and focus-within to profile delete button