Hires direct driver in USB Audio Player PRO
What is it?
Many recent high-end Android phones come equipped with a high quality audio chip. However, this chip is usually not available to third-party apps and can only be accessed by the media player that comes with the phone, or when it works, it works only at a fixed rate of 44100 or 48000Hz. The HiRes direct driver in USB Audio Player PRO tries to work around that problem by accessing a so-called 'direct' audio path of the Android audio system. Using this direct path, audio can be passed to the chip in 24-bit at all the sample rates that the chip supports, without resampling or other audio degrading 'features' of Android.
Note that this direct driver is used with the internal audio of the phone in combination with headphones connected to the phone directly and is completely unrelated to the situation where you would use our USB audio driver in combination with a USB DAC.
How do I use it?
Since UAPP v4, you can choose which driver to use: the standard Android audio driver or the HiRes direct driver. For 'known' devices you will be asked on start-up if you want to use the HiRes driver (this is asked only once of course and your selection is remembered). If your device is not recognized as having a HiRes audio chip, pull out the navigation bar from the left and select Settings. Choose the 'Internal audio driver' option and select the HiRes driver. For many phones, this is enough. If your phone is not in the compatibility list below, but you are certain that your phone contains a high quality audio chip, you could just try it out, but it may not some tweaking. Please see the 'Hires driver flags and format options' below if you have technical knowledge on things like adb and know how to look at system files.
Note: selecting the HiRes direct driver and the display of 'Direct' in the player is no guarantee that the app actually plays through the direct audio path! The app (or any app for that matter) cannot know or query the system if the request to play in direct mode is honoured or if Android choses another non-direct path. In some occassions, the player will give a failure at playback, but often this is not the case. Only inspection of system logs, listening tests and frequency analysis of the output will prove it. However, if your device is listed below as compatible, you can be reasonably sure that the direct path is used.
Devices that are verified by frequency analysis are 100% known to work. The other devices that are listed are suspected to work after analysis of adb logs and inspection of AudioFlinger debug output. Devices that are NOT listed, may work if they are known to have a HiRes audio chip. Note that if the app plays after selecting the HiRes audio driver and your device is not listed here, it does NOT automatically mean that your device is playing in HiRes, even if the current song display says 'Direct'. Some devices just fall back to a non-HiRes audio path instead of giving an error message.
|G6||Direct mode is 'only 16-bit, but uses all sample rates without resampling|
|V30||Yes||Including DoP and MQA decoding|
|Nubia||Z11||16-bit, up to 192000Hz|
|Onkyo||Granbeat||16-bit, up to 192000Hz|
|Pioneer||XDP-100R||Yes||No MQA decoding or DoP|
|XDP-300R||No MQA decoding or DoP|
|Samsung||Note 8||Yes||Snapdragon, SM-N950U|
|S6||Yes||Exynos variant (7420)|
|S9+||Qualcomm Snapdragon 845 variant|
|Sony||XPeria X||Yes||Probably all X series|
|MI 5||Direct mode is 16-bit, but uses all sample rates without resampling|
|MI 5s Plus|
|MI Max 2|
|RedMI Note 3 PRO||Yes|
|RedMI Note 4X|
|RedMI 5 Plus|
|Axon 7 mini|
Help us make this list grow!
We'd appreciate if you email us your feedback about non-listed devices at info AT extreamsd.com!
Warning: the next section is for technically skilled people!
HiRes driver flags AND FORMAT OPTIONS
For 'known' devices, UAPP sets the HiRes format and flags accordingly when these two settings are set to 'Auto'. For 'unknown' devices, UAPP parses the file /system/etc/audio_policy.conf on your device and tries to assess if your device has a direct (or offload) mode and, if found, sets the format and flags according to the appropriate section of that file when 'Auto' is selected. If that does not work, you can experiment with the other non-auto options.
Veriyfing the correct working of the driver
There are a couple of ways to inspect whether the HiRes driver is really playing without resampling and in 24-bit mode. If you want to try with ADB, it can be found in the Android platform tools: https://developer.android.com/studio/releases/platform-tools.html
- Frequency analysis: the best proof is when you playback a sine sweep on the Android device and analyze it on another device, for example with Rightmark Audio Analyzer. You'll need a sine sweep, like this: http://www.audio-evolution.com/downloads/SweepToneStereoFrom5000To96000Hz_192kHz.wav . Play this 192kHz WAV file containing a sine wave from 5000Hz up to 96kHz (half the nyquist frequency) and record it at 192kHz with a good audio interface (that can record up to 192kHz!). On a PC, preferably use a ASIO driver. There should be frequency content from the start to end.
- AudioFlinger output: use ADB (Android debug bridge) on a desktop machine to log onto your Android device:
Download SDK platform tools (for Windows). After unzipping the file, enter the platform-tools folder. Here you should see a number of files, including adb.exe or just adb. Hold the left SHIFT key on your keyboard and press the right mouse button somewhere in the directory and select 'Open Powershell here'. Now connect your Android device to your PC. Then open Android settings on your Android device, select About and then find an entry called 'Build number'. Tap it 7 times until it says that you are now a developer. Press back and in the settings find the new 'Developer options' entry. Tap on that and then enable the developer options at the top-right and also enable 'USB debugging'. It may ask you to allow connection from your PC, allow it.
Now, in the shell, type
Start playback in UAPP of a 192kHz file with the HiRes driver enabled.
In the ADB shell, type:
Search for a section that has a DIRECT or OFFLOAD tag in it. This mostly happens at the end of the dumpsys output and see if it is playing at 24-bit at 192000Hz.
- adb shell
logcat or logcat > /mnt/sdcard/log.txt
Search for 'rate' in the log and see if you can determine which sample rate was really used.