Hey everyone! Hope you’re all doing well.
After trying several custom strings shared in this forum, I noticed a common problem: AAC files were being displayed as Lossless, which is incorrect. AAC is always a lossy format regardless of bit depth. I listen to music directly from my device using local files, so I’m not sure if this issue also affects users streaming from servers — but it’s worth checking if you’re in the same situation.
So I built this chain with the help of Claude AI, since I wouldn’t have been able to put it together on my own. It’s based entirely on codec + bitrate/samplerate, not bit depth, to avoid that confusion.
Logic applied:
Dolby Atmos → EC3 or AC4 codec with more than 2 channels
Hi-Res Lossless → FLAC or ALAC with sample rate above 48 kHz
Lossless → FLAC or ALAC with sample rate at or below 48 kHz
MP3 High Quality → above 310 kbps
MP3 Medium Quality → 130–310 kbps
MP3 Low Quality → below 130 kbps
AAC High Quality → above 250 kbps
AAC Medium Quality → 64–250 kbps
AAC Low Quality → below 64 kbps
OPUS High Quality → above 127 kbps
OPUS Medium Quality → 96–127 kbps
OPUS Low Quality → below 96 kbps
This way lossy formats (MP3, AAC, OPUS) will never appear as Lossless, and FLAC/ALAC are correctly separated between Lossless and Hi-Res Lossless based on sample rate.
The string is formatted with \t to display the quality label centered between playback position and remaining time, just like Apple Music.
CUSTOM STRING:
%player.position%\t{Dolby Atmos%|format.channels>“2”&&format.codec+=“EC3”%}{Dolby Atmos%|format.channels>“2”&&format.codec+=“AC4”%}{Hi-Res Lossless%|format.codec+=“FLAC” && format.samplerate>“48”%}{Hi-Res Lossless%|format.codec+=“ALAC” && format.samplerate>“48”%}{Lossless%|format.codec+=“FLAC” && format.samplerate<“49”%}{Lossless%|format.codec+=“ALAC” && format.samplerate<“49”%}{High Quality%|format.codec+=“MP3” && format.bitrate>“310”%}{High Quality%|format.codec+=“AAC” && format.bitrate>“250”%}{High Quality%|format.codec+=“OPUS” && format.bitrate>“127”%}{Medium Quality%|format.codec+=“MP3” && format.bitrate[]“130”..“310”%}{Medium Quality%|format.codec+=“AAC” && format.bitrate[]“64”..“250”%}{Medium Quality%|format.codec+=“OPUS” && format.bitrate[]“96”..“127”%}{Low Quality%|format.codec+=“MP3” && format.bitrate<“130”%}{Low Quality%|format.codec+=“AAC” && format.bitrate<“64”%}{Low Quality%|format.codec+=“OPUS” && format.bitrate<“96”%}\t%player.remaining%
Note: Dolby Atmos detection is approximate since Symfonium doesn’t expose a dedicated Atmos field — it uses channel count + codec as an indicator. If anyone has Atmos files and can confirm the exact codec string reported, feedback is welcome!
Hope this helps someone else with the same issue ![]()






