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.

 

cOMPATIBILITY LIST

 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. 

ManufacturerModelVerified by
frequency analysis
Notes
Asus Zenfone 3    
FiiO X5viii Yes  
  X7    
  X7ii    
Gigaset ME Yes  
Hiby R6    No DSD yet
Honor 8 PRO   Only 48, 96 and 192 kHz
  10   Only 48, 96 and 192 kHz
HTC 10    
Huawei Nova    
LeEco Max2    
Lenovo P2    
LG G2 Yes  
  G6   Direct mode is 'only 16-bit, but uses all sample rates without resampling
  G7   Including DoP and MQA decoding
  Stylo 4 (Q7)    
  V10 Yes  
  V20 Yes  
  V30 Yes Including DoP and MQA decoding
  V35   Including DoP and MQA decoding
Nubia Z11   16-bit, up to 192000Hz
OnePlus 3T and newer    
Onkyo Granbeat   16-bit, up to 192000Hz
  DP-X1    
Pioneer XDP-100R Yes No MQA decoding or DoP
  XDP-300R   No MQA decoding or DoP
Samsung Note 8 Yes Snapdragon, SM-N950U
  S6, S7, S8, S9 Yes Exynos variants all resample to 192000Hz. Even Samsung Music resamples DSD to 192000Hz.
  S9+   Qualcomm Snapdragon 845 variant
Sony X Yes  Probably all X series
  XZ Premium    
  XZ1    
   XZ1 Compact    
  Z5   16-bit up to 192000Hz
Vivo Xplay6 Yes   Uses the chipset DAC
  X20 Plus    Uses the chipset DAC
Wiko WIM Lite    
Xiaomi MI 4s    
  MI 5   Direct mode is 16-bit, but uses all sample rates without resampling
  MI 5s    
  MI 5s Plus    
  MI 6    
  MI 8    
  MI A1    
  MI Max    
  MI Max 2    
  MI Note 3    
  MIX    
  RedMI Note 3 PRO Yes  
  RedMI 4    
  RedMI Note 4/4XX    
  RedMI 5 Plus    
ZTE Axon 7    
  Axon 7 mini    
  Blade Max Z    

 

MEIZU DEVICES

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
    ./adb shell
    Start playback in UAPP of a 192kHz file with the HiRes driver enabled.
    In the ADB shell, type:
    dumpsys media.audio_flinger
    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.