Repository navigation
Releases
v1.7.0-BETA
Big update today: tsrossa is finally on macOS! 🎉
Alongside the Android v1.7 update, the first public beta for Mac (tsrossa-v1.0.0-BETA-macos.dmg) is now live. Both versions share the exact same philosophy: direct, uncompromised bit-perfect playback straight to your external USB DAC.
macOS (v1.0.0-BETA — Debut)
- Exclusive Hog Mode: Locks your DAC so system sounds, notification pings, and other apps can't interrupt or mix into your music.
- Automatic Hardware Clock Switching: Talks directly to the DAC's crystal oscillator to match track sample rates (44.1 kHz up to 384 kHz). No need to touch macOS Audio MIDI Setup anymore.
- Studio Stage UI: Widescreen layout with animated vinyl playback, synchronized lyrics, audio visualizer, and a floating mini-player.
- Universal Binary: Runs natively on Apple Silicon (M1–M4) and Intel Macs.
Android (v1.7.0-BETA)
- 64-bit Studio DSP Volume: Added a calibrated studio taper curve with SplitMix64 TPDF dither for smooth, natural volume adjustments without dynamic range loss.
- Hybrid Hardware UAC: Direct hardware volume registers with true 0.0 dBFS unity gain at 100%.
- Gapless Handover: Fixed track boundary transitions to eliminate micro-clicks.
- Cleaned up UI details, queue index handling, and developer cards.
Downloads
- Mac: Download
tsrossa-v1.0.0-BETA-macos.dmg, open it, and drag the app into your Applications folder. - Android: Download
app-release.apk(Android 8.0+).
Drop any DAC compatibility feedback or bug reports in GitHub Issues!
v1.6.0-BETA
[1.6.0-BETA] - 2026-10-18
Added
- Material 3 (Material You) Glassmorphic UI Overhaul:
- Dynamic tonal elevation surface tokens (
m3SurfaceBase,m3SurfaceContainerLow,m3SurfaceContainer,m3SurfaceContainerHigh,m3OnSurface,m3OnSurfaceVariant). AnimatedM3Paletteroot-level color provider with 500ms smooth cross-palette transitions, eliminating abrupt theme snaps when switching songs or theme modes without per-item animation overhead.AppBackgroundContainersupporting OLED Black, Signature M3 Glow, and Blurred Album Artwork with hardware-accelerated 550msCrossfade.BackdropBlursystem withLocalModalBlurCountapplying an 8.dp background blur behind active bottom sheets and dialogs.
- Dynamic tonal elevation surface tokens (
- Now Playing Screen Enhancements:
- Coherent and 100% opaque background canvas matching the App UI (Album Artwork, Tonal, OLED), eliminating see-through bleeding into underlying library views.
- Synchronized LRC and embedded lyrics engine (
NowPlayingLyricsView,LyricsHelper) with automatic time matching, active line auto-scroll, and manual line seeking. - Circular tactile hero controls: 68.dp Play/Pause, 48.dp Previous/Next, 50.dp Volume Pill, 50.dp Lyrics toggle, and 50.dp Priority Queue shortcut.
- Smooth swipe-down to collapse gesture with discrete state change reporting, dropping per-frame recomposition overhead.
- Library & Search Power Tools:
- Comprehensive 11-criteria Track Sorting modal sheet (
LibrarySortModalSheet) supporting Title, Artist, Album, Date Added, Duration, Track Number, Bitrate, Sample Rate, File Size, File Name, and Extension in Ascending or Descending orders. - Interactive alphabetical fast scroller (
LibraryFastScroller) with tactile letter popups and smooth fling snapping. - Enhanced search bar with fuzzy text matching (
FuzzySearchHelper), multi-attribute filtering (Artist, Album, Path), and instant clear. - Multi-select batch mode supporting bulk queueing, bulk playlist addition, and bulk deletion with safety confirmation modal (
ConfirmDeleteDialog). - Dynamic Folder, Artist, and Album filter sheets (
FilterSelectionModalSheet). - Full-detail track inspector sheet (
TrackDetailsModalSheet) displaying bit depth, sample rate, bitrate, codec, duration, and file path.
- Comprehensive 11-criteria Track Sorting modal sheet (
- Playlist Management V2:
- Complete Playlist CRUD: create, rename, delete, pin to top, and clear tracks.
- In-playlist fuzzy search and live track counter.
- Playlist cards styled with tactile 0.85 opacity and active playback indicators.
- Sequential and Shuffled playback buttons directly accessible from playlist cards.
- Audiophile Hardware & Volume Management:
- Separate volume policies for 32-bit Hardware Chip Volume (defaults to 100% / 0 dBFS) and 64-bit Bit-Perfect DSP Software Volume (defaults to safe 20% for hearing and equipment protection).
- Persistent volume levels stored per unique connected USB DAC identifier (
vol_dac_<id>_hw32/vol_dac_<id>_dsp64). - Hardware DAC Warm-Up feature triggered via long-press on the DAC top-bar pill, complete with confirmation dialog (
WarmupConfirmDialog) and real-time HUD (WarmupHudDialog). - Screen Pinning / Lock Task Mode toggle in the top bar to lock the device into a dedicated DAP (Digital Audio Player) mode.
- In-app diagnostics terminal panel (
SystemLogsPanel) with real-time log filtering, search, export to clipboard/file, and DAC telemetry metrics.
- Branding & Packaging:
- Updated high-resolution application icons for Android across all mipmap density buckets (adaptive XML, monochrome, round) and complete iOS asset sets.
Fixed
- Swipe-Down Lag in Now Playing: Reduced swipe-down blur radius from 18.dp to 6.dp and converted per-frame float callbacks to discrete boolean transitions, eliminating 120fps full-tree recomposition stutter.
- Album Artwork Blur Overhead: Reduced global artwork blur radius from 52.dp unbounded to 12.dp rectangle, and cached
ImageBitmapallocations inMainActivityto prevent reallocations every 200ms playback position tick. - Background Flashing During Song Transitions: Preserved the last valid cover art bitmap while track metadata is loading (
Loading...), preventing blank skeleton background flashes. - Light Mode Play/Pause Contrast Bug: Made Mini Player and Now Playing Play/Pause button icons dynamically select
Color.Whitewhen running in Light Mode or when button surface luminance is dark. - Modal Sheet Status Bar Overlap: Capped modal bottom sheet fullscreen height at 90% (
0.90f) of the viewport, ensuring clean status bar clearance. - Sort Tracks Selector Styling: Removed unwanted redundant container background around the Ascending / Descending order toggle in
LibrarySortModalSheet. - Top Bar & Playlist Opacity: Standardized DAC top-bar pill and playlist card backgrounds to an explicit 0.85 opacity across all surface modes.
Performance & Automated Testing
- Expanded automated unit test suite covering color contrast luminance calculation, music scanner sorting, queue resolver logic, metadata extraction, album art caching, fuzzy search, and lyrics parsing.
v1.5.0-BETA
Tsrossa Music Player — Full Changelog (v1.5.0-BETA)
This major release focuses on total stability of the C++ USB Audio Engine,
eliminating screeching and squealing distortion on external USB DACs,
perfecting bit-perfect integer pass-through, and overhauling the UI to a
refined, battery-efficient Material 3 design system.
──────
1. Audio Engine & Native C++ (USB DAC Core)
• Elimination of Audio Screeching / Squealing on UAC2 DACs:
• Retired asynchronous feedback IN endpoint (0x83) polling under Linux
usbfs, which frequently stalled or desynchronized on mobile USB host
controllers (such as Synopsys DWC3).
• Replaced it with pure host-side Bresenham sample pacing
(iso_fixed_rem) at 8000 microframes/second. Delivers 0.00 ppm jitter-
free pacing with smooth track transitions, zero pitch shifts, and zero
buffer underruns.
• 100% Bit-Perfect Integer Direct Pass-Through:
• When hardware DAC volume control is active, audio travels through a
pure integer path (16-bit, 24-bit 3-byte / 4-byte, and 32-bit).
• Float conversions and TPDF dithering are completely bypassed (gain =
1.0f, delta = 0.0f), guaranteeing 1:1 bit-accurate stream delivery
from decoder to DAC.
• Android Audio Isolation & Gesture Anti-Mute:
• Added the ALLOW_CAPTURE_BY_NONE policy flag to the keep-alive
AudioTrack to prevent unwanted system effects (e.g., Samsung
SoundAlive, Dolby Atmos) from altering the stream.
• Fine-tuned USB URB buffer geometry (192 ms) to prevent playback
dropouts during system navigation gestures and window transitions.
• Thread Safety & Zero Deadlocks:
• Offloaded critical JNI event dispatches (onUsbStallFault,
REQ_EVENT_TRACK_FINISHED) from the real-time isochronous thread to an
asynchronous control thread.
• Eliminated dangling pointer hazards in AltSettingInfo by adopting
safe pass-by-value semantics.
──────
2. Playlist & Music Scanner Features
• Custom Multi-Playlist & Atomic Storage:
• Added full support to create, rename, delete, and switch between
multiple custom playlists.
• Reinforced playlist persistence with atomic file writes and in-
memory caching to safeguard against playlist corruption during
unexpected app terminations.
• Folder Picker & Offline Storage Scanning:
• Introduced a dedicated folder picker dialog to scan specific music
directories across internal storage and SD cards.
• Added an intelligent track title parser (TrackTitleParser.kt) to
clean up messy metadata and raw filename patterns.
──────
3. Modern UI/UX & Material 3 Refinements
• Material 3 Dynamic Surface & Clean Aesthetics:
• Shifted from aggressive neon cyberpunk styling to a cohesive, eye-
friendly Material 3 Tonal palette designed for extended listening
sessions.
• Redesigned top header controls (NavigationComponents.kt) with
tactile quick-action clusters: DAC Warmup, Diagnostics Logs, Screen
Pinning / Lock Task, and Update Checker.
• Album Art Memory Optimization:
• Added AlbumArtThumbnailCache.kt with an in-memory LruCache to ensure
fluid track list scrolling with zero dropped frames or RAM spikes.
• Persistent User Preferences:
• User choices for themes, display settings, typography, and haptics
now persist reliably via SharedPreferences across app restarts.
──────
4. Background Playback & System Notifications
• Complete Notification Asset Set:
• Integrated dedicated vector drawables for foreground playback
notifications: Play, Pause, Next, Previous, Close, along with the
official status bar icon (ic_stat_tsrossa).
• Precise Background Playback Position:
• Fixed track progress and seek synchronization during screen-off and
background playback states.
• Independent DAC Warmup:
• The DAC Warmup utility can now be triggered independently even while
track playback is paused.
v1.4.0-BETA
Release v1.4.0-BETA — Bit-Perfect Direct Audio, Dynamic Acoustic
Buffering & UI Ergonomics
The v1.4.0-BETA update brings major leaps to our core USB audio engine
(Direct Integer pass-through), isochronous buffer stability, refined DAC
volume handling, and a thorough UI/UX ergonomic overhaul designed for a
more comfortable and accessible experience across diverse Android devices.
──────
Audio Engine & Acoustics (Direct USB DAC)
• Direct Integer Bit-Perfect Pass-Through (0 dBFS)
• At 100% volume (0 dBFS), DSP processing, floating-point math
conversion, and dither noise are now completely bypassed. PCM audio is
streamed straight via pure integer transfers (memcpy) from physical
RAM to the USB DAC endpoint, delivering absolute bit-perfect signal
purity without coloration.
• Dual-Architecture Volume Control (Hardware Chip & 64-bit Software
Dither)
• Hardware Volume Sync: Automatically detects UAC1/UAC2 Feature Units
on external DACs and initializes the hardware chip volume to 0 dBFS
upon connection.
• Smart Fallback for DACs without Hardware Volume: If your DAC lacks
hardware master volume controls (such as the Apple USB-C Dongle or
pure line-out DACs), volume seamlessly synchronizes to your saved
level using studio-grade 64-bit dithered software attenuation. No more
sudden 100% volume blasts when hotplugging your DAC.
• Precision TPDF Dither Calibration: Dither amplitude has been
calibrated precisely across 16-bit, 24-bit, and 32-bit container slots
to eliminate quantization distortion whenever software volume
attenuation is active.
• Dynamic Isochronous Buffer Profiles
• Added customizable buffer queue profiles in Settings: Ultra-Low
Latency (64ms / 8x8), Balanced Audiophile (192ms / 12x16), and Extreme
Stability (500ms / 16x32) for heavy multitasking environments. Buffer
profiles are now permanently persisted and automatically synchronized
to the native C++ engine on startup.
──────
UI, UX & Screen Ergonomics
• Volume Stepper Fix (Stepper Stuck at 95% Resolved)
• Fixed an issue where tapping the - button would only drop the volume
to 95% and freeze. Volume now attenuates smoothly and monotonically
from 100% → 0% in 5% increments, or returns instantly to 100% with a
single tap of the [0 dBFS LOCK] button.
• Full Accessibility Support (TalkBack / Screen Reader)
• All tactile controls (TactileBox) now carry native Android button
semantics (Role.Button), allowing users relying on TalkBack or screen
readers to navigate and interact with all player controls accurately.
• Real-Time Bitrate Display & Responsive Audiophile Spec Strip
• Added instantaneous compression throughput telemetry (KBPS) right
beside the audio format badge on the Now Playing screen.
• The industrial spec strip (CODEC, KBPS, DIRECT USB, BIT-PERFECT,
MQA) now supports smooth horizontal scrolling, preventing text
clipping on compact screens or when system display scaling is enlarged.
• Auto-Marquee for Long Track Titles
• Long classical movements and track titles are no longer statically
truncated with an ellipsis (...); titles and artist labels now scroll
smoothly with an automatic horizontal marquee during playback.
• Dynamic Accent Contrast Normalization (WCAG 4.5:1)
• Dynamic accent colors extracted from album artwork are automatically
adjusted to guarantee at least a 4.5:1 contrast ratio against dark
backgrounds. Color transitions between tracks now crossfade smoothly.
──────
Multi-OEM Compatibility & System Stability
• Samsung Dolby Atmos Audio Effect Bypass
• Added automated detection and a direct deep-link launcher to Samsung
system sound settings to help users easily disable native sound
processing that interferes with bit-perfect USB streaming.
• Multi-OEM Background Battery Optimization Guide
• Added an adaptive battery optimization card to prevent aggressive
OEM background app killers (MIUI/HyperOS, Samsung One UI, Huawei EMUI,
Oppo ColorOS, and Vivo FuntouchOS) from interrupting audio playback
while the screen is off.
v1.3.2-BETA
Fitur Baru
• USB DAC Warmup: Menambahkan fitur warmup DAC (streaming silent frames terkalibrasi) langsung dari menu Settings/Diagnostics untuk menstabilkan osilator jam (clock) dan kapasitor output
DAC eksternal sebelum sesi mendengarkan dimulai.
• Ikon Aplikasi Baru: Pembaruan aset visual ikon launcher aplikasi (mipmap multi-densitas) dengan tema visual baru.
Perbaikan Bug & Audio Engine
• Fix Kebocoran Antrean Playlist ke Library: Mengatasi masalah di mana pemutaran lagu dari playlist bisa nyasar/loncat ke lagu di folder Library saat lagu selesai atau saat mode
shuffle/repeat aktif. Logika antrean sekarang membaca sumber pemutaran secara sinkron dan memvalidasi path file secara ketat (canonicalPath & absolutePath).
• Fix Stale Closure Callback: Memperbaiki callback gapless audio di native engine agar selalu mengecek daftar lagu aktif secara real-time, mencegah trigger lagu lama yang tersimpan di
cache Compose.
• Isolasi Alokasi Buffer C++: Memastikan buffer PCM di-unlock (munlock) dan dibersihkan dengan benar saat koneksi DAC terputus atau beralih trek guna mencegah kebocoran memori.
Refactoring & Internal
• Modularisasi Kode UI: Memecah komponen UI monolithic di MainActivity.kt menjadi modul-modul terpisah (ui/views/, ui/dialogs/, model/, util/) agar performa render lebih ringan dan kode
lebih mudah di-maintain.
tsrossa Music Player v1.3.0-beta
🎵 Tsrossa Music Player v1.3.0-beta
🌟 What's New & Highlights
-
⚡ Perbaikan Suara Pecah/Decitan di Awal Pemutaran (First
Play Audio Glitch Fixed)
- AltSetting State Sync: Memperbaiki bug di mana pemutaran lagu
pertama melewati aktivasi interface streaming karena state subframe
sama, yang menyebabkan DAC tertinggal diAltSetting 0(zero-
bandwidth mode).
- Instant Hardware Clock Sync: Negosiasi Clock Source & Sample
Rate UAC2 kini langsung dikonfigurasi tepat saat AltSetting audio
aktif diaktifkan.
- Zero-Drop Packet Initialization:isPlayingdan
phase_accumulatordisinkronkan sebelum thread isochronous dimulai
sehingga paket pertama langsung mengirimkan audio murni tanpa silence
gaps. -
🛡️ Eliminasi Buffer Starvation (No More Chirping/Squeaking)
- 10-Second Preload Buffer: Preload awal dinaikkan ke 10 detik
secara sinkron sebelum memutar, mencegah desinkronisasi audio pada
file resolusi tinggi (Hi-Res 24-bit/96kHz & 192kHz).
- Elevated Thread Priority: Thread decodingTsrossaDecode
dinaikkan ke prioritas tinggi (nice -10) dengan chunking 128k frames
sehingga tidak terganggu oleh rendering UI atau background task. -
🏗️ Modular C++ Native Engine (Cleaner & Faster)
- Kode monolitiknative-lib.cpp(>2.670 baris) telah dipecah
menjadi modul-modul independen:AudioCommon.h– Logger, helper mutex, PRNG TPDF dither.AudioDecoder.h– Wrapper terisolasi untukdr_flacdan
dr_wav.AudioEngineState.h&.cpp– Manajemen state global engine &
antrean UAC.UsbDacController.h&.cpp– Enumerasi USB, parsing UAC1/UAC2,
kernel interface detachment, hardware volume thread.AudioStreamer.h&.cpp– Real-time Isochronous engine,
transfer callback, gapless buffer swapping.native-lib.cpp– Bersih sebagai pure JNI bridge (~260 baris).
-
📱 Kompatibilitas Lintas Perangkat Android Lebih Luas
- Android 15 & 16 Ready: Mendukung arsitektur kernel 16KB memory
page size (-Wl,-z,max-page-size=16384).
- Dynamic Multi-Core CPU Affinity: Otomatis mendeteksi jumlah
core CPU perangkat secara dinamis tanpa hardcode.
- Support Android 8.0 (Oreo) hingga Android 16.
v1.2.0-beta7: Fix libusb Android SELinux I/O Error
Changes in v1.2.0-beta7:
- Core Fix (libusb_init_context with LIBUSB_OPTION_NO_DEVICE_DISCOVERY):
On Android, calling standardlibusb_init()attempted netlink socket creation and device discovery under/sys/bus/usb/devices/, which is blocked by SELinux in untrusted app domains, resulting inLIBUSB_ERROR_IO (-1)duringinitUsbDac.
By passingLIBUSB_OPTION_NO_DEVICE_DISCOVERY, device scanning and netlink monitoring are completely bypassed, enablinglibusb_wrap_sys_device()to seamlessly adopt the Android OS USB File Descriptor. - Full End-to-End Diagnostic Audit:
Verified clean handover from AndroidUsbDeviceConnection(FD) to native libusb audio stream engine.
v1.2.0-beta6: USB Hardware Audit Trail & Diagnostics Instrumentation
Tsrossa v1.2.0-beta6 Release
This release introduces comprehensive multi-layer USB hardware audit logging across the Android Framework (Java) and Native Audio Engine (libusb C++) layers to diagnose and resolve DAC connection issues on vendor ROMs (Xiaomi/HyperOS and Samsung OneUI).
Key Features & Diagnostic Tools:
- Full USB Hardware Audit Trail: Real-time tracking of USB discovery, permission grants, OS file descriptor generation, interface enumeration, and kernel driver detachment.
- Native Descriptor Dump: Full inspection of endpoint attributes, AltSettings, and AudioStreaming capabilities directly in the diagnostics panel.
- Enhanced Claim Logic: Disconnect and claim retries with fallback handling for Linux devio interface contention.
- In-App & Report Audit Export: Instant copy and display of all USB hardware handshake logs to identify root cause.
tsrossa v1.2.0-beta5 (BETA 5)
tsrossa v1.2.0-beta5 (BETA 5)
Bug Fixes & Improvements:
- Fixed Multi-Device USB DAC Detection: Resolved an issue where DAC was detected in hardware/report logs but remained in
DISCONNECTEDstate and unable to play music on various Android devices (Samsung One UI, Xiaomi HyperOS/MIUI, ColorOS, Pixel). - Forced Kernel Audio Driver Detach: Integrated Android framework
claimInterface(force=true)and C++USBDEVFS_DISCONNECT_CLAIMioctl fallback to releasesnd-usb-audio/ AudioFlinger driver locks. - Unconfigured USB Device Fallback: Automatically sets active configuration descriptor if the DAC is in an unconfigured state on coldplug.
- Eliminated False Surprise Removal: Disabled unreliable Linux netlink uevent callbacks in the Android sandbox that caused spurious disconnect events.
- Standby AltSetting 0 Handshake: Initial handshake now defaults to AltSetting 0 (Zero-Bandwidth) to prevent host USB controllers rejecting isochronous bandwidth before playback.
- Auto USB Attach in onNewIntent: Detects hotplug attachment even when the app is already running in background or foreground.
- Interactive Reconnect DAC Action: Added
[ INITIALIZE / RECONNECT DAC ]button inside the Diagnostics & System Logs panel. - Fixed Wedged State: Ensures connections are completely closed if initialization fails, enabling clean reconnects.
tsrossa v1.2.0-beta4 (BETA 4)
tsrossa v1.2.0-beta4 (BETA 4) 🚀
🛠️ What is Fixed & Improved:
- Pure RAM Playback Engine:
- Seluruh file lagu sekarang di-cache langsung ke RAM saat lagu dimulai, lalu file storage ditutup agar flash storage idle (mengurangi electrical noise pada jalur USB).
- Audio Thread CPU Core Pinning:
- Thread transmisi USB (
TsrossaIso) di-pin ke performance core CPU dengan prioritasnice -19untuk meminimalkan jitter dan stutter playback.
- Thread transmisi USB (
- UAC2 Hardware Clock Verification:
- Memperbaiki pembacaan clock sample rate hardware UAC2 (fix STALL status pada DAC tertentu) sehingga indikator sample rate DAC terbaca akurat.
- 64-Byte DMA Memory Alignment:
- Alokasi buffer transfer USB kini menggunakan alignment 64-byte sesuai cacheline CPU ARM untuk transfer data yang lebih lancar.
- Library Sorting & UI Polish:
- Menambahkan sorting file berdasarkan tanggal di tab Library dan optimalisasi notifikasi agar UI tidak lag.