OB-Xd Sound Engine Comparison

A Deep Technical Analysis of the Complete Architecture Rewrite

Version 2.x Legacy Version 3.x New

Executive Summary

OB-Xd 3.x represents a complete ground-up rewrite of the synthesis engine, not an incremental update. The new architecture fundamentally reimagines how the synthesizer processes audio, transitioning from an object-oriented per-voice model to a data-oriented SIMD-optimized design.

Code Increase
5.2x
Voice Count
4x more
SIMD Width
8-wide AVX2
Unison Voices
16 per note

1. Fundamental Architecture

OB-Xd 2.x Architecture

  • Object-Oriented Design - Each voice is a self-contained class instance
  • Per-Voice Processing - Voices processed sequentially in a loop
  • Scalar Math - All calculations done one sample at a time
  • ~3,700 lines of engine code
  • Fixed 32 voices maximum
  • No polyphonic unison - Single voice per note

OB-Xd 3.x Architecture

  • Data-Oriented Design - Voice data stored in structure-of-arrays format
  • SIMD Batch Processing - 4-8 voices processed simultaneously
  • Vectorized Math - AVX2/NEON parallel operations
  • ~19,400 lines of engine code
  • 128 voice slots (32 playable notes)
  • Full polyphonic unison - Up to 16 voices per note

2. Voice Architecture & Polyphony

Feature OB-Xd 2.x OB-Xd 3.x
Maximum Voice Slots 32 128
Playable Notes 32 (configurable 1-32) 32 (configurable 1-32)
Unison Voices per Note 1 (no true polyphonic unison) 1-16 voices per note
Voice Allocation Simple queue-based Voice groups with packing optimization
Stereo Spread Basic panning 8-position pan spread per unison stack
Volume Compensation Manual Automatic square root compensation

New: Polyphonic Unison System

Version 3.x introduces true polyphonic unison where each played note can trigger multiple detuned voices. For example, with 8-note polyphony and 4-voice unison, you get 32 total voices creating massive, rich textures while maintaining full polyphonic playability.

3. SIMD & Performance Optimization

OB-Xd 2.x Processing

  • No SIMD optimization in synthesis core
  • Sequential voice loop processing
  • Each voice processed independently
  • Standard C++ scalar operations
  • Per-voice oversampling/decimation

OB-Xd 3.x Processing

  • Full AVX2 support (8-wide float operations)
  • NEON fallback (4-wide for older CPUs)
  • Runtime CPU detection and dispatch
  • FMA (Fused Multiply-Add) instructions
  • Shared oversampling with optimized FIR
  • SIMD-optimized transcendentals (exp2, tan)

SIMD Vector Operations

The new engine processes 8 voices simultaneously using AVX2 instructions:

AVX2 8-Wide Processing (256-bit registers):

Performance Impact:
- Oscillators: 8x throughput
- Filters: 8x throughput
- Envelopes: 8x throughput
- Theoretical speedup: 4-6x real-world

4. Oscillator Implementation

Feature OB-Xd 2.x OB-Xd 3.x
Anti-Aliasing Method BLEP (Band-Limited Step) BLEP + BLAMP (improved)
BLEP Table Resolution 64x oversampling 64x oversampling
BLEP Application Scalar loop SIMD vectorized
Kernel Interpolation Basic Linear interpolation between kernels
Triangle Wave BLEP only BLAMP (integrated BLEP for slopes)
Hard Sync Accuracy Good Sub-sample accurate (1/64 sample)
Waveforms Saw, Pulse, Triangle Saw, Pulse, Triangle

BLEP vs BLAMP for Triangle Waves

Version 2.x uses standard BLEP for all waveforms, which handles step discontinuities well but isn't optimal for triangle waves which have slope (derivative) discontinuities.

Version 3.x adds BLAMP (Band-Limited rAMP) specifically for triangle waves, providing mathematically correct anti-aliasing for derivative discontinuities. This results in cleaner triangle waves with better high-frequency rejection.

5. Filter Implementation

OB-Xd 2.x Filter

  • 2-pole SVF with diode-pair modeling
  • 4-pole ladder with atan() saturation
  • Per-voice filter instances
  • Multimode: LP, BP, HP interpolation
  • Self-oscillation via feedback boost
  • Fixed resonance compensation

OB-Xd 3.x Filter

  • 2-pole SVF with polynomial feedback
  • 4-pole ladder with damping function
  • Vectorized filter bank (8 filters parallel)
  • Multimode: LP, BP, HP, Notch interpolation
  • Self-oscillation push mode
  • Dynamic resonance compensation
  • DC blocking filter
  • Brightness pre-filter (7-30kHz)

Filter Topology Details

Aspect OB-Xd 2.x OB-Xd 3.x
Nonlinearity Model diodePairResistanceApprox() polynomial Refined polynomial + damping function
Self-Oscillation Single mode Normal + "Push" mode for stronger oscillation
DC Removal Simple high-pass 2-pole DC blocker (30Hz corner)
Brightness Control Post-oscillator only Pre-filter brightness (configurable 7-30kHz)
Processing Scalar (1 filter/cycle) SIMD (8 filters/cycle with AVX2)

6. Envelope Generator

