Analyse de faisabilit\u00e9 : 8 Nouveaux Presets Pad pour les Harmonies¶
Date : 2026-07-28 Statut : Pr\u00e9d\u00e9ployment pour analyse
1. Analyse de l'Architecture Existant¶
1.1 Pipeline d'Harmonie Actuel¶
Le moteur d'harmonie (HarmonyEngine.h/cpp) fonctionne selon ce sch\u00e9ma :
Input f0 (Hz) + Scale Info
|
v
getHarmonyNotes() -> [f1, f2, f3, f4] (freqs)
|
v
Per-voice loop (per-block, per-sample):
- Phase accumulation (sin-based oscillator)
- Tone waveform selection (switch on toneMode 0-5)
- Amplitude envelope (smoothstep attack, one-pole decay)
- Stereo panning (fixed per voice: R, L, RR, LL)
|
v
Output buffer -> Gain matching -> Mix with dry signal
1.2 Contraintes Technique Majeure¶
Le HarmonyEngine::renderHarmonies() op\u00e8re dans une boucle for (int i = 0; i < numSamples; ++i) par \u00e9chantillon. Chaque \u00e9chantillon doit \u00eatre calcul\u00e9 en O(1) avec une complexit\u00e9 minimale.
Ressources DSP disponibles :
| Ressource | Disponibilit\u00e9 | Usage actuel |
|-----------|-----------------|--------------|
| std::sin() (oscillateur sinuso\u00efdal) | Oui (JUCE) | Fundamental + harmoniques |
| Harmoniques 2\u00e8me, 3\u00e8me, 4\u00e8me | Oui (sin(n*p)) | Tous les presets |
| Enveloppe d'amplitude | Oui (smoothstep+one-pole) | Attack/release global |
| LFO传统 | Non | Aucun module |
| Filtre IIR (LP/HP/BP/PEAK) | Non (sauf FormantPreserver) | Aucun filtre de tonalit\u00e9 |
| Effets (Delay/Reverb/Chorus/Distortion) | Reverb unique (post-pipeline) | Non utilis\u00e9 pour les tones |
| Modulation d'amplitude | Oui (ring mod sur vocoder) | Vocoder-like uniquement |
| Saturation | Oui (tanh()) | Synth Lead uniquement |
| Phase accumulation persistante | Oui (variable phase par voix) | Tous les presets |
| \u00c9tat par voix | phases[], amplitudes[] | 2 vecteurs |
1.3 Param\u00e8tres Utilisables pour la Synth\u00e8se¶
Les seuls param\u00e8tres de modulation disponibles en temps r\u00e9el par \u00e9chantillon sont :
1. Phase (phase / p) : unique variable de temps interne \u00e0 l'oscillateur
2. Harmoniques sin(2*p), sin(3*p), sin(4*p) : 3 variantes
3. Param\u00e8tre color (0.0-1.0) : param\u00e8tre continu global par pr\u00e9set
4. Amplitude enveloppe (amp) : enveloppe LFO par note (pas par \u00e9chantillon)
5. Saturation tanh() : non-lin\u00e9arit\u00e9 utilisable
6. \u00c9tat persistant par voix : phases[] (1 vecteur double)
1.4 Limites Critiques¶
| Limite | D\u00e9tail | Impact |
|---|---|---|
| Pas de filtre | Pas de bande-passante, pas de r\u00e9sonance | Impossible de cr\u00e9er un v\u00e9ritable "formant sweeping" |
| Pas de LFO | Pas d'oscillateur basse-fr\u00e9quence ind\u00e9pendant | Impossible de faire un "breathe" r\u00e9el (modulation < 1 Hz) |
| Pas de delay | Pas de m\u00e9moire d'\u00e9chantillon | Pas de chorus, phaser, delays |
| Pas de wavetable | Uniquement sin/n*sin | Impossible de cr\u00e9er des ondes complexes natives |
| Par \u00e9chantillon | Chaque \u00e9chantillon doit \u00eatre O(1) | Toute m\u00e9moire > 1 double par voix est un risque CPU |
| Max 4 harmoniques | sin(4*p) | Pas d'harmoniques sup\u00e9rieures \u00e0 4\u00e8me |
1.5 Strat\u00e9gie de Synth\u00e8se Propos\u00e9e¶
\u00c9tant donn\u00e9 ces contraintes, toutes les nouvelles sons doivent \u00eatre impl\u00e9ment\u00e9s exclusivement via : - Combinaisons pond\u00e9r\u00e9es des harmoniques existantes (base, h2, h3, h4) - Modulation de phase (d\u00e9rive de phase lente pour simuler un LFO) - Saturation tanh() (chaleur, distorsion douce) - Modulation d'amplitude (ring modulation, amplitude sweep) - Panoramique dynamique (d\u00e9placement entre canaux gauche/droit via phase) - Interpolation entre harmoniques (simuler du filtering par redistribution spectral) - \u00c9tats persistants par voix (1 \u00e0 2 doubles max pour m\u00e9moire lente)
Aucun nouveau module DSP externe n'est requis. L'impl\u00e9mentation se fait dans renderHarmonies() seulement.
2. Les 8 Nouveaux Presets Pad Propos\u00e9s¶
2.1 N\u00b06 : \"Shimmer\"¶
Identit\u00e9 sonore : Pad ethereux avec un l\u00e9ger d\u00e9doublement d'octave au-dessus et une lueur r\u00e9sonnante. Comparable \u00e0 un shimpedal de synth\u00e9 (Roland Juno Shimmer, Prophet Shimmer).
Cha\u00eene de synth\u00e8se :
Shimmer = 0.45*f1 + 0.35*f1detuned + 0.12*h2 + 0.05*h3 + 0.03*(2f1)
f1detuned = sin(phase * (1 + slowPhaseWander))
slowPhaseWander = sin(phase * 0.008) * 0.003 // ultra lente
(2f1) = sin(2*f1_phase) // 2\u00e8me "sub-octave" via phase doubling
Param\u00e8tres techniques :
- D\u00e9rive de phase lente (sin(phase*0.008)*0.003) simul\u00e9 via phase modulation
- 7e composante : octavisation haute fr\u00e9quence
- Pas de saturation
- Enveloppe l\u00e8chement plus long (release +20%)
Int\u00e9gration : 1 \u00e9tat persistant suppl\u00e9ment (shimmerPhase) dans phases[]
Color parameter : Module la largeur de d\u00e9rive de phase (0.008 \u00b1 0.004*color)
2.2 N\u00b07 : \"Warm Sub-Pad\"¶
Identit\u00e9 sonore : Pad grave et enveloppant, centr\u00e9 sur les basse et fondamentale. Comparable \u00e0 un accesspad analogique (Yamaha CS-80 bass pad, Sequential Prophet pad grave).
Cha\u00eene de synth\u00e8se :
Warm = 0.55*f1 + 0.25*f1sub + 0.12*h2 + 0.06*tanh(0.8*f1)
f1sub = sin(0.5 * phase) // sous-oscillateur octave en dessous
Param\u00e8tres techniques :
- Sous-oscillateur \u00e0 octave en dessous (sin(phase/2))
- L\u00e9g\u00e8re saturation tanh sur la fondamentale pour chaleur
- \u00c9nergie principalement dans le bas du spectre (< 500 Hz)
- Panoramique large (L/R \u00e9tendu)
Int\u00e9gration : 0 \u00e9tat persistant suppl\u00e9mentaire (sub calcul\u00e9 directement)
Color parameter : Module le saturation (tanh(0.8*color*f1)) et la force du sub (0.25*color)
2.3 N\u00b08 : \"Glass\"¶
Identit\u00e9 sonore : Son cristallin, m\u00e9tallique, avec des harmoniques aigus nets. Comparable \u00e0 un glass harmonica, glockenspiel synth\u00e9tique, ou patch \"crystal\" de Korg Prophecy.
Cha\u00eene de synth\u00e8se :
Param\u00e8tres techniques : - Pond\u00e9ration extr\u00eamement orient\u00e9e vers les harmoniques 3 et 4 - Saturation l\u00e9g\u00e8re sur h3 pour accentuer le c\u00f4t\u00e9 m\u00e9tallique - Attaque tr\u00e8s rapide (smoothstep court), release moyen - Pas de modulation, son pur et direct
Int\u00e9gration : 0 \u00e9tat suppl\u00e9mentaire
Color parameter : D\u00e9place l'\u00e9quilibre h3/h4 (0.40 \u00b1 0.15*color sur h3, 0.25 \u00b1 0.15*color sur h4)
2.4 N\u00b09 : \"Breath\"¶
Identit\u00e9 sonore : Pad inspir\u00e9 du souffle vocal, sans formants prononc\u00e9s, oscillant doucement. Comparable \u00e0 un breath pad de Native Instruments \"Rozart Voices\" ou \"Session Brass\" pad.
Cha\u00eene de synth\u00e8se :
Breath = (0.6*f1 + 0.2*h2 + 0.15*h3 + 0.05*h4) * breathEnv
breathEnv = 0.5 + 0.5 * sin(phaseSlow)
phaseSlow += phaseInc * breathSpeed // accumulateur lent
breathSpeed = 0.0008 \u00b1 0.0004*color // ~1-2 Hz \u00e0 44.1kHz
Param\u00e8tres techniques :
- Accumulateur de phase lent ind\u00e9pendant (phaseBreath \u00e0 ajouter)
- Enveloppe de souffle appliqu\u00e9e sur tout le signal
- Pond\u00e9ration douce privil\u00e9giant fondamentale et 2\u00e8me harmonique
- Pas de saturation
Int\u00e9gration : 1 \u00e9tat persistant suppl\u00e9mentaire (phaseBreath par voix, initialis\u00e9 al\u00e9atoirement pour \u00e9viter la synchronisation)
Color parameter : Module la vitesse du breath (0.0008 \u00b1 0.0004*color) et la profondeur de l'enveloppe
2.5 N\u00b010 : \"Analog Pad\"¶
Identit\u00e9 sonore : Pad analogique chaud \u00e0 onde triangulaire synth\u00e9tique, comparable \u00e0 un Juno-60 pad, Oberheim OB-6, ou Korg MS-20 pad.
Cha\u00eene de synth\u00e8se :
// Approximation triangulaire par somme de sin
TriangleApprox = f1 - 0.25*h2 + 0.11*h3 - 0.06*h4 // s\u00e9rie de Fourier r\u00e9duite
Analog = 0.7*TriangleApprox + 0.2*f1 + 0.1*f1detuned
f1detuned = sin(phase * (1 + detune))
detune = sin(phase*0.01) * 0.002 // d\u00e9rive de phase ultra lente
Param\u00e8tres techniques :
- Approximation de onde triangulaire (s\u00e9rie de Fourier tronqu\u00e9e \u00e0 4 termes)
- L\u00e9g\u00e8re d\u00e9rive de phase (synchro-drift caract\u00e9ristique des synth\u00e9s analogiques)
- Saturation tanh l\u00e9g\u00e8re (tanh(1.1*Analog))
- Enveloppe moyenne (attack 35ms, release 80ms)
Int\u00e9gration : 0 \u00e9tat suppl\u00e9mentaire (l'allonge de phase est calcul\u00e9e \u00e0 partir de phase existant)
Color parameter : Module la quantit\u00e9 de d\u00e9rive (0.002*color) et de saturation
2.6 N\u00b011 : \"CinePad\"¶
Identit\u00e9 sonor : Grand pad orchestral/cin\u00e9matographique, large et immersif, comparable \u00e0 un pad de Hans Zimmer ou Two Steps From Hell.
Cha\u00eene de synth\u00e8se :
CinePad = 0.35*f1 + 0.25*f1detuned + 0.15*h2 + 0.12*h3 + 0.08*h4 + 0.05*tanh(0.6*h2)
f1detuned = sin(phase*(1+0.008)) + sin(phase*(1-0.008)) // double detune large
Param\u00e8tres techniques : - Triple d\u00e9doublement (fondamentale + 2 d\u00e9saccords larges) - Pond\u00e9ration \u00e9quilibr\u00e9e sur toutes les harmoniques - L\u00e9g\u00e8re saturation sur h2 pour corpulence - Enveloppe longue (attack 50ms, release 120ms) - Panoramique large
Int\u00e9gration : 0 \u00e9tat suppl\u00e9mentaire (d\u00e9saccords statiques bas\u00e9s sur phase)
Color parameter : Module la largeur du d\u00e9saccord (0.008 \u00b1 0.004*color) et la saturation
2.7 N\u00b012 : \"Wobble\"¶
Identit\u00e9 sonor : Pad modul\u00e9 par un battement rapide caract\u00e9ristique (analogie : LFO d\u00e9saccord, style wobble bass mais en milieu/aigu). Comparable \u00e0 un viber wobble de Moog ou un flanger tr\u00e8s l\u00e9ger.
Cha\u00eene de synth\u00e8se :
// Wobble par interm\u00e9diaire de phase oscillante
WobbleBase = 0.5*f1 + 0.3*h2 + 0.15*h3 + 0.05*h4
wobblePhase = sin(phaseSlow)
wobblePhase += phaseInc * wobbleSpeed
wobbleSpeed = 0.006 \u00b1 0.003*color // ~8-15 Hz \u00e0 44.1kHz
// Modulation de phase rapide
wobble = WobbleBase + 0.04 * wobblePhase * sin(2*f1_phase)
Param\u00e8tres techniques :
- Accumulateur de phase lent ind\u00e9pendant (phaseWobble \u00e0 ajouter)
- L'accumulateur module une petite quantit\u00e9 d'harmonique (PM l\u00e9ger)
- Vitesse ~8-15 Hz (audible mais pas tr\u00e8s rapide)
- Pas de saturation
Int\u00e9gration : 1 \u00e9tat persistant suppl\u00e9mentaire (phaseWobble par voix)
Color parameter : Module la vitesse (0.006 \u00b1 0.003*color) et la profondeur de modulation
2.8 N\u00b013 : \"ReverseReverb\"¶
Identit\u00e9 sonor : Pad avec un swell progressif caract\u00e9ristique (comme un reverse reverb). Le son monte en intensit\u00e9 de mani\u00e8re organique, simulant l'effet de reverb invers\u00e9e. Comparable \u00e0 un pad de Cocteau Twins ou Radiohead.
Cha\u00eene de synth\u00e8se :
ReverseBase = 0.5*f1 + 0.2*h2 + 0.15*h3 + 0.1*h4
reverseEnv = 1.0 - exp(-phaseRevRev)
reverseEnv = max(0.0, min(1.0, reverseEnv))
reverseEnv = smooth(reverseEnv) // enveloppe douce
phaseRevRev += phaseInc * revSpeed
revSpeed = 0.003 // ~1 cycle par mesure (rapide)
Param\u00e8tres techniques :
- Accumulateur de phase lent ind\u00e9pendant (phaseRevRev par voix)
- Enveloppe exponentielle montante sur tous les \u00e9chantillons
- Pond\u00e9ration \u00e9quilibr\u00e9e sur fondamentale + harmoniques m\u00e9dium
- L\u00e9g\u00e8re saturation tanh
Int\u00e9gration : 1 \u00e9tat persistant suppl\u00e9mentaire (phaseRevRev par voix, initialis\u00e9 \u00e0 0 au restart)
Color parameter : Module la vitesse (0.003 \u00b1 0.002*color) et la saturation
3. V\u00e9rification de Faisabilit\u00e9 Technique¶
3.1 Tableau de Faisabilit\u00e9¶
| N\u00b0 | Preset | Nbre \u00c9tats Supp. | Complexit\u00e9 CPU | Faisabilit\u00e9 | Remarques |
|---|---|---|---|---|---|
| 6 | Shimmer | 1 (shimmerPhase) |
Faible (\u2248+2 sin/cycle) | \u2705 Oui | Modulation de phase directe |
| 7 | Warm Sub-Pad | 0 | Tr\u00e8s faible | \u2705 Oui | Calcul direct sin(phase/2) |
| 8 | Glass | 0 | Tr\u00e8s faible | \u2705 Oui | Combinatoire simple |
| 9 | Breath | 1 (phaseBreath) |
Faible (\u2248+2 sin/cycle) | \u2705 Oui | Accumulateur lent + multiplier |
| 10 | Analog Pad | 0 | Faible | \u2705 Oui | Approximation s\u00e9rie Fourier |
| 11 | CinePad | 0 | Faible | \u2705 Oui | Multiple detune statique |
| 12 | Wobble | 1 (phaseWobble) |
Moyen (\u2248+3 sin/cycle) | \u26a0\ufe0f Attention | 3 appels sin additionnels |
| 13 | ReverseReverb | 1 (phaseRevRev) |
Faible | \u2705 Oui | exp() + accumulateur |
3.2 \u00c9volution de la M\u00e9moire par Voix¶
| \u00c9tat | Avant | Apr\u00e8s ajout pad |
|---|---|---|
phases (double) |
8 oct. | 12-16 oct. (si 1-2 \u00e9tats lent) |
amplitudes (float) |
4 oct. | 4 oct. (inchang\u00e9) |
targetAmps (float) |
4 oct. | 4 oct. (inchang\u00e9) |
attackSamplesRemaining (int) |
4 oct. | 4 oct. (inchang\u00e9) |
attackTotalSamples (int) |
4 oct. | 4 oct. (inchang\u00e9) |
attackStartAmp (float) |
4 oct. | 4 oct. (inchang\u00e9) |
voicePrevGate (uint8) |
1 oct. | 1 oct. (inchang\u00e9) |
| Total par voix | ~29 oct. | ~33-37 oct. (+14% max) |
Risques m\u00e9moire : N\u00e9gligeables. La m\u00e9moire par voix n'augmente que de 14% maximum.
3.3 Risques CPU¶
Le seul vrai risque est le Wobble (N\u00b012) qui ajoute 3 appels sin() par \u00e9chantillon suppl\u00e9mentaires.
Estimation :
- sin() sur x86_64 avec SSE/AVX: ~15-25 cycles
- 4 voix \u00d7 3 sin \u00d7 44100 \u00e9ch/s \u2248 5.3 millions de sin/s par bloc
- \u00c0 2.5 GHz CPU : ~0.2% de c\u0153ur suppl\u00e9mentaire par bloc
- Impact : N\u00e9gligeable sur tout CPU moderne m\u00eame 1\u00e8re g\u00e9n\u00e9ration
3.4 Int\u00e9gration dans l'Architecture Existante¶
Fichiers \u00e0 modifier :
| Fichier | Modifications |
|---------|--------------|
| HarmonyEngine.h | ajouter 1-2 std::vector<double> pour \u00e9tats lents (max 2) |
| HarmonyEngine.cpp | 1. prepare() : redimensionner vecteurs. 2. renderHarmonies() : switch addtionnel pour cas 6-13. 3. setVoiceGate() : reset \u00e9tats lents si besoin |
| PluginProcessor.cpp | rien (aucun nouveau param\u00e8tre, toneMode existe d\u00e9j\u00e0) |
| PluginProcessor.h | rien |
| PluginEditor.cpp | 1. Ajouter les noms dans le ComboBox Harmony Tone. 2. Traduction en 6 langues si n\u00e9cessaire |
Nouveaux param\u00e8tres n\u00e9cessaires : Aucun. Tous les pr\u00e9sets utilisent les param\u00e8tres existants (harmony_tone choice, harmony_tone_color continuous).
Retrocompatibilit\u00e9 : Tous les pr\u00e9sets existants (0-5) restent inchang\u00e9s. L'ajout de cas dans le switch est non-destructif.
Conclusion : L'impl\u00e9mentation est entri\u00e8rement faisable sans aucun nouveau module DSP externe. Tout se fait dans le switch de renderHarmonies().
4. Planning de D\u00e9veloppement et de Tests¶
4.1 Phase 1 : Impl\u00e9mentation de Base (4 nouveaux presets)¶
Packets : Glass + Warm Sub-Pad + Analog Pad + CinePad (N\u2078, 7, 10, 11)
Crit\u00e8re de s\u00e9curit\u00e9 : 0 \u00e9tat suppl\u00e9mentaire par voix. Complexit\u00e9 CPU minimale.
T\u00e2ches :
1. Ajouter 4 case dans le switch (toneMode) de renderHarmonies() (HarmonyEngine.cpp)
2. Ajouter 4 pr\u00e9sets dans le ComboBox de PluginEditor.cpp
3. Traduire les 4 noms en 6 langues (OVTLanguages.h)
4. Tests unitaires de validation (RMS, clipping, CPU)
Dur\u00e9e : 1 session de d\u00e9veloppement
4.2 Phase 2 : Tests d'Identit\u00e9 Sound (Phase 1)¶
Activit\u00e9 : \u00c9coute comparative side-by-side sur \u00e9coutes haute qualit\u00e9 (casque/open-back) et environnements vari\u00e9s.
M\u00e9thodologie : 1. Cr\u00e9er un projet test dans un DAW : chanter une s\u00e9rie d'accords diatoniques (Am, C, F, G) 2. Pour chaque accord, passer en revue les 4 nouveaux presets \u00e0 volume \u00e9galis\u00e9 3. Noter pour chaque pr\u00e9set : - Distinction claire par rapport aux autres nouveaux presets (note 1-5) - Distinction claire par rapport aux pr\u00e9sets existants (Choir, Vocoder-like) (note 1-5) - Pl\u00e2it sonore g\u00e9n\u00e9ral (note 1-5) - Probl\u00e8mes perceptibles (clipping, resonances, sons \"morts\")
Crit\u00e8re d'acceptation : Tous les pr\u00e9sets doivent obtenir une note d'identit\u00e9 \u22653/5 par rapport \u00e0 tous les autres.
4.3 Phase 3 : Impl\u00e9mentation \u00e9volu\u00e9e (4 nouveaux presets)¶
Packets : Shimmer + Breath + Wobble + Reverse Reverb (N\u2076, 9, 12, 13)
Crit\u00e8re : 1 \u00e9tat suppl\u00e9mentaire par voix pour chaque. Validation CPU.
T\u00e2ches :
1. Ajouter les std::vector<double> n\u00e9cessaires dans HarmonyEngine.h
2. Initialiser et g\u00e9rer les nouveaux \u00e9tats dans prepare() et renderHarmonies()
3. Ajouter les case dans le switch (N\u2076, 9, 12, 13)
4. Ajouter les 4 nouveaux pr\u00e9sets dans le ComboBox et traduire
5. Tests de validation CPU avec profiling
Dur\u00e9e : 1-2 sessions de d\u00e9veloppement
4.4 Phase 4 : Tests Comparatifs Complets¶
Activit\u00e9 : M\u00eame proc\u00e9dure que Phase 2 mais sur les 12 presets (6 existants + 8 nouveaux).
Sc\u00e9narios d'\u00e9coute : 1. Voix masculine grave (Bass/Tenor) avec accords mineurs 2. Voix feminine aigu\u00eb (Alto/Soprano) avec accords majeurs 3. Monodie (note unique, pas d'accord) pour \u00e9valuer le caract\u00e8re du pad 4. Tempo rapide (chant r\u00e9p\u00e9titif) pour tester les attaques 5. Tempo lente (notes longues) pour tester les d\u00e9veloppements 6. Avec/br sans reverb pour v\u00e9rifier la compatibilit\u00e9 avec les effets
Crit\u00e8re d'acceptation : M\u00eame m\u00e9trique que Phase 2 (note d'identit\u00e9 \u22653/5 partout).
4.5 Phase 5 : Optimisation et Raffinements¶
T\u00e2ches : 1. Ajuster les pond\u00e9rations bas\u00e9es sur les retours d'\u00e9coute 2. \u00c9galiser le volume RMS entre tous les presets (gain match) 3. Ajuster les enveloppes si n\u00e9cessaire (certains presets peuvent b\u00e9n\u00e9ficier d'attack/release sp\u00e9cifiques) 4. V\u00e9rifier la compatibilit\u00e9 avec les diff\u00e9rents modes de d\u00e9tection de gamme
Dur\u00e9e : 1 session
4.6 Planning R\u00e9sum\u00e9¶
| Phase | Contenu | Dur\u00e9e Estim\u00e9e | D\u00e9pendances |
|---|---|---|---|
| Phase 1 | Impl\u00e9m. (Glass, SubPad, Analog, CinePad) | 1 session | Aucune |
| Phase 2 | Tests identit\u00e9 Phase 1 | 1 session | Phase 1 termin\u00e9e |
| Phase 3 | Impl\u00e9m. \u00e9volu\u00e9e (Shimmer, Breath, Wobble, RevRvb) | 1-2 sessions | Phase 2 valid\u00e9e |
| Phase 4 | Tests complets 12 presets | 1-2 sessions | Phase 3 termin\u00e9e |
| Phase 5 | Optimisation/ajustements | 1 session | Phase 4 valid\u00e9e |
Total estim\u00e9 : 4-6 sessions de d\u00e9veloppement + 2-4 sessions de test
5. Contraintes Techniques et Limites \u00e0 Anticiper¶
5.1 Limites Inherent\u00e8s \u00e0 l'Architecture Sin/Cos¶
| Limite | Impact | Att\u00e9nuation |
|---|---|---|
| Pas de vraie forme d'onde | Impossible de g\u00e9n\u00e9rer saw, square, triangle r\u00e9elle | Approximation par s\u00e9rie de Fourier (limit\u00e9e \u00e0 4 termes) |
| Pas de filtre passe-bas/r\u00e9sonant | Impossible de cr\u00e9er un \"filter sweep\" v\u00e9ritable | Interpolation entre harmoniques simule un sweep spectral |
| Pas de delay/feedback | Pas de chorus, flanger, phaser, delay naturel | Simul\u00e9 par d\u00e9saccords de phase (chorus artificiel) |
| Pas de vrai LFO < 1Hz | Pas de m\u00e9lodious vibrato vraiment lent | Simul\u00e9 par accumulateur de phase \u00e0 tr\u00e8s basse vitesse |
5.2 Risques de Qualité Sonore¶
Risque 1 : Confusion de timbre Les pr\u00e9sets utilisant les m\u00eames harmoniques avec pond\u00e9rations diff\u00e9rentes risque d'\u00eatre trop similaires (ex: Glass vs CinePad peuvent sonner proches). - Att\u00e9nuation : Diff\u00e9rencier fortement les pond\u00e9rations et utiliser des effets secondaires (saturation pour CinePad, pas de saturation pour Glass)
Risque 2 : Clipping/Overload La saturation tanh peut cr\u00e9er des pics si l'amplitude n'est pas bien contr\u00f4l\u00e9e. - Att\u00e9nuation : Limiter l'amplitude d'entr\u00e9e de tanh (\u22641.5) et pr\u00e9server le clamp existant (lignes 417-419 de HarmonyEngine.cpp)
Risque 3 : Synchronisation des accumulateurs
Les accumulateurs lents (breath, shimmer, wobble, reverse) peuvent se synchroniser entre voix si initialis\u00e9s de mani\u00e8re d\u00e9terministe.
- Att\u00e9nuation : Initialiser al\u00e9atoirement (random.nextDouble() * twoPi) ou d\u00e9caler par index de voix (phase * (1.0 + 0.001 * voiceIndex))
Risque 4 : R\u00e9sonance fr\u00e9quente Certaines combinaisons d'harmoniques peuvent cr\u00e9er des battements ind\u00e9sirables (beat frequencies) entre voix邻近s de la m\u00eate harmonie. - Att\u00e9nuation : Limiter les d\u00e9saccords \u00e0 < 10 cents et s'assurer que les pr\u00e9sets avec d\u00e9saccord (Shimmer, Analog, CinePad) ne sont pas utilis\u00e9s avec des harmonies serr\u00e9es (octaves)
5.3 Contraintes Audio Mat\u00e9rielles¶
| Contrainte | Impact |
|---|---|
| Fr\u00e9quence d'\u00e9chantillonnage | \u00c0 44.1 kHz, l'harmonique 4 \u00e0 200 Hz = 800 Hz (OK). \u00c0 44.1 kHz, l'harmonique 4 \u00e0 700 Hz = 2800 Hz (encore OK, mais limite Nyquist si f0 > 1000 Hz) |
| Sortie st\u00e9r\u00e9o | Tous les presets utilisent le panoramique fixe existant. Aucun n\u00e9cessite un panoramique dynamique |
| Latence | Les nouveaux presets n'ajoutent quasi aucun Latence (pas de m\u00e9moire tampon) |
5.4 Sc\u00e9narios Utilis\u00e0 Proscrire¶
\u00c9viter d'utiliser : - Wobble sur des intervalles tr\u00e8s serr\u00e9s (tiers, unisson) : les battements s'additionnent au lieu de se combiner harmonieusement - Glass sur des notes trop aig\u00fces (> 800 Hz) : les harmoniques 3 et 4 approchent de la limite Nyquist - Shimmer avec des harmonies d'octaves : la sous-octave haute peut cr\u00e9er un effet \"ring mod\" non d\u00e9sir\u00e9 avec les autres voix - Warm Sub-Pad en sortie mono : le sous-oscillateur \u00e0 octave en dessous peut \u00eatre inaudible ou cr\u00e9er des probl\u00e8mes de phase
6. R\u00e9sum\u00e9 Ex\u00e9cutif¶
Synth\u00e8se des Contraintes¶
- Architecture actuelle : Synth\u00e8se additive sinuso\u00efdale pure, sans filtre ni LFO externe
- Contrainte principale : Tout doit fonctionner dans une boucle par \u00e9chantillon O(1), avec < 2 doubles d'\u00e9tat suppl\u00e9mentaire par voix
- Faisabilit\u00e9 : \u2705 100% faisable sans nouveau module DSP externe
R\u00e9sum\u00e9 des 8 Presets Propos\u00e9s¶
| N\u00b0 | Nom | Type | Complexit\u00e9 | \u00c9tats Supp. | Risque |
|---|---|---|---|---|---|
| 6 | Shimmer | Pad ethereux octavi\u00e9 | Faible | 1 | Tr\u00e8s faible |
| 7 | Warm Sub-Pad | Pad grave chaud | Tr\u00e8s faible | 0 | Aucun |
| 8 | Glass | Pad cristallin aigu | Tr\u00e8s faible | 0 | Aucun |
| 9 | Breath | Pad souffle oscillant | Faible | 1 | Faible |
| 10 | Analog Pad | Pad triangulaire chaud | Faible | 0 | Tr\u00e8s faible |
| 11 | CinePad | Grand pad orchestral | Faible | 0 | Tr\u00e8s faible |
| 12 | Wobble | Pad modul\u00e9 battement | Moyen | 1 | Moyen |
| 13 | Reverse Reverb | Pad swell progressif | Faible | 1 | Faible |
Plan D\u00e9ploiement Recommand\u00e9¶
- Imm\u00e9diat : Impl\u00e9menter les 4 presets sans \u00e9tat suppl\u00e9mentaire (N\u2078, 7, 10, 11)
- Post-validation : Impl\u00e9menter les 4 presets avec \u00e9tat suppl\u00e9mentaire (N\u2076, 9, 12, 13)
- Total du projet : 4-6 sessions de d\u00e9veloppement + 2-4 sessions de tests
Co\u00fbt Estim\u00e9 (en ressources de d\u00e9veloppement)¶
- Code : ~300-500 lignes de modifications (HarmonyEngine.h/cpp + PluginEditor.cpp + OVTLanguages.h)
- Tests : ~2-3 jours d'\u00e9coute comparative
- Risque global : Faible (\u00e0 condition de valider la phase 1 avant de passer \u00e0 la phase 3)
Fin du rapport.