But that leads to the question of why LG chose to do this? I do NOT believe that they were simply too stupid or they didn't care about audio quality.
I wish I could be that optimistic
But I suspect you hit the nail squarely on the head here. I've had many communications with Dmitry (Neutron dev) over the past couple of years about this oversight. It seems there was an unfortunate confluence of events here. 1) LG not even realizing what was going on 2) Google choosing to use 48 kHz as the default sample rate. (That was utter stupidity, given that 99% of all current music is sampled at 44.1 kHz.) 3) The DAC chip LG chose *may* not have native 16-bit support, but that shouldn't actually matter because this
can be controlled via API calls, e.g., those that Neutron uses to force the DAC to bit pad:
uint16_t sample = xxxx;
uint24_t dac_sample = (uint24_t)sample << 16;
This is, for sure, done
inside the DAC (it expands to 24 bits and then does voltage modulation to produce the analog signal), not in Neutron. (UAPP ended up doing the same thing Neutron does, so kudos to Dmitry for being the first to figure this out.)
Neutron uses the AudioTrack API directly, which is loaded dynamically (using private functions which aren't used by most Android apps). This API sets format flags which force the audio system to the desired frequency. The fact that LG didn't even think to do this
inside their own music player is a bit worrying. I thought for one brief moment we might be able to fix this system-wide via root, but I'm increasingly pessimistic about that now. It seems it simply can't be done via the xml config files
I have a feeling that this will change when we get the Android Pie update. With the audio improvements in Android 8 and 9, AND LG maybe taking inspiration from UAPP and Neutron, I think they may just get it right this time.
You should bottle your optimism and sell it
I'd bet money that Android Pie and the V50 will have the exact same problem.