Arc using the Opus codec for lossy use

Here’s the text from Brian’s post.

There is no perfect option, but we definitely put some thought into this.

There are really only four choices for lossy codecs:

  • MP3
  • Vorbis
  • Opus
  • AAC

AAC was eliminated immediately because we cannot afford to pay for an AAC encoder license for every existing Roon Core on the day we release this product. So that one is simple, at least.

It’s important to separate your experience using Opus for voice from what we are doing here. I’m not exactly sure why they jammed SILK and CELT into one thing called Opus, but they are totally different animals.

SILK is optimized for voice, ultra-low bandwidth, low latency, packet loss handling, etc. Not right for our application.

CELT is Vorbis-next. It’s optimized for music like Vorbis is. It’s much more conservative and less weird because it’s trying to solve a significantly less constrained problem than SILK.

In the measurements that we found from others and in our investigations–

  • At higher bitrates (say ~256kbit), Opus/CELT appeared to roughly match AAC and was superior to MP3 and Vorbis
  • At lower bitrates (say ~96kbit), Opus/CELT was the clear winner

Having a low-bandwidth setting (and making it as good as possible) is important. Sure, the quality-focused people won’t use it, but many people pay for metered data and need to manage that, and others have more restrictive quality bottlenecks like automotive systems, bone conduction headphones, etc.

The only real negative we could find with Opus, other than the fact that people aren’t as familiar with it, is the 48kHz requirement. As it turns out this is not much of a downside because we live in a 48kHz world.

The OS mixer on your iOS or Android phone? 48kHz. Your USB/Lightning to 3.5mm adapter? 48kHz. Your brand new shiny Mac? 48kHz unless you change the setting by hand. Same with a Windows laptop. 48kHz is the standard for hardware unless you’re tweaking settings on a PC/Mac or using an audiophile-oriented DAC.

Once you realize that sample rate conversion is an inevitability for 44.1kHz content 99% of the time, there are two ways to get it done–

  • Use a high-quality (but not very energy efficient) sample rate converter in the Roon Core prior to the Opus encoder, and have the device decode straight to 48kHz, which is preserved all the way to the output.
  • Encode at the original sample rate in the Roon Core, then pass it to the phone and let the OS resample it using a sample rate converter optimized for energy efficiency over quality.

We went with the first one because it wins in terms of both sound quality and battery life. So while I’d like Opus a little bit better if it weren’t pegged to 48kHz, for our application it is not a major downside. The people who are tweaking at the level that gets them a clean 44.1kHz output path on an Android or iOS device would probably be better served by avoiding lossy codecs entirely.

If it wasn’t Opus, it probably would have been Vorbis. If AAC was not patent encumbered it probably would have been AAC. MP3 only really won one column–ease of implementation.

As for who else is using it–the main example I can think of is PlexAMP, which will be one of ARC’s main competitors :wink:

4 Likes