[LG V40 Guides, News, & Discussion] TheDannemand:
Well, as I wrote in my post, the way they do it (speaking of UAPP and Neutron) is by NOT playing 16/44, but converting it on the fly to 24/44, a simple and harmless process that doesn't involve interpolation. That avoids the Android Mixer and upsampling to 48KHz.

All music apps I've tested, including dumb ones like Google Play Music, play 24-bit music of any sample rate correctly, through the Direct path and with the offloadable flag, as verified by inspecting audio_flinger dumps. See example in the Show Content section below.

Have you verified that PowerAmp does the same? Lots of people rave about PowerAmp for its ability to "improve" their music (EQ, up-sampling etc). But what audiophiles care most about is whether it can play bit-perfect, unmolested directly to the DAC.

All my tests are based on V30 with Nougat and Oreo. I cannot speak to V35 or Android Pie, since we don't have that for V30 yet.

On rooted devices, are you saying there are ways to avoid upsampling of 16/44, other than using UAPP/Neutron? Ways that verifiably work on V30/V35/V40/G7? If so, I would love to know about them. And so would a lot of other audiophile V30 users.

Thank you in advance.

Google Play Music 24/44 audio_flinger dump. Note DIRECT path, Sample Rate and offloadable flag.

Output thread 0xed9ad000, name AudioOut_6D, tid 4751, type 1 (DIRECT):
I/O handle: 109
Standby: no
Sample rate: 44100 Hz
HAL frame count: 1792
HAL format: 0x6 (AUDIO_FORMAT_PCM_24_BIT_PACKED)
HAL buffer size: 10752 bytes
Channel count: 2
Channel mask: 0x00000003 (front-left, front-right)
Processing format: 0x6 (AUDIO_FORMAT_PCM_24_BIT_PACKED)
Processing frame size: 6 bytes
Pending config events: none
Output device: 0x8 (AUDIO_DEVICE_OUT_WIRED_HEADPHONE)
Input device: 0 (AUDIO_DEVICE_NONE)
Audio source: 0 (default)
Normal frame count: 1792
Last write occurred (msecs): 37
Total writes: 1026
Delayed writes: 0
Blocked in write: yes
Suspend count: 0
Sink buffer : 0xed9c1000
Mixer buffer: 0xed9df000
Effect buffer: 0xed916000
Fast track availMask=0xfe
Standby delay ns=1000000000
AudioStreamOut: 0xeff8e000 flags 0x1 (AUDIO_OUTPUT_FLAG_DIRECT)
Frames written: 1838592
Suspended frames: 0
Hal stream dump:
Stream volumes in dB: 0:-10, 1:-20, 2:-23, 3:-14, 4:-23, 5:-23, 6:0, 7:-18, 8:-22, 9:-96, 10:-21, 11:0, 12:0
Normal mixer raw underrun counters: partial=0 empty=0
1 Tracks of which 1 are active
Name Active Client Type Fmt Chn mask Session fCount S F SRate L dB R dB VS dB Server Main buf Aux buf Flags UndFrmCnt Flushed
none yes 4305 3 00000006 00000003 129 22932 A 3 44100 0 0 0 001C1500 ED916000 00000000 0x000 0 0
1 Effect Chains
1 effects for session 129
In buffer Out buffer Active tracks:
0xed916000 -> 0xf30b2000 0xf30b2000 -> 0xed916000 1
Effect ID 147:
Session Status State Engine:
00129 000 003 0xf17203e0
Descriptor:
- UUID: 08B8B058-0590-11E5-AC71-0025B32654A0
- TYPE: 08B8B058-0590-11E5-AC71-0025B32654A0
- apiVersion: EF503600
- flags: 00C00280 (conn. mode: insert, insert pref: any, volume mgmt: requires indication, device indication: requires updates, input mode: not set, output mode: not set, offloadable)
- name: Volume listener for Music
- implementor: Qualcomm Technologies Inc.
- Input configuration:
Frames Smp rate Channels Format Buffer
01792 44100 00000003 1 (AUDIO_FORMAT_PCM_16_BIT) 0xf30b2000
- Output configuration:
Buffer Frames Smp rate Channels Format
0xf30b2000 01792 44100 00000003 1 (AUDIO_FORMAT_PCM_16_BIT)
1 Clients:
Pid Priority Ctrl Locked client server
1235 0 yes yes 0 0
Local log:
02-10 13:58:52.567 CFG_EVENT_CREATE_AUDIO_PATCH: old device 0x8 (AUDIO_DEVICE_OUT_WIRED_HEADPHONE) new device 0x8 (AUDIO_DEVICE_OUT_WIRED_HEADPHONE)
02-10 13:58:52.576 addTrack_l (0xeea28d80) none no 4305 3 00000006 00000003 129 22932 A 1 44100 0 0 0 00000000 ED916000 00000000 0x000 0 0

USB audio module:
No output streams.

No input streams.

Reroute submix audio module:
route[0] rate in=0 out=0, addr=[]
route[1] rate in=0 out=0, addr=[]
route[2] rate in=0 out=0, addr=[]
route[3] rate in=0 out=0, addr=[]
route[4] rate in=0 out=0, addr=[]
route[5] rate in=0 out=0, addr=[]
route[6] rate in=0 out=0, addr=[]
route[7] rate in=0 out=0, addr=[]
route[8] rate in=0 out=0, addr=[]
route[9] rate in=48000 out=48000, addr=[]