OB-Xd 2.x Envelopes

  • State-machine ADSR
  • Fixed attack curve shape
  • Coefficient-based timing
  • Per-voice random deviation
  • Legato modes supported

OB-Xd 3.x Envelopes

  • State-machine ADSR
  • Adjustable attack shape (asymptote 1.05-10.0)
  • RC circuit-modeled curves
  • Per-voice random deviation
  • Legato modes supported
  • Independent shape control per envelope

Refined Attack Envelope Shape (New in 3.x)

Version 3.x introduces a sophisticated logarithmic-linear attack slider that models authentic analog RC (resistor-capacitor) charging circuits. The adjustable asymptote parameter (1.05 to 10.0) allows users to shape attack curves from nearly linear (gentle pads) to aggressive exponential (percussive plucks).

This circuit-accurate implementation recreates the characteristic "punch" of vintage analog envelopes, where the attack phase naturally accelerates toward its target rather than rising linearly.

7. Oversampling & Quality Modes

Feature OB-Xd 2.x OB-Xd 3.x
Oversampling Options 1x, 2x (HQ mode) 1x, 2x, 4x
Decimation Filter Per-voice decimator Shared SIMD-optimized FIR
Filter Taps (2x) ~32 taps 63-127 taps (adaptive)
Filter Taps (4x) N/A 127-255 taps (adaptive)
Sample Rate Adaptation Fixed filters Automatic filter selection based on SR
High SR Optimization None Auto-reduces OS at 96kHz+

Intelligent Oversampling

Version 3.x implements adaptive oversampling that automatically adjusts based on the host sample rate:

  • At 44.1/48kHz: Full oversampling (2x or 4x) with long FIR filters
  • At 88.2/96kHz: Reduced oversampling with shorter filters
  • At 176.4/192kHz: Oversampling disabled (already sufficient)

8. Codebase Statistics

Metric OB-Xd 2.x OB-Xd 3.x Change
Engine Code (lines) ~3,700 ~19,400 +5.2x
Header Files 21 43 +2x
Oscillator Files 4 (SawOsc, PulseOsc, TriangleOsc, ObxdOscillatorB) 1 (VectorizedOscillators.h - unified) Consolidated
SIMD Wrapper Files 0 2 (AVX2Wrapper.h, NEONWrapper.h) New
Template-Based Code Minimal Extensive (8 templated headers) Modern C++

9. Sound Characteristics Comparison

OB-Xd 2.x Sound Character

  • Classic OB-X emulation
  • Warm, slightly soft sound
  • Good anti-aliasing via BLEP
  • Characteristic filter resonance
  • Per-voice analog imperfections
  • Maximum 32 voices (can sound thin)
  • No polyphonic unison (less depth)

OB-Xd 3.x Sound Character

  • Enhanced OB-X/OB-Xa emulation
  • Cleaner, more precise sound
  • Superior anti-aliasing (BLEP + BLAMP)
  • Enhanced filter with push mode
  • Per-voice analog imperfections (expanded)
  • 128 voices for massive textures
  • 16-voice unison for huge sounds
  • Adjustable envelope attack shapes
  • Brightness control for tonal shaping

Sonic Improvements

Why 3.x Can Sound "Bigger"

  • Polyphonic Unison: Stack up to 16 detuned voices per note, creating massive supersaw-style sounds while maintaining polyphony
  • More Voices: 128 total voices means no voice stealing in complex passages
  • Better Triangle Waves: BLAMP anti-aliasing produces cleaner, more defined triangle tones
  • Attack Shaping: Adjustable envelope curves allow punchy attacks or smooth swells
  • Filter Push Mode: Enhanced self-oscillation for screaming filter sweeps

Preset Compatibility

Version 3.x maintains backward compatibility with version 2.x presets. Legacy presets load correctly, with the default envelope asymptote set to 1.11111 (the original v2 value) for consistent sound reproduction. New features like attack shape and polyphonic unison can be enabled per-preset.

10. Summary: Key Differences

Category OB-Xd 2.x OB-Xd 3.x Impact
Architecture Object-oriented, scalar Data-oriented, SIMD 4-6x performance
Voice Count 32 maximum 128 slots, 32 playable Polyphonic unison
Unison None 1-16 voices/note Massive sounds
SIMD None AVX2 (8-wide) / NEON (4-wide) CPU efficiency
Oscillator AA BLEP BLEP + BLAMP Cleaner triangles
Envelope Shape Fixed Adjustable (1.05-10.0) More expression
Oversampling 1x, 2x 1x, 2x, 4x (adaptive) Better quality
Filter Features Standard Push mode, DC block, brightness Tonal control
Code Size ~3,700 lines ~19,400 lines 5.2x larger

Conclusion

OB-Xd 3.x represents a complete reimagining of the synthesis engine, not merely an incremental update. The transition from object-oriented scalar processing to data-oriented SIMD vectorization delivers substantial performance improvements while enabling new features like polyphonic unison that would have been computationally prohibitive in the v2 architecture.

Key benefits for users:

The sound character remains true to the Oberheim heritage while gaining modern capabilities that make OB-Xd 3.x competitive with commercial virtual analog synthesizers.