- Joined
- Apr 19, 2026
- Messages
- 9
- Likes
- 5
Hi!
I've been working on a macOS audio player focused on bit-perfect playback, and I've reached the point where I need perspectives beyond my own. This is my first post here, and I'd like to start with an open discussion about the design choices and tradeoffs I've made. If there's enough interest, I'm also looking for a small group willing to test it on their own systems.
The core design question I'd like to put to this community:
Most audio players for macOS advertise "bit-perfect" playback, but very few include any way to verify the claim. I built mine with a set of measurement tools specifically to close that gap. The question I'd like feedback on: is the approach sound, or am I missing something?
Here's what the player does:
The signal path has zero processing between the file and the DAC. No EQ, no DSP, no upsampling, no volume control (gain is always unity). This isn't a missing feature list, it's the point: the only job of the player is to deliver unmodified samples to the hardware.
Two playback paths: a direct CoreAudio IOProc with hog mode and non-mixable format negotiation when the DAC supports it, and an AVAudioEngine fallback for devices that don't (built-in output, Bluetooth, AirPlay). The path selection is automatic. The user always knows which one is active.
The measurement/verification side (where I'd value this forum's input the most):
Some open questions I'd genuinely like feedback on:
Looking forward to hearing what this community thinks, whether or not you want to test it.
Thank you!
EDIT: you can test a beta version of VeraVox here: VeraVox (beta program)
I've been working on a macOS audio player focused on bit-perfect playback, and I've reached the point where I need perspectives beyond my own. This is my first post here, and I'd like to start with an open discussion about the design choices and tradeoffs I've made. If there's enough interest, I'm also looking for a small group willing to test it on their own systems.
The core design question I'd like to put to this community:
Most audio players for macOS advertise "bit-perfect" playback, but very few include any way to verify the claim. I built mine with a set of measurement tools specifically to close that gap. The question I'd like feedback on: is the approach sound, or am I missing something?
Here's what the player does:
The signal path has zero processing between the file and the DAC. No EQ, no DSP, no upsampling, no volume control (gain is always unity). This isn't a missing feature list, it's the point: the only job of the player is to deliver unmodified samples to the hardware.
Two playback paths: a direct CoreAudio IOProc with hog mode and non-mixable format negotiation when the DAC supports it, and an AVAudioEngine fallback for devices that don't (built-in output, Bluetooth, AirPlay). The path selection is automatic. The user always knows which one is active.
The measurement/verification side (where I'd value this forum's input the most):
- Bit-Perfect Test (BPT): Sample-by-sample comparison of output vs. loopback input, aligned by calibrated latency via cross-correlation. Binary pass/fail: either every sample matches or it doesn't. I'd be very curious to hear if anyone sees flaws in this methodology, or knows of edge cases where this kind of test gives false confidence.
- Stream Inspector: Real-time status of the signal chain. Reports whether the path is bit-perfect, if the fade envelope is active (the player uses a 50 ms gain ramp for click-free transitions, so bit-perfect is technically broken during pause, seek, and track skip - track changes are gapless), if synthetic fill was injected, or if a buffer underrun occurred. For DSD over DoP, it tracks marker alternation and flags phase errors. It also shows effective bit depth and DAC sync state, and logs every anomaly with sub-sample timestamps.
- Signal Generator: Sine, beat (two detuned tones), Lissajous patterns, correlated noise, impulse bursts, 0 dBFS reference. Everything is routed through the normal playback path (same IOProc, same ring buffer, same DAC output), so you're measuring the actual signal chain, not a synthetic shortcut.
- Measurement Engine: dBFS RMS + peak with A-weighting and C-weighting (IEC 61672 biquad cascade), 16384-point FFT with parabolic interpolation for sub-Hz frequency accuracy, L/R phase via Goertzel single-bin DFT, loopback latency calibration.
- Loopback Capture: Dedicated AUHAL input-only unit, independent from the playback engine.
- DAC Diagnostic Panel: Enumerates every physical stream format the DAC exposes (sample type, bit depth, rate ranges, mixable vs. non-mixable). Shows the currently active format and the maximum non-mixable capability.
- Audio Analysis: Offline FFT spectrum analysis with “fake” hi-res detection (identifies files that claim high resolution but carry no energy above a lower-resolution cutoff frequency).
- Vectorscope: Metal-accelerated, Tektronix-style, 2048-tap FIR decimation filter, dual-channel.
Some open questions I'd genuinely like feedback on:
- The BPT relies on loopback capture + cross-correlation for latency alignment. Are there known pitfalls with this approach on macOS (beyond the obvious fact that it only tests the digital path up to the loopback point)?
- The fade envelope means the player is technically not bit-perfect for roughly 50 ms during transitions. I chose this tradeoff to avoid clicks. Is there a better approach that doesn't compromise the signal during normal playback?
- For DSD, the player uses DoP exclusively (no native DSD over USB). Is there significant demand for native DSD on macOS, or is DoP generally considered adequate?
- The "fake hi-res detection" uses spectral energy analysis above the expected Nyquist frequency of the source resolution. Anyone aware of better heuristics for this, or cases where this method gives false positives?
Looking forward to hearing what this community thinks, whether or not you want to test it.
Thank you!
EDIT: you can test a beta version of VeraVox here: VeraVox (beta program)
Attachments
Last edited: