SpotiFLAC-Mobile/COMPARISON_PC_vs_ANDROID.md

18 KiB

SpotiFLAC: PC vs Android Port Comparison

Executive Summary

The Android port now uses the same API endpoints as the PC version after the recent fix. Key changes include:

  • Amazon: Now uses DoubleDouble service (same as PC) instead of proxy APIs
  • Qobuz: Now uses dab.yeet.su and dabmusic.xyz (same as PC) instead of broken proxy APIs
  • Tidal: Already using same APIs as PC (8 APIs)
  • 3 missing modules entirely (Spectrum, Analysis) - non-critical for core functionality
  • Lyrics support implemented
  • FFmpeg support via FFmpeg Kit Flutter

API Endpoints Comparison (UPDATED)

QOBUZ APIs

API PC Version Android Version (After Fix)
Primary dab.yeet.su/api/stream?trackId= Same
Fallback dabmusic.xyz/api/stream?trackId= Same

AMAZON APIs

Service PC Version Android Version (After Fix)
DoubleDouble US us.doubledouble.top Same
DoubleDouble EU eu.doubledouble.top Same
Mechanism Submit → Poll → Download Same

TIDAL APIs

API PC Version Android Version
vogel.qqdl.site Same
maus.qqdl.site Same
hund.qqdl.site Same
katze.qqdl.site Same
wolf.qqdl.site Same
tidal.kinoplus.online Same
tidal-api.binimum.org Same
triton.squid.wtf Same

Detailed Feature Comparison

1. AMAZON.GO - Amazon Music Downloader

Feature PC Version Android Version Status
Basic Download Full implementation Full implementation Same
Service DoubleDouble (us, eu) DoubleDouble (us, eu) Same
Rate Limiting Sophisticated (per-minute tracking) Uses global rate limiter Similar
User-Agent Rotation Random generation Random generation Same
Download Progress Progress writer tracking Progress writer tracking Same
Metadata Embedding Full Spotify metadata Full Spotify metadata Same
Cover Art Download Max quality option Max quality option Same
Filename Formatting Template-based with regex Template-based Same
ISRC Checking Checks for duplicates Checks for duplicates Same
Error Handling Detailed error messages Detailed error messages Same

Key Changes (After Fix):

  • Now uses DoubleDouble service (same as PC)
  • Submit → Poll → Download mechanism (same as PC)
  • Supports us and eu regions (same as PC)

2. TIDAL.GO - Tidal Downloader

Feature PC Version Android Version Status
Track Search Multiple strategies Multiple strategies Same
ISRC Matching Priority 1 (exact match) Priority 1 (exact match) Same
Duration Matching 3-second tolerance 3-second tolerance Same
Japanese Support Romaji conversion Romaji conversion Same
Quality Selection HIRES_LOSSLESS detection HIRES_LOSSLESS detection Same
Manifest Parsing BTS & DASH formats BTS & DASH formats Same
DASH Remuxing FFmpeg to FLAC Saves as M4A MISSING
Segment Download With progress tracking With progress tracking Same
API Fallback 8 APIs available 8 APIs available Same
Access Token OAuth2 flow OAuth2 flow Same
Metadata Embedding Full Spotify metadata Full Spotify metadata Same

Key Differences:

  • PC: Can remux DASH segments to FLAC using FFmpeg
  • Android: Cannot remux - saves DASH downloads as M4A (no FFmpeg available)
  • PC: Full FLAC output for all formats
  • Android: May output M4A for DASH streams (limitation)

3. QOBUZ.GO - Qobuz Downloader

Feature PC Version Android Version Status
Track Search By ISRC By ISRC Same
Metadata Search Artist + Track Artist + Track Same
Quality Detection Hi-Res detection Hi-Res detection Same
Primary API dab.yeet.su dab.yeet.su Same
Fallback API dabmusic.xyz dabmusic.xyz Same
Download URL Quality-based selection Quality-based selection Same
File Download 5-minute timeout 60s timeout ⚠️ Different timeout
Metadata Embedding Full Spotify metadata Full Spotify metadata Same
Cover Art Downloaded & embedded Downloaded & embedded Same
Filename Formatting Template-based with regex Template-based Same

Key Changes (After Fix):

  • Now uses same APIs as PC (dab.yeet.su, dabmusic.xyz)
  • Same URL format: /api/stream?trackId={id}&quality={quality}
  • Removed broken proxy APIs (kinoplus, binimum, squid)

Feature PC Version Android Version Status
Rate Limiting Per-minute tracking Global rate limiter ⚠️ Different approach
Availability Check Tidal, Amazon, Qobuz Tidal, Amazon, Qobuz Same
URL Extraction From song.link API From song.link API Same
Qobuz Check Via ISRC search Via ISRC search Same
Retry Logic 3 retries with backoff Retry config Similar
Error Handling Detailed messages Detailed messages Same

Key Differences:

  • PC: Manual rate limit tracking with time calculations
  • Android: Uses centralized global rate limiter
  • Both: Similar functionality, different implementation

