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. Please note that this list is not continuously updated, so it's likely that more models are supported.
|Zenfone Max Pro M1|
|FiiO||M11||DSD64 and DSD128|
|M11 PRO||DSD64 and DSD128|
|M15||DSD64 and DSD128|
|Honor||8 PRO||Only 48, 96 and 192 kHz|
|9||Only 48, 96 and 192 kHz|
|10||Only 48, 96 and 192 kHz|
|iBasso||DX150||Probably requires Lurker00 firmware|
|G7||Including DoP and MQA decoding. DoP does not work on Android 10.|
|G8||Including DoP and MQA decoding. DoP does not work on Android 10.|
|G8X||Does not have MQA!|
|Stylo 4 (Q7)|
|V30||Yes||Including DoP and MQA decoding.DoP does not work on Android 10.|
|V35||Including DoP and MQA decoding.DoP does not work on Android 10.|
|V40||Including DoP and MQA decoding.DoP does not work on Android 10.|
|V50||Including MQA decoding. The V50 does not feature DoP. The LG Music app will convert DSD to 88200Hz PCM, whereas UAPP converts to 352800Hz PCM.|
|V60||V60 does not feature MQA or DoP|
|G6||16-bit, up to 192000Hz|
|Nubia||Red Magic 5G|
|Z11||16-bit, up to 192000Hz|
|OnePlus||3T and newer|
|Onkyo||Granbeat||16-bit, up to 192000Hz|
|Oppo||Any recent Oppo can be supported probably. Contact us when yours isn't recognized.|
|Pioneer||XDP-100R||Yes||No MQA decoding or DoP|
|XDP-300R||No MQA decoding or DoP|
|Realme||5 PRO||Any recent Realme can be supported probably. Contact us when yours isn't recognized.|
|GT master ed.|
|X3 Super Zoom|
|Note 8||Yes||Exynos variants all resample to 192000Hz|
|S6, S7, S8, S9, S10 and plus variants||Yes||Exynos variants all resample to 192000Hz. Even Samsung Music resamples DSD to 192000Hz.|
|Shanling||M3/M3X||PCM only, MQA on M3X|
|M6||MQA on 2021 version|
|M6 PRO||PCM only, MQA on 2021 version|
|M8||PCM only, MQA|
|M9||PCM only, MQA|
|X||Yes||Probably all X series|
|Z5||16-bit up to 192000Hz|
|Vivo||Xplay6||Yes||Uses the chipset DAC|
|X20 Plus||Uses the chipset DAC|
|Xiaomi||MI 4 to 11||Any recent Xiaomi can be supported probably. Contact us when yours isn't recognized.|
|MI CC9 PRO|
|MI Max 1/2|
|MI Note 3|
|MI PAD 4|
|MIX 1 to 3|
|Poco F2 PRO|
|Poco X3 NFC|
|Poco X3 PRO|
|RedMI K30 and PRO|
|RedMI Note 3 to 10|
|RedMI 4 to 8|
|Axon 7 mini|
|Axon 10 PRO|
|Blade Max Z|
For certain devices from Meizu (MX4 Pro for instance), the package name of UAPP (com.extreamsd.usbaudioplayerpro) needs to be added to /system/etc/audio_hifi.conf and/or /etc/audio_hifi.conf in order to utilize the HiFi DAC. You can add this package name if you have root access to your device.
Help us make this list grow!
We would appreciate it 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 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.