Secrets of Audiophile Playback on macOS

Baoshan Sheng
Tonal
12 min readJul 12, 2023

--

I never understood why some audiophile players exhibit professionalism via unnecessary playback settings. This is not honest in Dieter Rams’ 10 principles for good design.

Audiophile playback software has long been plentiful; this is also true on macOS. If you have some lossless music or use a USB D/A converter, you can name one or more audiophile players for macOS. More likely, you are hosting your music collection using one already.

Within the scope of bit-accurate playback, which means audio data sent to the D/A converter is identical to that contained in audio files, this article decrypts the key features, settings, and marketing gimmicks of some audiophile players for macOS.

DSP-related features such as oversampling, EQ, dithering, or room correction are not discussed here.

Regardless of whether you are satisfied with your player, these are worth checking out. At the end of this article, I’ll explain how the new Tonal app handles audiophile playback.

The Mac as a Hi-Fi Player

Technology is nothing. What’s important is that you have faith in people, that they’re basically good and smart — and if you give them tools, they’ll do wonderful things with them.

— — Steve Jobs (1955–2011)

From Jobs’ words, it is not difficult to understand why content creation is always the driving force behind Apple products. Content consumption often benefits from that. Take audio playback as an example:

  • To provide predictable, low-latency audio I/O for Digital Audio Workstations, Apple introduced the audio HAL (Hardware Abstraction Layer) services at WWDC 2003 (yes, 2003), earlier than the (third-party) ASIO protocol on the Windows platform.
  • In 2009, Apple added USB Audio Class 2.0 protocol support in Mac OS X 10.6 (the same time as RME’s introduction of its first USB 2.0 audio interface). This is why “compatible with Mac OS X 10.6 and above” still appears in USB D/A converters’ specifications. In contrast, Microsoft added USB Audio Class 2.0 protocol support in 2017.

Mainstream audiophile players for macOS are all based on the above services and protocols — although decades old, they are still the foundations to macOS’s audio experience. For audiophile players that talk with output devices, these services and protocols are still the de facto choice because:

  • HAL services satisfy the requirements of audiophile players and are close enough to output devices (although not at the level of “hardware interruptions handling”).
  • Those that use lower-level interfaces (such as IOAudioFamily in the kernel space) will gradually (or already) fail to work correctly as the operating system is updated, and new (user space) interfaces are offered.
  • Those that use higher-level interfaces (such as AVFoundation or high-level Core Audio services) suffer both ergonomic and marketing disadvantages. However, the playback can still be bit-accurate when certain conditions are met.
Mainstream audiophile players use low-level HAL services.

Well, let’s sort out the key features and settings of the audiophile players for macOS.

Sample Rate Switching

Sample rate and bit depth of digital audio are sometimes inappropriately compared to monitors’ resolution and color depth. If a marketer is brave enough, he can compare a low-res image to another 300-dpi one as red book vs. DSD 256… Please don’t take it seriously next time you see such words.

When you play an album in 24/48 (24-bit, 48 kHz) format, but your D/A converter is working in 24/96, you will not hear the double-speed sound effect — the operating system or your player performs sample-rate conversion (SRC) using digital signal processing algorithms. Some D/A converters do upsampling/oversampling internally, meaning the music you hear may result from multiple SRCs.

Should sample rate conversion be performed on your Mac for audiophile playback? Not recommended for most users because it introduces a new variable in addition to the audio content and your output device. This opaque variable is usually affected by DSP parameters, app version, commercial licensing, etc.

When this variable changes, you won’t be able to evaluate the performance of other components in your system independently, and you won’t be able to answer questions such as “whether an album bought from HDTracks sounds better than its CD version” with confidence.

Audio MIDI Setup is our old friend.

In Audio MIDI Setup app, we can manually match the output device's sample rate to the audio content being played. When bit depth and volume are appropriately set, you can achieve bit-accurate playback without any 3rd party app. This is just impractical.

Studio Display supports up to 96 kHz.

Setting the output device’s sample rate to that of the audio content automatically is an essential feature of a bit-accurate player.

Bit Depth Switching

Bit depth indicates sampling/quantization precision. For a USB audio interface, interface bit depth is the bit depth on the USB cable. I use interface bit depth here because you can not confirm the bit depth used by your converter when performing D/A.

In Audio MIDI Setup, you can adjust the interface bit depth of an audio device manually:

Newer D/A converters support 32-bit interface depth, although the ENOB is much less.

