Comparaison du moteur sonore OB-Xd

Une analyse technique approfondie de la réécriture complète de l'architecture

Version 2.x Ancienne Version 3.x Nouvelle

Résumé exécutif

OB-Xd 3.x représente une réécriture complète du moteur de synthèse, pas une simple mise à jour incrémentielle. La nouvelle architecture réinvente fondamentalement la manière dont le synthétiseur traite l'audio, en passant d'un modèle orienté objet par voix à une conception orientée données optimisée pour le SIMD.

Augmentation du code
5,2x
Nombre de voix
4x plus
Largeur SIMD
AVX2 8 voies
Voix d'unison
16 par note

1. Architecture fondamentale

Architecture OB-Xd 2.x

  • Conception orientée objet - Chaque voix est une instance de classe autonome
  • Traitement par voix - Les voix sont traitées séquentiellement en boucle
  • Calcul scalaire - Tous les calculs effectués un échantillon à la fois
  • ~3 700 lignes de code moteur
  • 32 voix maximum
  • Pas d'unison polyphonique - Une seule voix par note

Architecture OB-Xd 3.x

  • Conception orientée données - Données de voix stockées en format structure de tableaux
  • Traitement par lots SIMD - 4 à 8 voix traitées simultanément
  • Calcul vectorisé - Opérations parallèles AVX2/NEON
  • ~19 400 lignes de code moteur
  • 128 emplacements de voix (32 notes jouables)
  • Unison polyphonique complet - Jusqu'à 16 voix par note

2. Architecture des voix et polyphonie

Fonctionnalité OB-Xd 2.x OB-Xd 3.x
Emplacements de voix maximum 32 128
Notes jouables 32 (configurable 1-32) 32 (configurable 1-32)
Voix d'unison par note 1 (pas de vrai unison polyphonique) 1 à 16 voix par note
Allocation des voix Simple file d'attente Groupes de voix avec optimisation de compactage
Étendue stéréo Panoramique de base Répartition panoramique 8 positions par empilement unison
Compensation de volume Manuelle Compensation automatique par racine carrée

Nouveau : Système d'unison polyphonique

La version 3.x introduit un véritable unison polyphonique où chaque note jouée peut déclencher plusieurs voix désaccordées. Par exemple, avec 8 notes de polyphonie et 4 voix d'unison, vous obtenez 32 voix totales créant des textures massives et riches tout en maintenant une jouabilité polyphonique complète.

3. Optimisation SIMD et performances

Traitement OB-Xd 2.x

  • Pas d'optimisation SIMD dans le cœur de synthèse
  • Traitement séquentiel en boucle de voix
  • Chaque voix traitée indépendamment
  • Opérations scalaires C++ standard
  • Suréchantillonnage/décimation par voix

Traitement OB-Xd 3.x

  • Support AVX2 complet (opérations flottantes 8 voies)
  • Solution de repli NEON (4 voies pour CPU anciens)
  • Détection et répartition CPU à l'exécution
  • Instructions FMA (Fused Multiply-Add)
  • Suréchantillonnage partagé avec FIR optimisé
  • Fonctions transcendantales optimisées SIMD (exp2, tan)

Opérations vectorielles SIMD

Le nouveau moteur traite 8 voix simultanément en utilisant les instructions AVX2 :

Traitement AVX2 8 voies (registres 256 bits) :

Impact sur les performances :
- Oscillateurs : débit 8x
- Filtres : débit 8x
- Enveloppes : débit 8x
- Accélération théorique : 4-6x en conditions réelles

4. Implémentation des oscillateurs

Fonctionnalité OB-Xd 2.x OB-Xd 3.x
Méthode anti-crénelage BLEP (Band-Limited Step) BLEP + BLAMP (amélioré)
Résolution de la table BLEP Suréchantillonnage 64x Suréchantillonnage 64x
Application du BLEP Boucle scalaire Vectorisé SIMD
Interpolation du noyau Basique Interpolation linéaire entre noyaux
Onde triangulaire BLEP uniquement BLAMP (BLEP intégré pour les pentes)
Précision hard sync Bonne Précision sous-échantillon (1/64 échantillon)
Formes d'onde Dent de scie, Impulsion, Triangle Dent de scie, Impulsion, Triangle

