I understand the risks involved with it but is there a cable to force full high impedance?
That I don't know. This one does all I need.
I understand the risks involved with it but is there a cable to force full high impedance?
I understand the risks involved with it but is there a cable to force full high impedance?
But it doesn't recognize cue filesLg stock music player has best pre audio tunnings ever no competition with poweramp etc etc
Lg stock music player has best pre audio tunnings ever no competition with poweramp etc etc
For audiophiles looking for the most faithful reproduction of the recorded sound (as opposed to the "best tuned" sound) both LG Music and PowerAmp come up short, since neither of them are able to bypass up-sampling to 48Khz when playing Redbook 16/44 tracks (anything CD quality).
LG Music does a great job indeed, and faithfully plays any HiRes tracks (or anything 24-bit) using the Direct path to the Quad DAC. It also plays MQA files correctly.
But when playing 16/44 tracks, it uses the Mixer path, causing them to be up-sampled to 48Khz before being sent to the DAC. In most cases, this up-sampling isn't horrible, and in fact many people would never notice it. But to the trained ear, and with sensitive IEMs (such as ones using Balanced Armature drivers) it can cause a noticeable hiss and other artifacts. And even knowing that it occurs is offensive to audiophiles, who use the V30 for the otherwise excellent performance of its ESS Sabre 9218P DAC.
Almost all music apps do the same, simply because LGs implementation of the DAC (or its driver) doesn't accept 16/44 directly. You can check this for a given app by inspecting a dumpsys of audio_flinger captured during playback.
The only apps confirmed to bypass the Android Mixer when playing 16/44 (again, anything CD quality) are UAPP and Neutron. They have dedicated support for V30, and convert 16/44 to 24/44 on the fly (a harmless conversion that just adds zero-bits) in order to bypass the Mixer.
They are also excellent player apps in almost every other way. I personally do not like Neutron's UI, but I love UAPP, which also supports streaming from Qobuz and Tidal (with full hardware MQA decoding and rendering on V30/V35/G7/V40).
Read more about this in the head-fi thread linked below:
https://www.head-fi.org/threads/music-apps-tips-and-tricks-for-the-lg-v30.868978/
As for tuning... well, you select headphones or IEMs that have the sound signature you like, which of course will depend on your type of music and your personal preference.
As I know, without rooting and modifying the system, the direct PCM mode will only play 16 /48 output even in audio policy show it can play 44,1.
Currently, I am using LG V35 with android 9 and UAPP seems not work in Direct Mode.
With Poweramp and Neutron it show output correctly for Hi-res and 16/44,1 (I assume that is on offload mode).
I am not sure how these app can play bypass audioflinger. Anyone knows what API they are using? It must be not base on ALSA because it does not need root access.
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=[]
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 below (I thought we had spoiler tags on XDA, but I guess not).
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.
Code: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=[]
I understand now. You can see here in the file audio_io_policy.conf and know why they can oly play 16/48 .
About Poweramp, yes, it will convert to 24/44,1 to play 16/44,1 source also (in Hi-res output option)
I have no root access for V35 now so I did not test on it. But I used alsaplayer before for V10, Vibe X3 and it can play 16/44,1 well without touching audioflinger. You can check it here: https://xdaforums.com/general/general/hi-fi-playback-android-developers-t3011925
Thank you for confirming about Poweramp. Were you able to verify it by inspecting audio_flinger dumps (not just trusting settings menus in the app)?
No doubt policy is what forces 16/48. But I know others with rooted V30 spent considerable time experimenting with audio_io_policy.conf modifications without being able to make it play 16/44 Direct/offloadable. Personally I think because the codec driver doesn't implement it.
When you mentioned other solutions on rooted phones, I was hoping you meant system-wide solutions, not just another app. We've already had UAPP and Neutron for ~1.5 years supporting it through 24/44. And now possibly Poweramp too, if confirmed. So we're covered there.
A common issue for audiophile V30/V35/V40/G7 users is upsampling in Tidal: The Tidal app is perfect when playing Master tracks (MQA/HiRes) which are 4x unfolded and rendered beautifully in hardware on V30. But most of Tidal's catalog is non-Master 16/44 tracks, which are upsampled when played in the Tidal app. You can avoid that by streaming Tidal with UAPP, but not Tidal offline -- for that you have to use their app.
Others want to use Spotify or Google Play Music or some other service, although audiophiles are more focused on Tidal and Qobuz because of the higher sound quality.
So if you have suggestions for how to address this system-wide on rooted phones, I am very interested. So far my conclusion is we need a modified audio_flinger which converts 16/44 to 24/44 on the fly instead of passing it through the Mixer for upsampling. But I hope I am wrong, that it can be done with policy tweaks after all.
I 've just came back to V35 for 3 days without rooting access so not enough time to research many things.
My experience with Vibe X3, LG V10 before with Poweramp (from their alpha version) with checking the mixer path, dumping file, alsa output status... and I can confirm that Poweramp show correctly what they did. With LG V35, sometime it turn off HIFI Mode(don't know why, you can check it by switching On/Off to here the interuption) and Poweramp will show that it will play at 16/48 output.
Changing *.conf file never give the result, because the parameter is setup in source code file. I have to use ALSA or tinyalsa to check because with Vibe X3, I can check the kernel source code and it 's not the problem in kernel level. We only can do it if anyone can rebuild the audioflinger, so we need the whole system source code. I don't think LG will public it.
I checked this on G6 file.
direct_pcm_16 {
flags AUDIO_OUTPUT_FLAG_DIRECT
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
sampling_rates 44100|48000|88200|96000|176400|192000
bit_width 16
app_type 69936
}
Can you check it build.prog if this option is disable?
I have no idea with Tidal for 16/44,1 file or we can ask Tidal to convert it to 24 bits for us.
Mixer path is a good solution when we want to route the signal to Hi-res path, but this is not for everyone. It will not work for commercial app like Neutron,UAPP and that's why I tested it with ALSA Player.
About ALSA player,no..it's not a real player..it's just for researching.
#define ES9218_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | \
SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | \
SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 | \
SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_384000 ) //|SNDRV_PCM_RATE_352800 TODO for dop128
#define ES9218_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE | \
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3BE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE | \
SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE)
...
static struct snd_soc_dai_driver es9218_dai[] = {
{
.name = "es9218-hifi",
.playback = {
.stream_name = "Playback",
.channels_min = 2,
.channels_max = 2,
.rates = ES9218_RATES,
.formats = ES9218_FORMATS,
},
.capture = {
.stream_name = "Capture",
.channels_min = 2,
.channels_max = 2,
.rates = ES9218_RATES,
.formats = ES9218_FORMATS,
},
.ops = &es9218_dai_ops,
},
};
direct_pcm_16 {
flags AUDIO_OUTPUT_FLAG_DIRECT|AUDIO_OUTPUT_FLAG_DIRECT_PCM
formats AUDIO_FORMAT_PCM_16_BIT|AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
sampling_rates 44100|48000|96000|192000
bit_width 16
app_type 69936
}
<mixPort name="direct_pcm" role="source"
flags="AUDIO_OUTPUT_FLAG_DIRECT">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000,11025,16000,22050,32000,44100,48000,64000,88200,96000,128000,176400,192000"
channelMasks="AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_PCM_8_24_BIT"
samplingRates="8000,11025,16000,22050,32000,44100,48000,64000,88200,96000,128000,176400,192000,352800"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
<profile name="" format="AUDIO_FORMAT_PCM_24_BIT_PACKED"
samplingRates="8000,11025,16000,22050,32000,44100,48000,64000,88200,96000,128000,176400,192000,352800"
channelMasks="AUDIO_CHANNEL_OUT_MONO,AUDIO_CHANNEL_OUT_STEREO,AUDIO_CHANNEL_OUT_2POINT1,AUDIO_CHANNEL_OUT_QUAD,AUDIO_CHANNEL_OUT_PENTA,AUDIO_CHANNEL_OUT_5POINT1,AUDIO_CHANNEL_OUT_6POINT1,AUDIO_CHANNEL_OUT_7POINT1"/>
Wow ok this thread has been a read. Just trying to learn tricks with my g8. Is this info applicable? And I wanted to clarify because a lot of this info was crazy thorough and went over my head. With tidal, it will upsample non mqa tracks? And when playing outside of tidal (I use the lg player), all is well? Plays as the source file intends? Sorry, you may need to dumb it down for me, new to all this.
Edit: just found uapp on playstore. Is it worth getting? So tidal would stream via there vs my tidal app? Also, im not rooted or anything
I apologize for derailing the thread a bit: While the discussion about how to avoid up-sampling is quite relevant to the thread topic, it is arguably better suited for a separate thread.
To sum it up and answer your questions:
1) The Tidal app plays all Master/MQA tracks perfectly and fully decoded + rendered using the Quad DAC, both streaming and downloaded/offline.
2) The Tidal app plays all non-Master/MQA tracks (ie all CD quality 16/44 tracks) through the Android Mixer, which up-samples to 48Khz, hurting quality somewhat.
3) UAPP plays EVERYTHING correctly (assuming correct settings) both 16/44, HiRes and MQA, regardless of source (local files, Tidal, Qobuz, etc). To me that $8 purchase is a no-brainer for anyone concerned about sound quality. You do NOT have to purchase UAPPs MQA decoder, as it uses the Quad DACs hardware MQA. Unfortunately UAPP does not support Tidal offline, you have to use the Tidal app for that.
4) Most other apps, including LG Music, Spotify, Google Play Music etc, ALL play HiRes files correctly -- in fact, anything 24-bit. And they ALL play 16/44 through the Mixer (up-sampling) including CD quality Flac, MP3, etc. Someone posted somewhere that AAC files don't up-sample, which is interesting, if true.
That's all I have time for now. There are more myths to clear up, particularly about High Impedance Mode, but that will have to wait.
Thanks for the detailed info ! I got uapp, and also got the mqa enhancement because I didnt know what I was doing. Is it "harming" anything or is it just something added that I didnt require?
Can you sanity check my uapp settings?
-Bit perfect mode is on (as opposed to when possible)
-Hi res driver audio format is set to auto
-Hi res driver flags untouched since it said the phone should know what to do.
-Upsample off.
Something else I was curious about was even though I'm "direct" as the app says, I can still use the lg equalizer in sound options. Shouldnt I not be able to mess with those settings? Or does that mean I'm not direct after all?
Thank you for all your advice. I followed it and purchased the Poweramp. However, I couldn't find the output setting which can enable the quad DAC.
I also went to your download link but the file is no longer available.
Please show me further if you are still available in this forum.