USB audio protocol allows 32-bit floating-point numbers in IEEE-754 format, usually seen in pro-audio devices only. Most Hi-Fi D/A converters use signed integers as interface formats. Some users prefer to set it to the maximum supported value (e.g., 32-bit integer) to reduce quantization noise at low volumes because more MSB bits are zero. Additional information is required to test if this claim is valid:

  • When volume is controlled by the operating system or player using a software volume algorithm (for example, you are watching  TV+), setting interface bit depth to the maximum supported value (and using a high-quality volume algorithm with dithering) is acceptable (may not be the case for R-2R converters, which is not discussed).
  • When volume is controlled by the output device or an analog preamplifier, and a bit-accurate player is used, the interface bit depth only needs to be equal to (or greater than) the audio content. Newer (e.g., those using ESS chips) output device’s volume algorithms have 32-bit (or better) integer precision and are independent of interface bit depth.

Some output devices have a bit depth indicator that can display the content bit depth instead of the interface bit depth — when a bit-accurate player plays CD-quality content, the indicator shows 16-bit no matter if you set the interface bit depth to 32-, 24-, or 16-bit. This feature can identify some “false” hi-res music generated using bit shifting.

Setting the output device’s bit depth to that of the audio content automatically is an essential feature of a bit-accurate player.

Integer Mode

Some audiophile players provide a toggle named integer mode. This is a macOS-only concept — if the app also has a Windows or Linux release, you won’t find the exact setting there.

A simplified digital signal link can be expressed roughly like this:

Digital signal link of an audiophile player for macOS.

The driver sends audio data to the output device in the interface format asked by that device (such as 24-bit integer) but allows apps to offer audio data in a different virtual format (such as 32-bit floating-point number). Enabling integer mode means using a virtual format that is also integral.

  • For 32-bit source formats, bit-accurate playback can only be achieved in integer mode because 32-bit IEEE-754 floating-point numbers can only represent 25-bit signed integers.
  • Although bit-accurate playback is possible with or without integer mode enabled for 24- or 16-bit source formats, integer mode avoids an extra lossless conversion from 32-bit floating-point to 24- or 16-bit integer in the driver.

Integer mode should be automatically enabled by an audiophile player when possible. It is a clever marketing gimmick when exposed or promoted to end users.

Exclusive Mode

Exclusive mode may also be called hog mode.

You can hear Messages’ alerts when watching YouTube — the driver allows multiple apps to simultaneously use the same output device. “But how,” you may ask, “an output device has only one input!” The answer is: the driver mixes the sound up.

However, sometimes you may not want or cannot allow such mixing to happen:

  • You don’t want to hear any alert sound when listening to Mahler’s “Resurrection.”
  • When playing DSD content in DoP mode, the DoP flag will be lost after mixing, and the D/A converter will fall back to PCM mode. Also, DSD content can not be mixed.

Exclusive/hog mode solves this problem: a hogged output device accepts only one input — other apps cannot perform I/O on it.

An audiophile player should automatically enter or exit exclusive mode to play DSD content or avoid interference.

I/O Buffer Size

I/O buffer size is a continuous value (e.g., 512 samples). The setting may be presented as a slider, a text field adjusting an integral number, or in mysterious forms such as mode a/b.

We know that the driver produces no audio data; it is a porter of audio data. The driver periodically requests audio data from apps to pass audio data to an output device. This is called an I/O process, like moving packages. Here is the question: how fast should the pace be? For pro-audio apps, the answer is “neither too fast nor too slow”:

  • Doing it every millisecond leads to high processor overhead: the package-moving operation has to be performed 1,000 times per second
  • Doing it once per minute leads to increased output latency: the audio generated at 0 seconds is not ported until 60 seconds

I/O buffer size adjusts the pace of the package-moving operation — the larger the buffer, the lower the frequency. For playback purposes, there is no requirement for low latency. Audiophile players should automatically select the large applicable I/O buffer to reduce CPU usage. Letting users set it themselves makes less sense.

I/O Ratio

As far as playback is concerned, I/O ratio or I/O procedure duration is irrelevant. Don’t worry if you cannot find this setting.

Although it sounds like jargon, it is not that hard to understand — if the driver transfers audio data every 1 second (I/O buffer size = 1 second), how long will it take from when you hit a snare in Garage Band to when you hear the sound from your speakers? Don’t rush to answer “1 second” because the correct answer is “maybe 2 seconds.

When the IO buffer is 1 second long, it can take up to 2 seconds to hear the snare.

After the driver requests audio data from an app, it will not let the output device come to read immediately. The driver knows that an app can take up to 1 second to produce audio data of 1 second. If the driver requests audio data from the app at 1.0 seconds, the driver usually lets the output device come to read at 2.0 seconds, which is the earliest you can hear the snare (additional latencies ignored).

