Skip to content

Releases: mtxmiller/LyrPlay

v1.7.7-beta (build 25)

07 Apr 17:58

Choose a tag to compare

Pre-release

Status: In development — available on TestFlight
Build: 26

Gapless playback reliability release, addressing premature track transitions, reconnection improvements, backup server behavior, and UI polish.

Changes

Gapless Boundary Fix

  • Switched from prediction-based boundary detection to write position tracking
  • Eliminates premature track transitions caused by boundary drift

Decoder Throttle Improvement

  • Throttle check now considers total buffer (playback + queue) instead of queue alone
  • Prevents over-buffering that could cause timing misalignment

Stream Info Overlay

  • Overlay now displays actual hardware output sample rate
  • Useful for verifying external DAC behavior and format negotiation

WebView Player Recovery

  • Added handler to reload Material when iOS kills the WebView process in background
  • Added Cometd health check on app foreground to restore player list
  • Root cause of user-reported "player not appearing" issue: cached Material loads fast but Cometd connection dies during backgrounding

ReplayGain Fix

  • Fixed volume drift after silent app foreground recovery: gain now restores to the active ReplayGain value instead of hardcoded 1.0
  • Raised ReplayGain clamp from 2.0 (+6dB) to 4.0 (+12dB) to match squeezelite behavior
  • Build 18: Fixed ReplayGain not applied on first track (push stream path). BASS_ATTRIB_VOLDSP was set after BASS_ChannelPlay, so the DSP chain initialized at unity gain. Now pre-applied before playback starts.

Decoder Hardening

  • Guard error returns in throttle check to prevent permanent decode loop stall
  • Guard against NaN/infinity in stream info bitrate before JS injection

Keep Screen Awake

  • New user setting in Playback Settings (default: OFF)
  • Prevents iPhone screen from dimming/locking during active audio playback
  • Smart behavior: only active during playback, re-enables on pause/stop/background

Automatic Reconnection on Server Restart

  • LyrPlay now automatically reconnects within ~5 seconds after LMS server restarts
  • Previously sat disconnected indefinitely because the network monitor doesn't fire when only the server process restarts
  • Matches squeezelite's reconnection behavior (fixed 5-second retry)
  • Existing backup server failover preserved: switches after 3 failures per server

Material Status Bar Integration

  • Material skin toolbar now extends behind the iOS status bar (color, blur, nav drawer)
  • Eliminates the plain gray bar that previously appeared in the status bar area
  • JS injection fallback ensures correct spacing even on first launch

Position Recovery Reliability (builds 15-16)

  • Build 15: Fixed app-open recovery failing after 2-3 repeated background/foreground cycles. Root cause: recovery timestamp was only saved via a server roundtrip that silently fails after LMS forgets the player (~15 min idle). Now saves all recovery data locally on disconnect, with server roundtrip as best-effort upgrade.
  • Build 16: Extended local position save to all pause commands (lock screen, CarPlay disconnect, headphone unplug). Previously the pause path only used the server roundtrip, which fails during network transitions like car WiFi → cellular when disconnecting from CarPlay.

Dead Code Cleanup (build 17)

  • Removed 415 lines of dead code across 9 files
  • 15 unreferenced functions, 6 unused types, 5 dead properties — all verified via single-reference grep analysis

Fast Server Failover (build 19)

  • Fixed #76: backup server config appeared useless when primary was unreachable on the current network (e.g. remote LMS behind VPN that's off)
  • Previously required 3 failed attempts × (15s TCP timeout + 5s delay) ≈ 60 seconds before backup was tried. Users closed the app before failover could trigger.
  • Tuned three timing parameters: TCP connect timeout 15s → 4s, reconnect delay 5s → 2s, attempts before failover 3 → 1
  • Failover now completes in ~6 seconds, transparent to the user
  • No new files, no new state — three tuned numbers

Dual-Server Connection Test (builds 21-22)

  • Fixed #76 follow-up: "Test Connection" always tested the primary server even after auto-failover to backup. Users saw "Connection Failed" while music played fine from backup.
  • Test Connection now tests both primary and backup servers in parallel when backup is enabled
  • Per-server cards with ACTIVE pill showing which server the app is currently using
  • Three-state header: green (both reachable), orange (failover ready / backup down), red (neither reachable)
  • Context-aware summary messages for all six state combinations
  • Offline detection: shows "iPhone is offline" instead of generic failure when device has no network
  • VoiceOver accessibility labels on each server card
  • Backup-configured-but-empty state shows placeholder card with setup guidance

