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)
4. SONGLINK.GO - Track Availability Checker
| 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)
-
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
-
DASH Stream Remuxing (in tidal.go + Flutter)
- ✅ Tidal DASH streams now remuxed to FLAC
- ✅ FFmpeg Kit Flutter handles remuxing
- ✅ Automatic conversion after download
-
Lyrics Support (lyrics.go)
- ✅ Full LRCLIB integration
- ✅ Synced and unsynced lyrics
- ✅ Embed lyrics in FLAC files
- ✅ Multiple search strategies
Advanced Features (Not Critical)
-
Audio Analysis (analysis.go)
- No STREAMINFO extraction
- Cannot calculate audio properties
- No peak amplitude calculation
- No dynamic range analysis
-
Spectrum Analysis (spectrum.go)
- No FFT analysis
- No frequency spectrum visualization
- No audio visualization data
Simplified Features (Partial Implementation)
-
Metadata Handling (metadata.go)
- FLAC-only support (no MP3/M4A)
- No ID3v2 tag support
- No parallel ISRC checking
- Simplified duplicate detection
-
Filename Generation (filename.go)
- No emoji filtering
- No UTF-8 validation
- No folder path sanitization
- Basic character replacement only
-
Downloader Implementations
- Simplified rate limiting (uses global limiter)
- Simplified error handling
- Reduced API fallback sophistication
Why These Features Are Missing
Technical Constraints
-
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
-
No Advanced Audio Libraries
- Complex audio analysis requires specialized libraries
- FFT implementation would need optimization for mobile
- Memory constraints on mobile devices
-
Simplified Metadata Handling
- Android focuses on FLAC (primary download format)
- MP3/M4A support would require additional libraries
- ID3v2 parsing adds complexity
Design Decisions
-
Focus on Core Functionality
- Android port prioritizes downloading over format conversion
- Lyrics feature deferred for future implementation
- Audio analysis not essential for basic usage
-
Performance Optimization
- Simplified filename handling reduces CPU usage
- Global rate limiter more efficient than per-request tracking
- Reduced metadata operations for faster downloads
-
Maintainability
- Fewer dependencies = easier to maintain
- Simpler code = fewer bugs
- Focused feature set = clearer scope
Recommendations for Android Port Enhancement
High Priority (Core Functionality)
-
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
-
Add Lyrics Support
- Implement LRCLIB integration in Go backend
- Store lyrics in FLAC metadata
- Display in Flutter UI
Medium Priority (User Experience)
-
Improve Metadata Handling
- Add MP3 support if users request it
- Implement parallel ISRC checking
- Better error messages
-
Enhanced Filename Generation
- Add emoji filtering
- Implement UTF-8 validation
- Support folder path sanitization
Low Priority (Advanced Features)
-
Audio Analysis
- Implement basic audio properties extraction
- Calculate peak amplitude and RMS
- Display audio quality information
-
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.