BLEP vs BLAMP pour les ondes triangulaires

Version 2.x utilise le BLEP standard pour toutes les formes d'onde, ce qui gère bien les discontinuités d'étape mais n'est pas optimal pour les ondes triangulaires qui ont des discontinuités de pente (dérivée).

Version 3.x ajoute le BLAMP (Band-Limited rAMP) spécifiquement pour les ondes triangulaires, fournissant un anti-crénelage mathématiquement correct pour les discontinuités de dérivée. Cela produit des ondes triangulaires plus propres avec une meilleure réjection des hautes fréquences.

5. Implémentation du filtre

Filtre OB-Xd 2.x

  • SVF 2 pôles avec modélisation paire de diodes
  • Échelle 4 pôles avec saturation atan()
  • Instances de filtre par voix
  • Multimode : interpolation PB, PB, PH
  • Auto-oscillation via amplification de rétroaction
  • Compensation de résonance fixe

Filtre OB-Xd 3.x

  • SVF 2 pôles avec rétroaction polynomiale
  • Échelle 4 pôles avec fonction d'amortissement
  • Banque de filtres vectorisés (8 filtres parallèles)
  • Multimode : interpolation PB, PB, PH, Coupe-bande
  • Mode push d'auto-oscillation
  • Compensation de résonance dynamique
  • Filtre de blocage DC
  • Préfiltre de brillance (7-30kHz)

Détails de la topologie du filtre

Aspect OB-Xd 2.x OB-Xd 3.x
Modèle de non-linéarité Polynôme diodePairResistanceApprox() Polynôme raffiné + fonction d'amortissement
Auto-oscillation Mode unique Mode normal + mode "Push" pour oscillation renforcée
Suppression DC Passe-haut simple Bloqueur DC 2 pôles (coupure 30Hz)
Contrôle de brillance Post-oscillateur uniquement Brillance préfiltre (configurable 7-30kHz)
Traitement Scalaire (1 filtre/cycle) SIMD (8 filtres/cycle avec AVX2)

6. Générateur d'enveloppe

Enveloppes OB-Xd 2.x

  • ADSR à machine d'états
  • Forme de courbe d'attaque fixe
  • Temporisation basée sur coefficients
  • Déviation aléatoire par voix
  • Modes legato supportés

Enveloppes OB-Xd 3.x

  • ADSR à machine d'états
  • Forme d'attaque ajustable (asymptote 1,05-10,0)
  • Courbes modélisées sur circuit RC
  • Déviation aléatoire par voix
  • Modes legato supportés
  • Contrôle de forme indépendant par enveloppe

Forme d'enveloppe d'attaque raffinée (Nouveau en 3.x)

La version 3.x introduit un curseur d'attaque logarithmique-linéaire sophistiqué qui modélise les circuits de charge RC (résistance-condensateur) analogiques authentiques. Le paramètre d'asymptote ajustable (1,05 à 10,0) permet aux utilisateurs de façonner les courbes d'attaque d'une forme presque linéaire (pads doux) à une forme exponentielle agressive (plucks percussifs).

Cette implémentation précise du circuit recrée le "punch" caractéristique des enveloppes analogiques vintage, où la phase d'attaque accélère naturellement vers sa cible plutôt que de monter linéairement.

7. Suréchantillonnage et modes de qualité

Fonctionnalité OB-Xd 2.x OB-Xd 3.x
Options de suréchantillonnage 1x, 2x (mode HQ) 1x, 2x, 4x
Filtre de décimation Décimateur par voix FIR partagé optimisé SIMD
Taps du filtre (2x) ~32 taps 63-127 taps (adaptatif)
Taps du filtre (4x) N/A 127-255 taps (adaptatif)
Adaptation à la fréquence d'échantillonnage Filtres fixes Sélection automatique de filtre selon SR
Optimisation SR élevée Aucune Réduit auto l'OS à 96kHz+

Suréchantillonnage intelligent

La version 3.x implémente un suréchantillonnage adaptatif qui s'ajuste automatiquement en fonction de la fréquence d'échantillonnage de l'hôte :

  • À 44,1/48kHz : Suréchantillonnage complet (2x ou 4x) avec filtres FIR longs
  • À 88,2/96kHz : Suréchantillonnage réduit avec filtres plus courts
  • À 176,4/192kHz : Suréchantillonnage désactivé (déjà suffisant)

