Fairly recently Jörg Schwieder, the creator of iPeng, announced a really cool add-on to the app. The add-on, or in-app-purchase, enabled an iOS device to turn into a Roon audio endpoint. Yes, I know Android devices can be Roon endpoints without any hoops to jump through, but due to Apple's rules, the Roon team hasn't enabled this feature yet for iOS.
This is actually a really cool feature. I've been streaming audio to my Android Pixel phone for a while now and I love that Roon sees it as a Roon endpoint. Now, I can do the same with with my iPad. Not sold on this yet? In addition to streaming audio to your iOS device, say out in the backyard, it's also possible to connect a USB DAC to the iOS device and stream directly from a Roon core to iOS and a DAC.
I was talking to David Solomon of Peachtree Audio about an upcoming event we are doing in Atlanta (stay tuned for details), and I told him about using iPeng to make an iPad a Roon audio endpoint. He immediately connected his iPad to a Peachtree nova150 and flipped out. Seriously, he was super happy. There are many more use cases for this, even if it's not the ultimate in high end, knuckle dragging audiophiledom.
However, all is not perfect in the Roon audio endpoint / iOS device world just yet. I did several hours of testing and discovered an issue. Fortunately Jörg has been really cool to communicate with and is looking very hard into what may be happening. More details below.
Roon sending audio to iPad Air 2
What you need
To make this work, you need:
- Roon running with the Enable Squeezebox Support option enabled.
- The Roon iOS app running on an iPad or iPhone or iPad Touch.
- The iPeng 9 iOS app with.
The initial setup is very simple. As I mentioned, enable Squeezebox support within Roon on the Setting > Setup tab.
Roon > Settings > Setup > Enable Squeezebox Support
Launch iPeng and complete the iPeng Playback in-app-purchase for $4.99. I'd show screenshots of this, but I've already purchase it and the option is no longer available. Once this is purchased, iPeng displays a menu item that says Roon App. Tapping this, displays a large With to Roon App in the main window. Tapping the Switch to Roon App icon, launches the Roon iOS app.
Once the iOS Roon app is launched, go to Settings > Audio and look for the Squeezebox heading. Under this heading your iPad should be displayed and say iPeng. Enable this device and you're now ready to send audio to an iOS endpoint.
iPeng with Playback in-app-purchase installed
Roon > Settings > Audio > Enable iPad/iPeng endpoint
I've had terrific success sending 16 bit / 44.1 kHz audio to my iPad Air 2 from a Roon ROCK. The success has been largely whel I select the music for playback on the iPad itself in the Roon app. Switching to my desktop Roon remote app and trying to send audio to the iPad has given me mixed results. Sometimes the audio plays and sometimes it doesn't.
Back to the issue I found through my testing. At 16/44.1 the iPeng / Roon / iOS combination is bit perfect. Meaning, the bits are sent from the Roon core and output to a USB DAC unaltered. Unfortunately, when playing 24/88.2 and 24/96 music, something is altering the bits. Currently iPeng doesn't support sample rates over 96 kHz, so my testing of these was only to see if the music was downsampled and played, which it did nicely.
Back to the supported sample rates up through 24/96. Using a both a dCS Rossini DAC and the combination of a Berkeley Audio Design Alpha USB and Alpha DAC Reference Series 2, I was able to determine that 24/88.2 and 24/96 content is passed to the DAC at 24/88.2 and 24/96. There is no resampling going on, but the bit depth is altered in some fashion. Yes, the audio is still 24 bit, as indicated by the dCS Rossini, but the least significant bit is not being sent to the DAC without alteration, as identified by the Berkeley combination.
For example, when playing 24/96 audio through the Apple USB 3 camera connection kit and out to the Berkeley combo, all audio is bit perfect when using the FLAC Player app. This app is a standalone app that outputs local music from the iOS device. When playing the exact same music using Roon and iPeng, the 24/88.2 and 24/96 audio is altered after about 3-5 seconds of playback. The first tiny bit of audio is bit perfect, but is soon (3 to 5 seconds) altered.
Exchanging emails with Jörg, he was eager to identify what was happening. He suggested there could be several areas where this alteration is happening. Here is some of Jörg's email to me (without an confidential details).
- Volume control. iPeng usually doesn’t apply digital volume control (unlike the Squeezeboxes) but hands over volume information downstream to iOS but iOS might still apply digital volume control, under iOS Apps can’t speak directly to the USB driver. So to be sure output volume should be set to 100% or at least you should test with that setting.
- The equalizer in iPeng needs to be off (the default)
- The server must not apply any replay gain etc. This is a point where I’m not 100% sure how Roon’s Squeezebox emulation works. I’ll have to look into this, if this is the reason maybe we could just ignore it or something. In the Squeezebox system there are several different gain control mechanisms (and iPeng even has more) that are being applied in different ways. Basic volume control is usually digital (except in iPeng) so changes the data. Then there is an additional replay gain field that’s being used to normalize volume between tracks and to apply fade effects. This is separate from the main volume control and iPeng also uses a separate mixer for it if applied. What makes things more difficult is that this method is also being used temporarily during transitional volume changes, this has to do with the timing of volume changes (the gain information is sent earlier than the volume information which can lag by several seconds) but any effects due to this should be limited to the time during which you change volume. But any differences between how Roon handles these various gain fields and LMS does might make iPeng apply the gain mixer.
- Which formats do you use to stream? iPeng currently only supports linear PCM formats (no floating point PCM) and only 24 bit word size and a maximum of 96kHz sample rate, everything else probably will have to be transcoded by the server.
Taking Jörg's advice, I double-checked that all my volume controls were at 100% even the volume controls that didn't have any effect on the audio. With the camera connection kit and the dCS or Berkeley USB devices, the volume has no effect. Per Jörg's suggestion, I also tested Roon sending to a Sonore Signature Rendu SE setup as a Squeezelite endpoint. I was able to send audio bit perfect up through 24/192. This leads be to believe the issue is somewhere in iPeng or the Roon / iPeng combination.
At any rate, I'm sure Jörg will figure out what's going on. He is a very capable developer and was very willing to work with me on the issue.
The combination of Roon, iPeng, and Roon Remote on iOS is really great for sending audio directly to the iOS device. There are many use cases that cry out for such a convenient way to play music. Audio that is 16 bit / 44.1 currently plays bit perfect when output to headphones directly connected to an iOS device or to a USB DAC connected to the iOS device. I tested this with many DACs including an AudioQuest DragonFly, dCS Rossini, and Berkeley Audio Design RS2. iOS doesn't support all USB DACs, but that has nothing to do with iPeng and Roon. Although iPeng supports audio up through 24/96, I was unable to send this content bit perfect to my DACs. There is some alteration taking place. I have confidence that iPeng developer Jörg will resolve the issue in the not too distant future. Plus, I believe he is working on some great additional features such as higher sample rate support and even DSD. All good stuff.