Skip to content

Timbra 0.7.44

Choose a tag to compare

@fulalas fulalas released this 30 Jul 14:14
· 13 commits to main since this release

Timbra 0.7.44

Playback robustness

  • Play MPEG audio inside RIFF/WAVE containers (fmt tag 0x55/0x50) via a new
    RiffMpegExtractor — these files were claimed by WavExtractor and then rejected
    as a source error, so they simply refused to play.
  • A track that errors out now skips to the next one instead of leaving the
    player IDLE with a dead play button.
  • Tracks that wedge while buffering at the very end (rips whose reported
    duration overruns the actual audio) are finished by seeking past the last
    frame instead of hanging.
  • A failed controller connection is retried rather than leaving the app
    silent.
  • If the saved current track was deleted, playback restores the nearest
    surviving song in that list instead of coming up empty.

Shuffle and "play next"

  • "Play next" is honoured under shuffle: enqueued songs lead the shuffle order
    instead of joining the random pool, and the enqueued block stays contiguous.
  • Cycling the shuffle button (Shuffle-Songs → OFF) no longer wipes the queue.
    The manually enqueued block is now lifted off the timeline and spliced back on
    both mode transitions, so it survives the round trip.
  • A "play next" insertion is absorbed into the running shuffle session, so the
    no-repeat history is kept instead of reset. Enqueued duplicates and a
    completed shuffle pass no longer clear that history either.
  • Play-next items are marked consumed once they play, fixing songs
    resurrecting after a shuffle change, after a reorder that crosses the current
    song, and Clear Queue cutting playback off.

Advance-List

  • The next-folder step lives in one shared implementation owned by the
    service, so queue ends, stuck tracks, and Next from the notification or
    Bluetooth all advance identically.

Library, sorting and metadata

  • Disc numbers are kept, so multi-disc albums stop interleaving their tracks;
    the track-1000 edge case is fixed too.
  • Folder sort is persisted app-wide, so browse order and play order always
    agree.
  • List rows and their tap targets are committed together, so a tap landing
    during a re-sort plays the song you actually touched.
  • Repository caches are rescan-safe, and the album/artist groupings are shared
    rather than rebuilt.

Equalizer

  • Output is rounded instead of truncated, filter state resets when
    coefficients change, and coefficients are published atomically (no torn reads
    mid-block).
  • The last fader step of a drag is persisted — previously it could be dropped
    on release.

Artwork and UI

  • Art decodes are sized to the target view and the cache is keyed by size; the
    legacy album-art path is sampled instead of decoded full-size.
  • Pending marquee work is cancelled, so it can no longer overwrite another
    screen's toolbar title.
  • Queue-screen updates that arrive mid-drag are re-applied afterwards, and
    taps are guarded by media id.
  • Navigation launched after a suspending load is guarded against a stopped
    activity.
  • Transport binding, dialogs, and the player controls layout are shared
    between portrait and landscape.