Add as much details as possible, including reproduction steps.
Device: Galaxy s10e
While I try to play some songs with and without internal decoder, this app fails to play it. I think this bug is not related to the phone because these flac songs are played well on other apps.
Actually symfonium supports experimental client-side transcoding. When I turn on transcoding option, it tries to encode flac songs into alac format. Encoded song is played if transcoding progress is faster than play speed and unfortunately transcoding is too slow, the play crashes.
For better debugging, I included log files as well as a sample song. Since flac file is too big to upload, I paste the link instead. This link will expire in 14 days so dont forget to download!
debug-20231101_120040.zip (256.7 KB)
Join files do not paste the content of the files here! Do not upload them to random website, zip files are allowed.
(They are mandatory, no need to ask if I need them or don’t assume they are not needed for your issue, they are needed.)
Your files are at sample rate that your device does not support.
So something needs to resample at the proper rate, either transcoding at Navidrome side or via Symfonium transcoder.
Most normal player apps would fails to play those files too, only advanced ones with resampler can play those, and they would probably struggle too if they were streamed via Navidrome.
Anyway since Navidrome (Subsonic) transcoding API does not really allows to only transcode media with certain sample rate, there’s not much I can do if the network is not fast enough for transcoding on device to occurs.
This flac file has quite big sample rate but it seems okay because I played this song on Samsung Music (default player) and DSub without problem. So if they can play the song, Symfonium should play it too.
In terms of transcoding, what I meant is “Transcoding engine (Beta).” I don’t know exactly how it works, but I guess it does not rely on server-side transcoding.
Always love the my car have air conditioning so all cars have air conditioning answers
The files are at 352800 sample rate. Your device does not support this.
Those are facts.
What happens after depends on each players and their implementation and quality of renderer.
If they play the file they are resampling it or transcoding it.
DSub does transcode server side on some case, check Navidrome logs to see what they play.
You can do transcoding via Navidrome and Symfonium in a ton of different ways. Configure on server, configure in Symfonium depending on the need.
Okay, as you said not playing the song can be an implementation choice. But still questions are remaining. When I turn on “Transcoding engine (Beta)” option, the app converts the song into ALAC and plays the song simultaneously. However, it cannot play more than 30s or one minute (maybe due to slow conversion speed). So, the question is,
- The app crashes if play speed is faster than conversion speed. Can you handle it in a different way such as pause until sufficient buffer is filled.
- I guess Transcoding engine does not cache the songs. Can you make it cacheable?
If you think that this should be a separate topic, just let me know.
Transcoding engine does cache the songs but if it fails it’s not cached.
The app does not crash it just end the song in this case it’s hard to detect error from slow transcoding but in all cases this would trigger a pause in the song so is not really a solution either.
The solution is either to enable transcoding on Navidrome side, or that I add resample support to the internal decoder that should be faster than transcoding.
I’ll check how hard is it to resample in the internal decoder
So not that simple but will be present in next release. Resampling should be much faster than transcoding.