Dynamic Server Discovery (builds 21-22)

  • Fixed server discovery returning zero results on non-standard subnets (e.g. 192.168.9.x, 172.16.x.x)
  • Discovery now computes broadcast addresses from the device's actual network interfaces via getifaddrs()
  • Filtered to Wi-Fi and bridge interfaces only — skips cellular, AirDrop, hotspot AP
  • Global broadcast (255.255.255.255) always appended as fallback
  • Fixed port number formatting in discovery results (showed 9,000 instead of 9000)

Automatic Failover Toggle (build 23)

  • Added a user-facing opt-out for automatic failover. Requested by @ChristianNoc in #76: some workflows need to manually choose which server is active (VPN on/off, Tailscale paths, internet quality) rather than having the app auto-switch on reachability.
  • New "Automatic Failover" toggle under Settings → Backup Server. Default: ON — preserves the existing v1.7.7 behavior for everyone who's already using LyrPlay. Turn it OFF to keep the active server sticky.
  • Section footer explains the tradeoff: "When off, the app won't switch servers for you. If your active server goes unreachable, playback stops until you tap Switch or connectivity returns."
  • Toggle is disabled when no backup server is configured (matches the existing Switch button).
  • Flipping the toggle mid-session doesn't snap servers or cancel in-flight retries — it just takes effect on the next reconnect attempt.

Server Address Display Fix (build 23)

  • Fixed a display bug where tapping the backup "Switch" button made the top "Server Address" row appear to show the backup IP, as if it had overwritten primary. Pure display issue — the underlying primary server address was never touched, but the UI implied data corruption.
  • Top "Server Address" row now always shows the primary server address. The backup server address continues to display in its own row below, with the "Active Server" indicator showing which one is currently in use.
  • Opening "Server Address" from Settings now always edits the primary. Backup is edited via the separate "Backup Server Address" entry.

Volume Fix: "Fix player volume at 100%" + Natural Slider Curve (build 25)

  • Fixed a volume bug reported on the Lyrion forums by @RoyalScam: turning on Fix player volume at 100% in LMS caused LyrPlay to play at silence / barely-audible level. Toggling back to variable and dragging to 100% restored normal volume, until Fixed was re-enabled.
  • Root cause: LyrPlay wasn't honoring the "adjust volume digitally" flag that LMS sends with every volume message. When that flag says don't adjust (which is exactly what Fixed Volume means), every real Squeezebox and squeezelite client plays at full level and ignores whatever number the server sent for the volume itself. LyrPlay was ignoring the flag and applying the number — and LMS happens to reset that number to 0 when you toggle Fixed Volume on.
  • Fix: LyrPlay now reads the flag the same way squeezelite does. Fixed Volume → full level, ignore the number. Variable → respect the slider.
  • Heads up — slider curve change: while fixing this, LyrPlay also switched to the decibel scale that every real Squeezebox uses (the original linear scale was incorrect). You may find your usual listening position sits higher on the LMS volume slider than before — something like 75–80% where you used to run at 50%. It's not louder at max, just more natural-feeling across the range. This matches the behavior of physical Squeezeboxes, squeezelite, Squeezer, iPeng, etc.
  • ReplayGain is unaffected — relative track-to-track loudness stays the same.

Test Connection Button on Backup Server Screen (build 24)

  • Added "Test Connection" button to the Backup Server config screen for parity with the primary server screen. Requested by @ChristianNoc in #76 — a small consistency gap where the primary config screen had a Test Connection button at the bottom but the backup screen did not.
  • Tests the host, ports, and credentials you've typed (even before saving) so you can validate the backup config before hitting Save — same pattern the primary screen already uses.
  • Button is disabled until host is filled in and both ports are valid numbers.
  • Root Settings "Test Connection" still tests both servers in parallel — per-server config screens test only their own values.

Post-Phone-Call Silent Playback Fix (build 26)

  • Fixed an intermittent bug where, after a phone call, the app would appear to resume playing — UI showed playing state, lock screen and CarPlay updated, the track timer ticked — but no audio came out of the speaker. The only way to recover was to force-quit and relaunch the app on the iPhone; CarPlay couldn't bring the audio back.
  • Root cause: on iOS, AVAudioSession interruptions (phone calls, Siri, alarms) can leave the BASS audio engine's output device stuck in a paused state. When...
Read more

