Note: I originally started this piece as an in-depth look at Android for audiophiles. I wanted to do the research and educate people so they didn't have to spend their time combing the entire Internet. I figured the article would be a great resource for getting the best sound out of an Android device. After several days of research, talking to experts, even talking to Google, this article turned in a little different direction. There are major problems with Android audio. I ran into them. I tried to provide details and some workarounds, amid my frustration. - CC
I purchased my first iPhone on June 9, 2008. It was the 3G model. Back then, I didn't really use it for audio because the world was a different place. That phone was maxed-out at 16GB of storage, there were no major streaming music services, analog audio output was less than good, and there were zero devices capable of extracting digital audio from an iPhone. As future iPhone versions were released with more storage, streaming services appeared with lossless offline downloads, and external DACs capable of turning an iPhone into a pretty good audio device became available, I switched from my 160 GB iPod Classic and began to depend on my iPhone for mobile audio playback.
On September 7, 2016 the iPhone 7 was announced. I was set to upgrade from my iPhone 6 Plus, but was very underwhelmed after watching Apple's presentation. I thought about keeping my 6 Plus until the "magical" iPhone 8 is released, but decided it was time for a change. I switched to the Google Pixel phone running Android. When switching to an Android device, it was very important to me to use an official Google phone. Google ensures its phones have the "real" Android experience, without bloatware, and will be updated to the newest version of the Android operating system as soon as it's released. On the other hand, manufacturers such as Samsung, LG, HTC, Motorola, and Huawei use such customized versions of Android, it's hard to believe they can still use the Android brand. Bloatware an lack of updates are two major issues with non-Google Android phones. Anyway, I made the switch to a 128 GB Google Pixel, and the quest for audiophile quality audio from Android started immediately. I literally hadn't received the phone yet, and I was already trying to find the right audio-related accessories and the best way to output bit perfect audio.
I really like Android. It's kind of a nerd's operating system. But, it's the wild west. I should have started my quest for the best Android audio output before I purchased the Google Pixel. However, I have a feeling I wouldn't have discovered the issues until I had a horse in the race. When searching for Android audio information, the amount of information available is overwhelming. The amount of pertinent information is scarce to nonexistent. Welcome to the Internet Chris. Searching for items "in general" such as the best android audio app or configuration, won't provide results specific enough for action. Call me master of the obvious, but every version of Android, major (4, 5, 6, 7) and minor (x.1, x.2, x.3), is different. Add in the variables of each phone and each manufacturer's version of Android, and the third party accessories that may even cause damage to the hardware, and plenty of other items, the situation becomes a shit-show.
Establishing A Baseline
- Apple iPhone 6 Plus
- Apple Lightning to USB 3 Camera Adapter
- Apple Lightning to USB Cable
- AudioQuest DragonFly Red or DragonFly Black
- JH Audio JH13 earphones
- Apple iOS
- Onkyo HF Player
My portable audio system when I used iOS devices was fairly straight forward. I used my iPhone, running whatever version of iOS was the newest, for music playback when I was in the car and when I was in the air. In both scenarios, Apple's camera adapter enabled me to charge the iPhone and output digital audio simultaneously. Power was either provided by my car or the in-seat USB / AC outlet of an airplane. I used Onkyo HF Player whenever I wanted to play locally stored high resolution files, and JRemote whenever I wanted to stream music from my 4TB library at home to anywhere in the world. The app I used most was Tidal. I streamed lossless music in the car and played from my offline'd lossless albums when in the air. The iPhone controlled the DragonFly's hardware volume attenuation without an issue.
The aforementioned system is more complex than using the headphone output, assuming one still has this available, but it provides much better quality audio without jumping through too many hoops. Using Tidal to stream and offline music is a simple as it gets. I can't remember the last time I connected an iPhone to a computer to update the locally stored music. That just seemed so 2005-ish.
Apple Lightning to USB 3 Camera Adapter
Reaching The Baseline With A Google Pixel And Android
- Google Pixel Phone
- Apple USB-C Digital AV Multiport Adapter (MJ1K2AM/A)
- Google USB-C to USB-A Cable
- AudioQuest DragonFly Red or DragonFly Black
- JH Audio JH13 earphones
- Android Nugat 7.1.1
- USB Audio Player Pro
Given that my phone is now an important part of my music listening experience, I wanted the Google Pixel phone to be at least as good as my iPhone, if not better. This is where the problems began. First, I needed to power the phone in my car and in the air. Without power for charging, I risk arriving at a destination without my schedule, hotel address, Uber, etc... First-world problems.
Power to the Pixel
I began searching for a USB-C cable to connect to my existing 12V car charger. I stumbled upon a spreadsheet by Google's Nathan K. containing testing data. Nathan tests USB cables and chargers for compatibility with the new Google Pixel phone. After a few seconds I realized I couldn't use any USB-C cable and I definitely couldn't use my existing 12V charger. This spreadsheet is full of details about each cable's speed, power rating, length, certification status, and notes from the person who tested the cable or charger. The cables and charger range from "Definitely Get" to Avoid / Doesn't Work / Causes Damage." Needless to say, it's not as easy as going to Google or Verizon (Pixel is available from Verizon as well) and purchasing a cable and charger. Some Google cables aren't USB-IF certified (not required, but nice to have), while others are out of production. The "current" Google cable is only USB 2.0 and apparently there is a newer version that's signified by "beige and black with better engineering, thicker."
The search for a cable that meets the highest standards was a nightmare. Many are out of production or out of stock, and far more of the available cables are just plain bad. After finding a cable, I need the 12V car charger. I thought maybe I'd stop in at Verizon to pick one up. not so fast. The Verizon car charger is listed in the worst category, Avoid / doesn't work / causes damage. Testing shows it overloads itself at 2.4a. Google's special note says, "avoid it at all costs". Readers should also be aware that Verizon's AC charger has a note in this spreadsheet that says, "Cable has excessive DCR. PD chip glitches..."
After navigating that mess, I purchased a few Google USB-C to USB-C cables and a very cool Nomad car charger. Neither have the best specifications, but neither should cause my phone or car to explode.
But wait, I still needed a way to charge my phone and output audio to an AudioQuest DragonFly Red or Black USB DAC. Let's look at each one separately. Outputting audio to the DragonFly requires an On-The-Go (OTG) USB-C to USB-A adapter. One of the OTG adapters was included with the Pixel phone and I ordered one with a cable from Google. Problem one solved pretty easily.
I then needed to charge and output audio simultaneously, just like my iPhone. I think I can hear the people at Google laughing at me now. Trying to find an adapter equivalent to the Apple Lightning to USB 3 Camera Adapter, was and still is a joke. Seemingly hundreds of companies make USB-C hub-type products designed for new MacBooks or Google's Pixel C laptop, but almost nobody has certified a device with the Google Pixel phone. While searching I found out that not all USB-C products are compatible with the USB-IF Power Delivery standard, R2 V1.0, even though they charge through a USB-C port. There's also what's called passthrough power. I need passthrough power to charge my phone at the same time as I play music. Many devices don't support passthrough power.
Yesterday I found two devices for this task. One from Apple and one from a company named Plugable. Apple makes a $49 USB-C Digital AV Multiport Adapter that features USB-C power input, HDMI output, and a USB-A connection. When I went to the Apple store and talked to the guy about testing it before purchasing it, he was very cool and grabbed one from the back room. When I pulled out my Google Pixel phone, he looked at me like I had an eye in the middle of my forehead. I successfully tested the adapter with a DragonFly Black at the Apple store, but was unable to really test the passthrough power feature. I didn't want to ask too much of the guy. I purchased the adapter and went to my car to test everything. It didn't work. Frustrated, I thought about it on the way home and figured I'd try a couple more things before declaring it a nonstarter.
When I arrived home I connected the adapter to my phone, the DragonFly Red to the adapter, and an official google USB-C charger to the adapter. On the first attempt I had power to the DragonFly and power to my phone, but no audio output. Then I clicked a few different options related to how the phone uses the connected device (receive power, supply power, etc...) that didn't seem to do much. I disconnected and reconnected, and it worked! The Apple USB-C Digital AV Multiport Adapter (Part Number: MJ1K2AM/A) works with the Google Pixel phone to supply power and connect a USB DAC.
The device from Plugable is somewhat certified for what I need. The USBC-HUB3P has USB-C in/out and USB-A. Plugable support told me the device works to charge a Pixel phone and connect a USB thumb drive simultaneously. This is a plus. But, Plugable said it didn't have USB DAC to test. I ordered the $32 device anyway. When the USBC-HUB3P arrived I connected it to the Google charger than shipped with the Pixel phone, then connected it to the phone. I had power passthrough immediately. Then I held my breath and connected the DragonFly Black. The Fly illuminated green! I played a tune and I had music! This sounds very elementary, but based on my research and the fact that there are so many nonstandard peripherals for Android devices, I was surprised it worked. Plus, I'm not a fan of spending money on items that will only fill my box of "well that didn't work" devices.
Between the Apple USB-C Digital AV Multiport Adapter (MJ1K2AM/A) and the Plugable USBC-HUB3P, I'll use the Pugable device every time. It seems smaller, has a better connected cable, and has a more ergonomic shape. Anyone looking to purchase an adapter for this reason will save money as well because the Plugable USBC-HUB3P is cheaper. The Apple USB-C Digital AV Multiport Adapter (MJ1K2AM/A) is currently $49, but this is only because many people complained to Apple and it temporarily lowered the price.
Apple USB-C Digital AV Multiport Adapter (MJ1K2AM/A)
Music Playback and Software
With the power situation figured out, I now turn to music playback and software. This area is perhaps the most frustrating and leaves me feeling hopeless and without any control over the situation. I ran into common problems on Android, that are nonexistent on other platforms. I exchanged emails with Google, and based on the response received in combination with other information, I gleaned that the company really doesn't care about these issues. Let me be clear, all other major operating systems do what Google won't enable in Android. I'm not talking about some extreme niche knuckle-dragging audiophile problem. I'm talking about issues that were solved many years ago on other platforms.
Pump Up The Volume
On with the shit-show. Using the Google-supplied USB-C to USB-A On-The-Go adapter, I connected my Pixel phone to an AudioQuest DragonFly Red. A very popular DAC by any standard. I wouldn't be surprised if there are several hundred thousand DragonFlys in the hands of customers around the world. I purposely left the Plugable and Apple adapters out of the equation when I started listening. I fired up the Tidal Android app, and noticed immediately that the volume was a bit low. I pressed the Pixel's volume rocker a few times to increase the level, but it still didn't get very loud. After a reboot, or two, and reconnection of the DragonFly, I saw the same results. I switched from the DragonFly Red to the Meridian Explorer 2, to see if the problem as a DragonFly issue. Unfortunately the issue of low volume remained when using the Explorer 2 and the Tidal app on my Pixel phone. I put my headphone 1/8 inch plug directly into the Pixel's headphone jack as a test, and I was able to hurt my ears quickly with high volume. It was official, as further research would show, I had the much dreaded, low volume, external DAC, Android issue.
I dug into the issue for several hours, thinking there must be a solution. Or, at least a geeky workaround. The Internet is full of possible solutions that may or may not work with specific versions of Android on specific version of individual phones. Remember, each major and minor version, as well as each phone, introduce new variables that can invalidate a solution immediately. I tried a few things, but came up empty each time.
I contacted AudioQuest, manufacturer of the DragonFly Red DAC. AudioQuest is mostly know as a cable company, but it also has extensive knowledge and contacts when it comes to USB DACs, software, and operating systems. I also contacted the designer of the DragonFly, Wavelength Audio's Gordon Rankin. Gordon is unofficially the godfather of USB audio. In my conversations with AudioQuest and Gordon, I learned quite a bit about how the DragonFly works and how Android works, or as I'll characterize it, doesn't work. Please keep in mind that all opinions about the workings of Android and the Google Pixel phone are mine only. AudioQuest and Gordon simply provided facts about the technologies.
When a device, such as a USB DAC, is connected to any host, in this case a Google Pixel phone, a process called enumeration takes place between the host (Pixel) and peripheral (USB DAC). According to Google's own documentation, enumeration is, "The process of detecting which peripherals are connected to the bus, and querying their properties..." In layman's terms this is a conversation between the phone and DAC, that enables the phone to determine the capabilities of the DAC. A standard enumeration would identify for the host, what sample rates the DAC supports, its power requirements, and the DAC's default and maximum volume levels (if the DAC has volume control).
Enumerating the volume level is where many Android phones don't follow the agreed upon standards. Keep in mind that some Android device manufacturers and third party app developers have solved this issue. Google, as the creator of the operating system, has elected to not solve the problem. In this specific case, when the DragonFly Red is connected to the Google Pixel phone, the DragonFly tells the Pixel that its default volume is 41. The DragonFly Red has a 64 step digital volume control that defaults to step 41, so as not to ruin ears or equipment when it's initially connected. In its infinite wisdom, Android reads this default volume setting as the DragonFly's maximum volume. Thus, there's no going over step 41 out of 64 when turning up the volume.
Digging deeper into this issue, reveals a larger issue. When Android adjusts the volume of the DragonFly or any other USB DAC, it's doing so in software, not the DAC's built-in hardware volume control. You can see that the Pixel adjusts its volume from say 0% to 100%, but this is only working between step 0 and 41 in the DragonFly Red USB DC. First we have Android's inability to distinguish between a default volume and maximum volume upon enumeration, then we have Android's inability to operate a hardware volume control on a USB DAC. Both of these fairly simple and very standard items have been done for many years in OS X / macOS, Windows, Linux, and iOS. Android uses the extremely popular Advanced Linux Sound Architecture (ALSA) that is used by nearly every Linux-based audio device you and I have ever used. But, Google has elected to remove many capabilities in its version called tinyalsa. I can see sliming-down software to work on a phone, but stripping out what many consider essential was a frustrating move by Google.
As part of my research I contacted Google about this and another issue I'll discuss next. I received a fairly fast response and inquiry asking for additional information to pass along to the correct team member(s). I laid out the details of what was happening with lack of hardware volume control and the strange default / maximum volume issue. I received the following one sentence response, "We currently do not support enumeration and control of external volume controllers but we're continuing to extend our USB Audio support in future versions of Android."
My interest in using a official Google phone, with the official Android OS, has taken a serious hit. It's my understanding that a limited number of non-Google phones have heavily modified versions of Android than enable hardware volume control. However, most phone manufacturers don't enable hardware volume control.
It's entirely possible that AudioQuest could release a firmware update to set the default DragonFly Red volume to step 64 (maximum), but that opens another can of worms. AQ would be compensating for a shortcoming of Google, by introducing something it doesn't see as a best practice. given that Android has a 69% share of the mobile phone market, followed by 26% iOS, 2% Windows, and 2% Java, AudioQuest's hand may be forced by Google's lack of interest in making its operating system meet the standards that every other major OS has met for many years.
Given that I'm an audiophile, I obviously have music in several different sample rates. Anywhere from 44.1 kHz to 11.2 MHz at 1, 16, and 24 bit. It would be nice to play some of this material on my Google Pixel phone, just like I did on my Apple iPhone for many years. Tidal is currently limited to 16 bit / 44.1 kHz, so I opened JRemote and pulled some music from the JRiver Media Center server on my network. I played 16/44.1 content just fine, although at low volume through the DragonFly Red. When I switched to 24 bit / 88.2 kHz or 96 kHz, the DragonFly's sample rate indicator didn't change. I thought to myself, oh wonderful, the great Internet search for solutions was back on. I wasn't searching for long before I found the official Android documentation describing USB audio and sample rate support.
Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1 kHz is recommended on devices with 44.1 kHz output, as the 48 to 44.1 kHz downsampler does not include a low-pass filter). 16-bit recommended; no dither applied for 24-bit.
Android 5.0 (API level 21) and above supports a subset of USB audio class 1 (UAC1) features:
The Android device must act as host
The audio format must be PCM (interface type I)
The bit depth must be 16-bits, 24-bits, or 32-bits where 24 bits of useful audio data are left-justified within the most significant bits of the 32-bit word
The sample rate must be either 48, 44.1, 32, 24, 22.05, 16, 12, 11.025, or 8 kHz
The channel count must be 1 (mono) or 2 (stereo)
The pertinent pieces of information above are 1) support for USB Audio Class 1 (UAC1), and 2) sample rate maximum of 48 kHz. Before continuing, here's a little primer on USB audio classes. UAC1 supports up through 96 kHz and UAC2 supports sample rates much greater than 96 kHz. When an operating system supports UAC1, it can output Usb audio to a DAC at rates up to 96 kHz without the need for a third party driver. Many Linux distributions, OS X / macOS, Windows 10 (recently), and iOS all support UAC2. They can output audio at much higher rates than 96 kHz without any additional software. It's native to the operating system. For a pretty good and thorough USB primer directly from Google check out its documentation here -> https://source.android.com/devices/audio/usb.html
I understand that high resolution audio isn't on everyone's playlist. I'm OK with Android not supporting it. However, UAC1 can support up through 96 kHz music. Google has elected to limit Android's audio capability to a maximum of 48 kHz. In addition, according to the documentation, Android is outputting 44.1 content at its native rate and resampling 48 kHz content to 44.1 kHz. Google even recommends audio in 44.1 because its Android downsampler doesn't include a low-pass filter. That's what the documentation says. In my experience, Android is even worse. Using the DragonFly Red and Black, all audio output was illuminating the fly in magenta. This signifies the audio the DragonFly is receiving is at 96 kHz. No matter what I played, within the DragonFly's supported limit of 96 kHz, the Pixel output audio at 96 kHz. I guess I can see this happening, but don't fully understand why. When I connected the Meridian Explorer 2 things got even worse. All audio output was illuminating the 192 kHz indicator. Except, when I tried to play 192 kHz audio, nothing would play. I have no clue how or why, I'm just reporting the results of my tests.
Note: I was notified about high resolution and hardware volume control support that was released to some Samsung phones with Android 4.1. When it was released audiophiles were very excited, as one would imagine. However, within a couple days, another update was pushed out that removed high resolution and hardware volume control support. I can't confirm or deny that this happened, but it is illustrative of the wild west nature of the Android ecosystem.
Work Work Work Work Workaround
My two main issues with Android and the Pixel phone are related to volume control and sample rate support. All other major operating systems solved these issues either long ago or recently decided to finally do it (Windows 10). How does one get around these issues? A custom app that uses its own drivers. However, there is no free lunch. After using the best app on the market, I'm still without a major feature of my previous mobile playback system.
On Windows operating systems prior to the release of UAC2 support (coming soon if not already released), many DAC manufacturers used Thesycon drivers for audio output. This enabled playback of higher resolutions than 24/96. In the Android world, things are a bit similar, but not entirely the same. eXtream Software Development has created an app named USB Audio Player Pro. This app takes full control over an audio device such as a USB DAC and implements UAC2 support. Using a DragonFly it has full control over the hardware volume and pays bit perfect up to 96 kHz. Using a Meridian Explorer 2, I successfully sent 192 kHz and MQA music through USB Audio Player Pro without a problem. In this respect, using UAPP is like installing a Thesycon driver. It enabled high resolution output and control of the DAC.
What's dissimilar is the fact that UAPP isn't a universal type driver that can be used by other applications. Android doesn't allow one to replace its audio system. UAPP must be contained within the app, like a sandbox. Launch the app and everything works perfect within the app. Outside of the app, it's as if the UAPP doesn't exist. Why does this matter? Because of a record label restriction. Huh, a record label restriction? Yes, a record label restriction.
USB Audio Player Pro is a great app. It supports local phone files, network folders and files, UPnP/DLNA, and even Tidal and Qobuz. But, here's the rub. UAPP can't access Tidal's offline library. When on an airplane, I played music from an offline library of about 75 GB with my iPhone. Using UAPP, I can't access my Tidal offline library because record labels don't allow access to the offline content unless one is in the Tidal application. Using the Tidal application I have the volume control / hardware control issue that is a nonstarter. I could load up Tidal with all kinds of offline music, that I don't own, but I don't want to use the Tidal app because it's limited by Android's audio system. When I'm not on an airplane, I can stream this music through UAPP. Its Tidal implementation is pretty good.
USB Audio Player Pro is a great solution when 1) Tidal streaming is available over WiFi or mobile carrier, 2) One has access to a UPnP/DLNA server, 3) One has access to a network share with music, and 4) One has local music stored on an Android device. UAPP has great options including a bit perfect playback checkbox, upsampling, UPnP Rendering, DSD to PCM conversion, native DSD, DSD using DoP, and three USB specific tweaks to be used as needed. UAPP would be the perfect app, if it had access to Tidal's offline content. People who don't really need access to Tidal's offline content should check out UAPP without hesitation.
My journey from iOS to Android on a Google Pixel phone has been frustrating with respect to audio playback. I really like every other aspect of the phoned operating system, just not its ability to play music. My journey began with hardware incompatibility and accessories capable of damaging the phone, and continues with Android software choices made by Google that limit audio playback. Whether it's incorrectly enumerating a USB DAC, lack of hardware volume control, or lack of support for high resolution audio with UAC2, Google has the ability to easily fix all of these issues. Many distributions of Linux have done it. Apple did it on OS X/ macOS and iOS years ago. Microsoft has had volume hardware volume control for seemingly ever, and recently introduced native support for UAC2. It's frustrating that the world's number one mobile operating system, created by a company full of music lovers and computer nerds, doesn't support what all other major operating systems support. I'm thankful that eXtream Software Development created USB Audio Player Pro because it solved some of the issues ignored by Google. However, my number one need of playing offline Tidal content, can't be addressed because of record label "concerns." Google could make all of this a nonissue, but based on the company's responses, I don't have a good feeling the company will "Do the right thing" (this replaced it previous motto, Don't be evil, in October 2015).