A Deep Technical Analysis of the Complete Architecture Rewrite
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.
| 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 |
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.
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
| 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 |
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.
| 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) |
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.
| 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+ |
Version 3.x implements adaptive oversampling that automatically adjusts based on the host sample rate:
| 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++ |
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.
| 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 |
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.