🎉 live server seems to be working now
This commit is contained in:
147
third_party/sendspin-go/docs/MA_HIRES_ISSUE.md
vendored
Normal file
147
third_party/sendspin-go/docs/MA_HIRES_ISSUE.md
vendored
Normal file
@@ -0,0 +1,147 @@
|
||||
# Music Assistant Hi-Res Issue
|
||||
|
||||
## Problem
|
||||
Music Assistant shows "signal degraded" and only displays 44.1kHz/16bit and 48kHz/16bit as supported formats, even though our player advertises full hi-res capabilities (up to 192kHz/24bit).
|
||||
|
||||
## What We're Advertising
|
||||
Our player sends comprehensive capabilities in `client/hello`:
|
||||
|
||||
```json
|
||||
{
|
||||
"support_formats": [
|
||||
{"codec": "pcm", "channels": 2, "sample_rate": 192000, "bit_depth": 24},
|
||||
{"codec": "pcm", "channels": 2, "sample_rate": 176400, "bit_depth": 24},
|
||||
{"codec": "pcm", "channels": 2, "sample_rate": 96000, "bit_depth": 24},
|
||||
{"codec": "pcm", "channels": 2, "sample_rate": 88200, "bit_depth": 24},
|
||||
{"codec": "pcm", "channels": 2, "sample_rate": 48000, "bit_depth": 16},
|
||||
{"codec": "pcm", "channels": 2, "sample_rate": 44100, "bit_depth": 16},
|
||||
{"codec": "opus", "channels": 2, "sample_rate": 48000, "bit_depth": 16}
|
||||
],
|
||||
"support_codecs": ["pcm", "opus"],
|
||||
"support_sample_rates": [192000, 176400, 96000, 88200, 48000, 44100],
|
||||
"support_bit_depth": [24, 16]
|
||||
}
|
||||
```
|
||||
|
||||
Both new-style (`support_formats`) and legacy-style (separate arrays) are provided for maximum compatibility.
|
||||
|
||||
## Verification
|
||||
When connecting directly to our own resonate-go server:
|
||||
- ✅ Server correctly negotiates 192kHz/24bit PCM
|
||||
- ✅ Player receives and plays hi-res audio
|
||||
- ✅ Format negotiation works as expected
|
||||
|
||||
This proves our implementation is correct.
|
||||
|
||||
## Possible Causes
|
||||
|
||||
### 1. MA's Resonate Provider Has Hardcoded Limits
|
||||
Music Assistant's built-in Resonate provider might have:
|
||||
- Hardcoded maximum sample rate (48kHz)
|
||||
- Hardcoded bit depth (16-bit)
|
||||
- Safety filters that only expose "known good" formats
|
||||
|
||||
### 2. MA Filters Based on What It Can Provide
|
||||
MA might be filtering player capabilities based on what formats MA itself can deliver:
|
||||
- If MA's audio pipeline doesn't support >48kHz, it hides those options
|
||||
- If MA's source doesn't have hi-res, it might not show hi-res player caps
|
||||
|
||||
### 3. MA Version Limitations
|
||||
Older versions of Music Assistant might not support hi-res audio at all, regardless of player capabilities.
|
||||
|
||||
### 4. Protocol Parsing Bug
|
||||
MA's Resonate provider might have a bug in how it parses capabilities:
|
||||
- Might only look at legacy arrays and misinterpret them
|
||||
- Might do AND logic instead of OR (only showing common formats)
|
||||
- Might not understand the newer `support_formats` array
|
||||
|
||||
## Debugging Steps
|
||||
|
||||
### 1. Check MA Logs
|
||||
Look for player connection logs:
|
||||
```bash
|
||||
# In Music Assistant logs, search for:
|
||||
- "Resonate player connected"
|
||||
- "Player capabilities"
|
||||
- Your player name
|
||||
```
|
||||
|
||||
### 2. Check MA Version
|
||||
- Go to Settings → Info
|
||||
- Check Music Assistant version
|
||||
- Check if there are Resonate provider updates
|
||||
|
||||
### 3. Test Direct Connection
|
||||
Compare behavior:
|
||||
```bash
|
||||
# Direct to our server (should work)
|
||||
./resonate-server -debug -no-tui
|
||||
./resonate-player -server localhost:8927 -name "test"
|
||||
# Should see: "Stream starting: pcm 192000Hz 2ch 24bit"
|
||||
|
||||
# Through MA (shows degraded)
|
||||
# Connect player to MA
|
||||
# Check what format MA sends
|
||||
```
|
||||
|
||||
### 4. Check MA Settings
|
||||
- Settings → Providers → Resonate
|
||||
- Look for any sample rate or quality limitations
|
||||
- Check if there's a "max quality" or "sample rate" setting
|
||||
|
||||
## Workarounds
|
||||
|
||||
### Option 1: Use Direct Connection
|
||||
Skip Music Assistant and connect directly to our server:
|
||||
```bash
|
||||
./resonate-server -audio /path/to/hires.flac
|
||||
./resonate-player -server <server-ip>:8927
|
||||
```
|
||||
|
||||
### Option 2: Request MA Enhancement
|
||||
File an issue with Music Assistant to:
|
||||
- Support hi-res audio (>48kHz)
|
||||
- Properly parse player hi-res capabilities
|
||||
- Update Resonate provider
|
||||
|
||||
### Option 3: Custom MA Provider
|
||||
Create a custom Resonate provider for MA that:
|
||||
- Properly reads player capabilities
|
||||
- Doesn't filter hi-res formats
|
||||
- Passes through native sample rates
|
||||
|
||||
## Expected vs. Actual
|
||||
|
||||
### Expected (Direct Connection)
|
||||
```
|
||||
Player advertises: 192kHz/24bit capable
|
||||
Server provides: 192kHz/24bit source
|
||||
Negotiation: Match! Use PCM 192kHz/24bit
|
||||
Result: ✅ Hi-res audio delivered
|
||||
```
|
||||
|
||||
### Actual (Through MA)
|
||||
```
|
||||
Player advertises: 192kHz/24bit capable
|
||||
MA sees: Only 44.1kHz/16bit, 48kHz/16bit ???
|
||||
MA sends: 48kHz/16bit (downsampled)
|
||||
Result: ❌ "Signal degraded" warning
|
||||
```
|
||||
|
||||
## Conclusion
|
||||
|
||||
**Our player implementation is correct.** The issue is in Music Assistant's Resonate provider, which is not properly recognizing or supporting hi-res capabilities.
|
||||
|
||||
**Next Steps:**
|
||||
1. Get MA logs to confirm where filtering happens
|
||||
2. Check MA version and update if needed
|
||||
3. Consider filing MA enhancement request
|
||||
4. For now, use direct connection for hi-res audio
|
||||
|
||||
## Testing MA Compatibility
|
||||
If you want to ensure our player works with MA's current limitations, we could add a "compatibility mode" that:
|
||||
- Only advertises 48kHz/16bit
|
||||
- Disables hi-res formats
|
||||
- Forces lowest common denominator
|
||||
|
||||
But this defeats the purpose of building a hi-res player! Better to fix MA or use direct connections.
|
||||
Reference in New Issue
Block a user