8. Statistiques du code source

Métrique OB-Xd 2.x OB-Xd 3.x Changement
Code moteur (lignes) ~3 700 ~19 400 +5,2x
Fichiers d'en-tête 21 43 +2x
Fichiers d'oscillateurs 4 (SawOsc, PulseOsc, TriangleOsc, ObxdOscillatorB) 1 (VectorizedOscillators.h - unifié) Consolidé
Fichiers de wrapper SIMD 0 2 (AVX2Wrapper.h, NEONWrapper.h) Nouveau
Code basé sur templates Minimal Étendu (8 en-têtes avec templates) C++ moderne

9. Comparaison des caractéristiques sonores

Caractère sonore OB-Xd 2.x

  • Émulation classique OB-X
  • Son chaud, légèrement doux
  • Bon anti-crénelage via BLEP
  • Résonance de filtre caractéristique
  • Imperfections analogiques par voix
  • Maximum 32 voix (peut sonner mince)
  • Pas d'unison polyphonique (moins de profondeur)

Caractère sonore OB-Xd 3.x

  • Émulation améliorée OB-X/OB-Xa
  • Son plus propre et précis
  • Anti-crénelage supérieur (BLEP + BLAMP)
  • Filtre amélioré avec mode push
  • Imperfections analogiques par voix (étendues)
  • 128 voix pour textures massives
  • Unison 16 voix pour sons énormes
  • Formes d'enveloppe d'attaque ajustables
  • Contrôle de brillance pour façonnage tonal

Améliorations sonores

Pourquoi la 3.x peut sonner "plus grosse"

  • Unison polyphonique : Empilez jusqu'à 16 voix désaccordées par note, créant des sons massifs de type supersaw tout en maintenant la polyphonie
  • Plus de voix : 128 voix totales signifie aucun vol de voix dans les passages complexes
  • Meilleures ondes triangulaires : L'anti-crénelage BLAMP produit des tonalités triangulaires plus propres et définies
  • Façonnage d'attaque : Les courbes d'enveloppe ajustables permettent des attaques percutantes ou des montées douces
  • Mode Push du filtre : Auto-oscillation améliorée pour des balayages de filtre hurlants

Compatibilité des presets

La version 3.x maintient la rétrocompatibilité avec les presets de la version 2.x. Les presets legacy se chargent correctement, avec l'asymptote d'enveloppe par défaut réglée à 1,11111 (la valeur originale v2) pour une reproduction sonore cohérente. Les nouvelles fonctionnalités comme la forme d'attaque et l'unison polyphonique peuvent être activées par preset.

10. Résumé : Différences clés

Catégorie OB-Xd 2.x OB-Xd 3.x Impact
Architecture Orientée objet, scalaire Orientée données, SIMD Performances 4-6x
Nombre de voix 32 maximum 128 emplacements, 32 jouables Unison polyphonique
Unison Aucun 1-16 voix/note Sons massifs
SIMD Aucun AVX2 (8 voies) / NEON (4 voies) Efficacité CPU
AA Oscillateur BLEP BLEP + BLAMP Triangles plus propres
Forme d'enveloppe Fixe Ajustable (1,05-10,0) Plus d'expression
Suréchantillonnage 1x, 2x 1x, 2x, 4x (adaptatif) Meilleure qualité
Fonctionnalités filtre Standard Mode push, blocage DC, brillance Contrôle tonal
Taille du code ~3 700 lignes ~19 400 lignes 5,2x plus grand

Conclusion

OB-Xd 3.x représente une reconception complète du moteur de synthèse, pas simplement une mise à jour incrémentielle. La transition d'un traitement scalaire orienté objet vers une vectorisation SIMD orientée données offre des améliorations de performances substantielles tout en permettant de nouvelles fonctionnalités comme l'unison polyphonique qui auraient été prohibitives en termes de calcul dans l'architecture v2.

Avantages clés pour les utilisateurs :

Le caractère sonore reste fidèle à l'héritage Oberheim tout en acquérant des capacités modernes qui rendent OB-Xd 3.x compétitif avec les synthétiseurs analogiques virtuels commerciaux.