[TIP] Hi-Res Audio for Android devices
Posted: Sun Oct 08, 2017 4:29 pm
Since 1.97.0 version Neutron supports Hi-Res Audio output to the mobile devices which support it and have dedicated on-board DAC (ESS, XMOS, Qualcomm, ...) for Hi-Res Audio. The Hi-Res Audio must be supported by firmware of course. Minimum Android OS version is 4.4.
To make sure you have guaranteed Hi-Res Audio output (if device supports it) there are number of prerequisites in Neutron's settings -> Audio Hardware:
1) Generic Driver = ON
2) Generic Driver -> Hi-Res Codec = ON
3) Generic Driver -> Hi-Res Speaker = ON
4) DSP Effect (Device) = OFF
5) Low Latency = OFF
6) 32-bit Output (IEEE 754) = OFF
The easiest approach is just to reset all settings of Audio Hardware section to default (middle Undo button in the bottom of dialog).
Offloading Hi-Res Audio via Device Hardware Codec
Since 1.97.2 offloading via internal hw codec is switched off by default due to many buggy firmwares/devices (HTC 10, ...) but it can be switched on by Generic Driver -> Hi-Fi Codec.
Custom Format [tweaking]
Since 1.97.2 you can try to force system output format if Neutron could not recognize any hi-res audio output and provides basic format and you absolutely sure that device is capable of hi-res output you could try making custom format. For that you have Generic Driver -> Custom Format option which must be activated and if you tap on panel you can setup the following: sample format, frequencies, system flags. Never try setting it if you are not sure what you are doing, it is only for EXPERT use! Once custom format is configured start playback, access Audio Hardware dialog and tap on info panel with Channels, Frequency, ... to see real output format which is used by device, if it is not the format you set then your custom format does not work.
How to check Hi-Res Audio is available
If you wish to to know whether your device has Hi-Res Audio support just access Audio Hardware -> Frequency section. Hi-Res Audio capable devices will have multiple frequencies listed, Bits field will show 24 or 8.24 or 32 in [out: X] placeholder. Additionally you can tap on a panel with Channels, Bits in Audio Hardware and see the current audio output format. If all audio devices indicate 'closed' during playback then it is a sign of Hi-Res Audio as well.
Hi-Res Audio output to the Speaker
By default Hi-Res Audio is disabled for the built-in speaker due to some buggy firmwares, but if you wish to try to enable it tap on Generic Driver and switch on Hi-Res Speaker option. It will sound the same but will save CPU/battery if you have hi-res music files due to absence of re-sampling if Follow Source Frequency option is switched on.
OpenSL ES
OpenSL ES driver is considered obsolete since 1.97.0 due to its low capabilities and format limitation. To have its old behavior in case your device does not support Hi-Res Audio but firmware is buggy and device has not satisfactory audio output if audio is going via Android's deep-buffer internal mixer then just enable Low Latency option and you will get the same quality back. For Hi-Res Audio devices it is of course not needed and will limit to a single output frequency!
Device Effects compatibility with Hi-Res Audio
If DSP Effect (Device) is enabled it can break Hi-Res Audio output because some device effects do not support it and firmware will fallback to a standard format. To be sure that you have Hi-Res Audio output and you still want to have DSP Effect (Device) switched on - check the real audio device output format as described above.
There are no known devices which support Hi-Res Audio output with 32-bit floating point format and thus make sure 32-bit Output (IEEE 754) is switched off, or if you feel that firmware still allows Hi-Res Audio with this format then double check the real audio device output format as described above.
Low Latency compatibility with Hi-Res Audio
Low Latency always limits device to a single output frequency, so it must be switched off if you want Hi-Res Audio.
To make sure you have guaranteed Hi-Res Audio output (if device supports it) there are number of prerequisites in Neutron's settings -> Audio Hardware:
1) Generic Driver = ON
2) Generic Driver -> Hi-Res Codec = ON
3) Generic Driver -> Hi-Res Speaker = ON
4) DSP Effect (Device) = OFF
5) Low Latency = OFF
6) 32-bit Output (IEEE 754) = OFF
The easiest approach is just to reset all settings of Audio Hardware section to default (middle Undo button in the bottom of dialog).
Offloading Hi-Res Audio via Device Hardware Codec
Since 1.97.2 offloading via internal hw codec is switched off by default due to many buggy firmwares/devices (HTC 10, ...) but it can be switched on by Generic Driver -> Hi-Fi Codec.
Custom Format [tweaking]
Since 1.97.2 you can try to force system output format if Neutron could not recognize any hi-res audio output and provides basic format and you absolutely sure that device is capable of hi-res output you could try making custom format. For that you have Generic Driver -> Custom Format option which must be activated and if you tap on panel you can setup the following: sample format, frequencies, system flags. Never try setting it if you are not sure what you are doing, it is only for EXPERT use! Once custom format is configured start playback, access Audio Hardware dialog and tap on info panel with Channels, Frequency, ... to see real output format which is used by device, if it is not the format you set then your custom format does not work.
How to check Hi-Res Audio is available
If you wish to to know whether your device has Hi-Res Audio support just access Audio Hardware -> Frequency section. Hi-Res Audio capable devices will have multiple frequencies listed, Bits field will show 24 or 8.24 or 32 in [out: X] placeholder. Additionally you can tap on a panel with Channels, Bits in Audio Hardware and see the current audio output format. If all audio devices indicate 'closed' during playback then it is a sign of Hi-Res Audio as well.
Hi-Res Audio output to the Speaker
By default Hi-Res Audio is disabled for the built-in speaker due to some buggy firmwares, but if you wish to try to enable it tap on Generic Driver and switch on Hi-Res Speaker option. It will sound the same but will save CPU/battery if you have hi-res music files due to absence of re-sampling if Follow Source Frequency option is switched on.
OpenSL ES
OpenSL ES driver is considered obsolete since 1.97.0 due to its low capabilities and format limitation. To have its old behavior in case your device does not support Hi-Res Audio but firmware is buggy and device has not satisfactory audio output if audio is going via Android's deep-buffer internal mixer then just enable Low Latency option and you will get the same quality back. For Hi-Res Audio devices it is of course not needed and will limit to a single output frequency!
Device Effects compatibility with Hi-Res Audio
If DSP Effect (Device) is enabled it can break Hi-Res Audio output because some device effects do not support it and firmware will fallback to a standard format. To be sure that you have Hi-Res Audio output and you still want to have DSP Effect (Device) switched on - check the real audio device output format as described above.
There are no known devices which support Hi-Res Audio output with 32-bit floating point format and thus make sure 32-bit Output (IEEE 754) is switched off, or if you feel that firmware still allows Hi-Res Audio with this format then double check the real audio device output format as described above.
Low Latency compatibility with Hi-Res Audio
Low Latency always limits device to a single output frequency, so it must be switched off if you want Hi-Res Audio.