5. METADATA.GO - Metadata Handling

Feature PC Version Android Version Status
FLAC Parsing Full support Full support Same
Vorbis Comments Full support Full support Same
Cover Art Embedding JPEG/PNG support JPEG support ⚠️ Limited
Lyrics Embedding FLAC & MP3 support Not implemented MISSING
ISRC Reading From FLAC files From FLAC files Same
Duplicate Detection Parallel ISRC index Simplified check ⚠️ Simplified
Metadata Extraction From MP3/M4A/FLAC FLAC only ⚠️ Limited
MP3 ID3v2 Support Full support Not implemented MISSING
M4A Support FFmpeg-based Not implemented MISSING

Key Differences:

  • PC: Supports MP3 and M4A metadata handling
  • Android: FLAC-only metadata support
  • PC: Can embed/extract lyrics from multiple formats
  • Android: No lyrics support
  • PC: Parallel ISRC checking for performance
  • Android: Simplified sequential checking

6. FILENAME.GO - Filename Generation

Feature PC Version Android Version Status
Template Support Full regex-based Basic string replacement ⚠️ Simplified
Placeholder Support {title}, {artist}, {album}, {album_artist}, {year}, {track}, {disc} Same Same
Sanitization Comprehensive (emoji removal, control chars) Basic (invalid chars only) ⚠️ Simplified
Path Normalization Cross-platform support Basic support ⚠️ Simplified
Folder Sanitization Per-component sanitization Not implemented MISSING
UTF-8 Validation Full validation & fixing Not implemented MISSING
Emoji Filtering Removes emoji ranges Not implemented MISSING

Key Differences:

  • PC: Removes emoji and control characters
  • Android: Only removes basic invalid filesystem characters
  • PC: Validates and fixes UTF-8 encoding
  • Android: No UTF-8 validation
  • PC: Can sanitize folder paths for new directories
  • Android: No folder path sanitization

7. COVER.GO - Cover Art Handling

Feature PC Version Android Version Status
Download Full implementation Full implementation Same
Max Quality Spotify size upgrade Spotify size upgrade Same
Embedding FLAC support FLAC support Same
Filename Matching Template-based Template-based Same
Error Handling Graceful fallback Graceful fallback Same

Key Differences:

  • Both implementations are very similar
  • Android version is slightly simplified but functionally equivalent

8. LYRICS.GO - Lyrics Handling

Feature PC Version Android Version Status
LRCLIB Integration Full support Full support Same
Lyrics Search Multiple strategies Multiple strategies Same
LRC Format Synced & unsynced Synced & unsynced Same
Lyrics Embedding FLAC & MP3 FLAC only ⚠️ FLAC only
Timestamp Parsing LRC format support LRC format support Same

Status: IMPLEMENTED - Full lyrics support with LRCLIB integration


9. SPECTRUM.GO - Audio Spectrum Analysis

Feature PC Version Android Version Status
FFT Analysis Cooley-Tukey algorithm Not implemented MISSING
Hann Window Spectral leakage reduction Not implemented MISSING
Frequency Bins 4096 bins Not implemented MISSING
Time Slices 300 time slices Not implemented MISSING
Magnitude Calculation dB scale Not implemented MISSING

Status: COMPLETELY MISSING IN ANDROID


10. ANALYSIS.GO - Audio Analysis

Feature PC Version Android Version Status
FLAC Parsing STREAMINFO extraction Not implemented MISSING
Audio Properties Sample rate, channels, bit depth Not implemented MISSING
Duration Calculation From total samples Not implemented MISSING
Peak Amplitude dB calculation Not implemented MISSING
RMS Level Root mean square Not implemented MISSING
Dynamic Range Peak - RMS Not implemented MISSING
Spectrum Analysis Integrated with spectrum.go Not implemented MISSING

Status: COMPLETELY MISSING IN ANDROID


11. FFMPEG.GO - FFmpeg Integration (via FFmpeg Kit Flutter)

Feature PC Version Android Version Status
FFmpeg Download Auto-download on first run Bundled via FFmpeg Kit Different approach
Format Conversion FLAC → MP3, M4A FLAC → MP3, M4A Same
Metadata Preservation Full metadata copy Full metadata copy Same
Cover Art Preservation Embedded in output ⚠️ Basic support ⚠️ Simplified
Lyrics Embedding During conversion ⚠️ Not during conversion ⚠️ Embedded in source only
DASH Remuxing M4A → FLAC M4A → FLAC Same
Parallel Conversion Multiple files ⚠️ Sequential ⚠️ Simplified
Cross-platform Windows, Linux, macOS Android Same (mobile)

Status: IMPLEMENTED - Via FFmpeg Kit Flutter library


Summary Table: Feature Availability