v1.7.6 — Siri, CarPlay Browse & Faster Launch

30 Mar 21:24
d3b4d04

Choose a tag to compare

What's New in v1.7.6

  • Siri Voice Commands — "Hey Siri, play [artist/album] on LyrPlay"
  • Faster App Launch — Dramatically improved WebView loading with progressive display
  • Faster CarPlay UI — Streamlined single-pass home screen loading with artwork
  • CarPlay Artists Browse — Alphabetical artist listing with album art
  • CarPlay Random Albums — Discover music with randomized album browsing
  • CarPlay Refresh — Refresh button on CarPlay home screen
  • CarPlay Stability — Fixed retry connection issues and template stack overflow
  • Authentication Fix — Resolved missing auth on metadata, cover art, and playback controls

Full Changelog: v1.7.5...v1.7.6

LyrPlay 1.7.5

28 Jan 22:30

Choose a tag to compare

What's New

CarPlay Enhancements

  • Shuffle button - Cycle through shuffle modes (off/songs/albums) directly from Now Playing screen
  • Improved reliability - Faster artwork loading and better performance on slower networks
  • Fixed disconnect handling - Server now reliably pauses when exiting your vehicle

Bug Fixes

  • Phone call handling - Playback no longer resumes unexpectedly during calls
  • Mac compatibility - Removed black status bar when running on Mac via "Designed for iPad"

Full Changelog: v1.7.1...v1.7.5

LyrPlay 1.7.1

20 Dec 19:00
2dae658

Choose a tag to compare

LyrPlay 1.7.1

At App Store Connect for approval as of 12/20/2025

New Features

  • Player Synchronization - Sync playback across multiple LMS players
  • HTTP Basic Authentication - Support for password-protected LMS servers with onboarding integration
  • CarPlay Album Browsing - View album track lists, tap any track to start playback, connection error handling with retry
  • Premium Icon Pack - 11 alternate app icons ($2.99 IAP) with full iPhone and iPad support
  • Bit-Perfect USB DAC Playback - Sample rate changes at track boundaries, no mid-track resampling
  • FLAC Default Format - Fresh installs now default to lossless FLAC for premium audio quality

Bug Fixes

  • Fixed gapless metadata race condition (delay query after STMs)
  • Fixed unnecessary reconnection cycles on app startup
  • Fixed stream info display showing buffered track instead of playing track
  • Fixed CarPlay album track selection playing wrong track
  • Fixed slow CarPlay interface load times
  • Cleaned up verbose sync/PHASE debug logs for production

Other Changes

  • GitHub Sponsors replaces Ko-Fi for community support
  • Settings menu reorganization for better discoverability
  • High-quality Lanczos-resampled icons for crisp display on all devices

LyrPlay Version 1.7.0

01 Dec 02:06

Choose a tag to compare

LyrPlay Version 1.7.0 Summary:

Audio Engine Improvements:

  • Flexible Sample Rate Control: Added max sample rate settings to limit cellular data usage (e.g., 44.1kHz for mobile streaming)

Performance & Reliability:

  • Increased Buffer Capacity: Raised buffer limit from 150MB to 600MB for improved stability

User Interface & Experience:

  • Simplified Settings Menu: Streamlined playback and input data settings
  • Enhanced CarPlay Integration: Added Material-like home view and fixed connection issues when starting with CarPlay

System Integration:

  • Custom Capabilities: Added support for custom capability strings
  • Output Data Window: Enhanced DAC and audio output monitoring
  • iOS Player Focus: Added ability to focus exclusively on the iOS player
  • Volume Control: Fixed volume control and replay gain issues

Technical Improvements:

  • Significant Logging Cleanup: Reduced log noise for better debugging
  • Connection Test UI: Fixed white text color issue on connection test screen
  • Frequency Management: Removed forced frequency calls for better compatibility

Note: Mobile Transcode plugin should be updated to version 1.2.2 (will be pushed after App Store approval of 1.7.0)

v1.6.1

18 Oct 12:58

Choose a tag to compare

What's Changed

  • Native FLAC, Opus, OGG Vorbis support
  • MobileTranscode Plugin integration
  • BASS automatic iOS audio session management
  • Faux gapless playback
  • Improved interruption handling and route changes
  • ReplayGain added
  • End of playlist detection added

Full Changelog: https://github.com/mtxmiller/LyrPlay/commits/v1.6.1

Full Changelog: v1.6.1...v1.6.1