Some pro-audio apps do not accept such a high latency, so they promise the driver: “Bro, I am fast. I need less than 0.1 seconds to fill up this 1-second buffer. Just let the output device come to read at 0.1 seconds.” With this commitment, the output delay was reduced by 0.9 seconds.

For macOS, this commitment is called I/O cycle usage, which pro-audio apps use to fight against I/O latency. It makes zero sense for playback purposes.

Memory Playback

Sometimes it is also called cache size or buffer size. The setting may be presented as a toggle or a slider (or text field) adjusting some value in MB or GB.

Memory playback looks remarkable: the D/A converter directly access decoded audio data in the RAM! Unfortunately, the reality is not that beautiful: when you stubbornly dump a decoded DSD 256 album into the memory heap, macOS has no choice but to swap them back to your poor internal SSD.

The following feature/setting is as deceptive as this one.

System Optimization

If you cannot find such a setting in your audiophile players, it’s all right.

Turn off some system services, reduce CPU usage and RF interference, sound quality improved! Well, this has been falsified as early as ten years ago.

The new Tonal app, which will be introduced later, has low CPU consumption (around 1.2% on an Apple M1 Pro chip when playing DSD 256 with the window hidden) — that fact alone is not enough to prove its playback quality.

The Music app uses 13.8% of the CPU while playing 16/44 audio content.

There is no need to be anxious about CPU usage all the time. When an app becomes sluggish or simply not responding, start with the Activity Monitor to understand the consumption of system resources and analyze the rationality.

Humans use tools, not the other way around — neither system services nor third-party services harm playback quality.

Good Design is Honest

I never understood why some audiophile players exhibit professionalism via unnecessary playback settings. This is not honest in Dieter Rams’ 10 principles for good design.

Some settings may make a difference under extreme conditions, but should end users be responsible for setting them up? For others, some may argue that the absence of evidence is not evidence of absence, but Tonal won’t position itself in the grey area.

There is no good reason to expose even one playback setting to end users for a bit-accurate player with no DSP to tweak and volume controlled by the preamplifier or D/A converter.

Still don’t believe me?

Enter Tonal

Tonal is an audiophile player for macOS.

To prove my point, I made Tonal, an audiophile player for macOS, configuration free — it has preferences but no settings, not a single one.

Know Your Output Device

With Tonal, you can easily verify your D/A converter’s specifications. From the screenshot below, Tonal reveals that my D/A converter supports the following:

  • USB Audio Class 2.0 protocol
  • Asynchronous transfer mode
  • 128-level volume adjustment
  • Bit depths of 16, 24, and 32
  • Sample rates up to 768 kHz and DSD 256
Tonal reveals the specification of a D/A converter in the middle column.

Predictable Playback

With Tonal, your expectations are pretty clear regarding playback quality: from CD quality to DSD 256, as long as supported by your D/A converter, playback is always bit-accurate and properly handled internally.

How Does Tonal Sound?

You may be surprised that all correctly implemented bit-accurate solutions share the same sonic performance in theory and practice. Find more details here.

If you are still curious or believe that subjective listening experience is the ultimate standard for all audiophile products, please try it yourself.

Before You Start

Tonal is a misfit in many waysit does not fit everyone’s needs, and for those who choose Tonal, Tonal won’t be their only player:

  • Due to the always bit-accurate strategy, you can neither listen to 192 kHz albums on your Mac’s built-in speakers nor play a DSD album on a PCM-only D/A converter.
  • Tonal collects albums into its managed directory, which contains packed lossless audio data in a uniform encoding (but no music metadata). If you cannot make an extra, standalone space for Tonal, whether internal or external, on a NAS or an SD card, there may be a better time for you to experience Tonal.
By 2030, a $50 SSD can store over 30,000 CD-quality albums. Source: Wikibon
  • Tonal accepts lossless and complete discs only. CD-quality discs must also be AccurateRip verified (Tonal uses CUETools to repair broken rips automatically).

You can download Tonal for free from the Mac App Store if such limitations are acceptable. At only 25 MB, Tonal is lightweight. The free version has no restrictions on features or usage. You can add up to 20 (CD-quality or high-res) discs to build a mini collection of your favorite artists.

A one-time (non-subscription) in-app purchase, priced at $99.99 for the introductory period, is offered to remove the limit. There is an even better way to unlock — if you have reviewed Tonal, please contact me for a free coupon; if you have conducted an in-depth review, an additional coupon will be provided to share with your best friend.

Please read the complete User’s Guide before downloading.

Listen Different

A homage to Apple’s “Think Different” slogan.

This article covers how Tonal handles bit-accurate playback without introducing any playback setting. This may not be the most interesting one in the series of articles on Tonal:

--

--

Baoshan Sheng
Tonal

Founder of International Classical Music Database