Module PC Android Status
amazon.go Full Simplified ⚠️ Core works, simplified
tidal.go Full Full DASH remuxing via FFmpeg Kit
qobuz.go Full Simplified ⚠️ Core works, simplified
songlink.go Full Full Same
metadata.go Full Full FLAC with lyrics support
filename.go Full Simplified ⚠️ Basic functionality
cover.go Full Full Same
lyrics.go Full Full IMPLEMENTED
spectrum.go Full Missing Not implemented (not critical)
analysis.go Full Missing Not implemented (not critical)
ffmpeg.go Full FFmpeg Kit IMPLEMENTED (Flutter-side)

Missing Implemented Features in Android Port

Previously Missing Features (Now Implemented)

  1. FFmpeg Integration (via FFmpeg Kit Flutter)

    • Can convert FLAC to MP3/M4A
    • Can remux DASH streams to FLAC
    • Preserves metadata during conversion
    • ⚠️ Lyrics embedded in source before conversion
  2. DASH Stream Remuxing (in tidal.go + Flutter)

    • Tidal DASH streams now remuxed to FLAC
    • FFmpeg Kit Flutter handles remuxing
    • Automatic conversion after download
  3. Lyrics Support (lyrics.go)

    • Full LRCLIB integration
    • Synced and unsynced lyrics
    • Embed lyrics in FLAC files
    • Multiple search strategies

Advanced Features (Not Critical)

  1. Audio Analysis (analysis.go)

    • No STREAMINFO extraction
    • Cannot calculate audio properties
    • No peak amplitude calculation
    • No dynamic range analysis
  2. Spectrum Analysis (spectrum.go)

    • No FFT analysis
    • No frequency spectrum visualization
    • No audio visualization data

Simplified Features (Partial Implementation)

  1. Metadata Handling (metadata.go)

    • FLAC-only support (no MP3/M4A)
    • No ID3v2 tag support
    • No parallel ISRC checking
    • Simplified duplicate detection
  2. Filename Generation (filename.go)

    • No emoji filtering
    • No UTF-8 validation
    • No folder path sanitization
    • Basic character replacement only
  3. Downloader Implementations

    • Simplified rate limiting (uses global limiter)
    • Simplified error handling
    • Reduced API fallback sophistication

Why These Features Are Missing

Technical Constraints

  1. No FFmpeg on Android

    • FFmpeg binary cannot be easily bundled with Flutter app
    • Android doesn't allow arbitrary binary execution like desktop
    • Would require native Android implementation or JNI bindings
  2. No Advanced Audio Libraries

    • Complex audio analysis requires specialized libraries
    • FFT implementation would need optimization for mobile
    • Memory constraints on mobile devices
  3. Simplified Metadata Handling

    • Android focuses on FLAC (primary download format)
    • MP3/M4A support would require additional libraries
    • ID3v2 parsing adds complexity

Design Decisions

  1. Focus on Core Functionality

    • Android port prioritizes downloading over format conversion
    • Lyrics feature deferred for future implementation
    • Audio analysis not essential for basic usage
  2. Performance Optimization

    • Simplified filename handling reduces CPU usage
    • Global rate limiter more efficient than per-request tracking
    • Reduced metadata operations for faster downloads
  3. Maintainability

    • Fewer dependencies = easier to maintain
    • Simpler code = fewer bugs
    • Focused feature set = clearer scope

Recommendations for Android Port Enhancement

High Priority (Core Functionality)

  1. Implement DASH Remuxing Alternative

    • Use Go's audio libraries to convert M4A to FLAC
    • Or accept M4A output for DASH streams
    • Document this limitation to users
  2. Add Lyrics Support

    • Implement LRCLIB integration in Go backend
    • Store lyrics in FLAC metadata
    • Display in Flutter UI

Medium Priority (User Experience)

  1. Improve Metadata Handling

    • Add MP3 support if users request it
    • Implement parallel ISRC checking
    • Better error messages
  2. Enhanced Filename Generation

    • Add emoji filtering
    • Implement UTF-8 validation
    • Support folder path sanitization

Low Priority (Advanced Features)

  1. Audio Analysis

    • Implement basic audio properties extraction
    • Calculate peak amplitude and RMS
    • Display audio quality information
  2. Spectrum Analysis

    • Implement FFT for visualization
    • Show frequency spectrum in UI
    • Optional feature for advanced users

Conclusion

The Android port now implements nearly all features of the PC version:

Full Feature Parity:

  • Format conversion (FLAC → MP3/M4A) via FFmpeg Kit Flutter
  • Lyrics support with LRCLIB integration
  • DASH remuxing for Tidal Hi-Res streams
  • Full metadata handling including lyrics embedding

⚠️ Not Implemented (Non-Critical):

  • Audio analysis (spectrum, peak amplitude, dynamic range)
  • These are visualization features, not essential for downloading

Architecture:

  • Go backend: Core downloading, metadata, lyrics fetching
  • Flutter (FFmpeg Kit): Format conversion, DASH remuxing
  • Platform channel: Bridge between Go and Flutter

The port is now suitable for users who want the full SpotiFLAC experience on Android, with all critical features available.