DeepPluck V0.14.0 – Scale-Aware Voicing Engine
Verbindliche Funktions- und Test-Spezifikation – Revision 1

Status: VERBINDLICH EINGEFRORENE SPEZIFIKATION / FÜR MASTERPROMPT FREIGEGEBEN
Datum: 2026-09-11
Freigabe als Planungsgrundlage: 2026-09-11
Implementierung: ERST NACH SEPARATEM AUSFÜHRUNGSAUFTRAG
Ausgangsbasis: Commit 4a4bf0ee1aff453ebc27bf91718ffa3216fa74c4
Ausgangsversion: DeepPluck V0.13.1

===============================================================================
1. VERBINDLICHE GRUNDLAGEN
===============================================================================

Vor jeder späteren Planung oder Implementierung muss Codex zuerst vollständig
lesen und befolgen:

Docs/Sound/DeepPluck_Sound_Manifest_v1.0.md

Das Sound Manifest bleibt normativ. Bei einem Konflikt hat es Vorrang, sofern
diese Spezifikation keine ausdrücklich genehmigte, begründete Ausnahme enthält.

Die Scale-Aware Voicing Engine soll DeepPluck zu einem besseren Instrument für
emotionale Deep-, Melodic-, Organic- und Progressive-House-Plucks machen. Sie
darf DeepPluck nicht zu einem allgemeinen Begleitautomaten, Arranger oder
Allzweck-Synthesizer erweitern.

Diese Datei definiert ausschließlich den geplanten Vertrag. Mit ihrer Erstellung
wird ausdrücklich noch keine Implementierung, Versionsänderung, Build-Ausführung
oder Git-Änderung außerhalb dieser Spezifikationsdatei freigegeben.

===============================================================================
2. PRODUKTZIEL
===============================================================================

Eine einzelne eingehende MIDI-Note soll – bei aktivierter Engine – abhängig von
einer vorgegebenen Tonart und Skala automatisch den harmonisch passenden
diatonischen Akkord erzeugen.

Beispiel bei C Major und Seventh:

C -> Cmaj7
D -> Dmin7
E -> Emin7
F -> Fmaj7
G -> G7
A -> Amin7
B -> Bm7b5

Die Akkordqualität darf nicht global auf Major oder Minor festgelegt sein. Sie
muss sich aus der gespielten Skalenstufe ergeben.

Aus einer einzelnen MIDI-Note kann eine Tonart nicht zuverlässig erkannt werden.
Root und Scale werden deshalb ausdrücklich vom Benutzer eingestellt. Eine
automatische Tonarterkennung wird nicht vorgetäuscht.

===============================================================================
3. FESTGELEGTER V0.14.0-FUNKTIONSUMFANG
===============================================================================

3.1 Bedienelemente

- On: Engine ein/aus
- Root: C, C#, D, D#, E, F, F#, G, G#, A, A#, B
- Scale: Major, Natural Minor, Dorian, Harmonic Minor
- Chord: Triad oder Seventh
- Inversion: Root, 1st, 2nd, 3rd / +8ve
- Voicing: Close, Open oder Deep

3.2 Sichere Defaults

- On = Off
- Root = C
- Scale = Major
- Chord = Seventh
- Inversion = Root
- Voicing = Open

Da On standardmäßig Off ist, müssen neue und migrierte alte Zustände zunächst
exakt das bisherige V0.13.1-Spielverhalten behalten.

3.3 Skalenfremde Noten

Eine Note, deren Pitch Class nicht zur eingestellten Skala gehört, wird als
einzelne unveränderte Note durchgereicht.

Sie wird nicht:

- zur nächsten Skalennote verschoben,
- quantisiert,
- verworfen,
- automatisch als Major oder Minor interpretiert oder
- mit zusätzlichen Akkordtönen versehen.

Damit verändert DeepPluck keine bewusst gespielte chromatische Note heimlich.

3.4 Trigger-Modell

Der V0.14.0-Kern arbeitet im aktivierten Akkordmodus als monophone
Ein-Finger-Voicing-Engine. Genau ein eingehender Trigger besitzt zu einem
Zeitpunkt den aktiven Akkord. Eine neue Note ersetzt den vorherigen aktiven
Akkord samplegenau.

Engine Off erhält die vorhandene polyphone Spielweise unverändert. Mehrere
gleichzeitig unabhängige Ein-Finger-Akkorde sind kein V0.14.0-Ziel und dürfen
nicht durch eine halbfertige Mehrfach-Ownership-Lösung vorweggenommen werden.

Die monophone Begrenzung verhindert in V0.14.0 mehrdeutige Note-Off-Zuordnung bei
überlappenden Akkorden mit gemeinsamen Tönen. Eine spätere polyphone Chord-
Ownership-Erweiterung benötigt einen eigenen, ausdrücklich genehmigten Vertrag.

3.5 Nicht in V0.14.0

- Strumming oder zeitversetzte Akkordtöne
- automatisches Voice Leading
- automatische Tonart- oder Akkorderkennung
- Cubase Chord-Track-Integration
- MIDI-Ausgabe
- MPE oder per-note Expression
- frei programmierbare Akkordintervalle
- Chord Learn oder Chord Memory
- Arpeggiator oder Sequencer
- Scale Snap für skalenfremde Noten
- Randomisierung der Voicing-Engine
- neue Factory-Presets oder Änderungen vorhandener Factory-Werte
- neue Effekte, Oszillatoren oder Modulationsziele

Strumming und automatisches Voice Leading sind frühestens Kandidaten für einen
separaten V0.14.1-Milestone nach vollständiger V0.14.0-Abnahme.

===============================================================================
4. SKALENTABELLEN
===============================================================================

Alle Werte sind Halbtonabstände relativ zum eingestellten Root. Die Berechnung
für alle zwölf Tonarten erfolgt ausschließlich durch Transposition modulo 12.
Die folgenden vier Tabellen decken dadurch sämtliche Roots ab.

Scale            Stufe 1  Stufe 2  Stufe 3  Stufe 4  Stufe 5  Stufe 6  Stufe 7
Major               0        2        4        5        7        9       11
Natural Minor       0        2        3        5        7        8       10
Dorian              0        2        3        5        7        9       10
Harmonic Minor      0        2        3        5        7        8       11

Referenznoten bei Root C:

Major:          C, D, E, F, G, A, B
Natural Minor:  C, D, Eb, F, G, Ab, Bb
Dorian:         C, D, Eb, F, G, A, Bb
Harmonic Minor: C, D, Eb, F, G, Ab, B

Die interne Berechnung verwendet ausschließlich MIDI-Notennummern und
Halbtonintervalle. Enharmonische Schreibweisen beeinflussen den Klang nicht.
Für die kompakte Root-Auswahl werden in V0.14.0 einheitlich Kreuznamen verwendet.

===============================================================================
5. VOLLSTÄNDIGE AKKORDQUALITÄTS- UND INTERVALLTABELLEN
===============================================================================

Intervalle stehen relativ zur tatsächlich gespielten Akkordgrundnote.

Abkürzungen:

Maj       = Major Triad                 [0, 4, 7]
Min       = Minor Triad                 [0, 3, 7]
Dim       = Diminished Triad            [0, 3, 6]
Aug       = Augmented Triad             [0, 4, 8]
Maj7      = Major Seventh               [0, 4, 7, 11]
Min7      = Minor Seventh               [0, 3, 7, 10]
Dom7      = Dominant Seventh            [0, 4, 7, 10]
HalfDim7  = Half-Diminished / m7b5      [0, 3, 6, 10]
Dim7      = Diminished Seventh          [0, 3, 6, 9]
MinMaj7   = Minor-Major Seventh         [0, 3, 7, 11]
AugMaj7   = Augmented Major Seventh     [0, 4, 8, 11]

5.1 Major

Stufe   Triad                         Seventh
I       Maj      [0, 4, 7]           Maj7      [0, 4, 7, 11]
ii      Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
iii     Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
IV      Maj      [0, 4, 7]           Maj7      [0, 4, 7, 11]
V       Maj      [0, 4, 7]           Dom7      [0, 4, 7, 10]
vi      Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
vii     Dim      [0, 3, 6]           HalfDim7  [0, 3, 6, 10]

Root-C-Referenz:

C / Cmaj7, Dm / Dm7, Em / Em7, F / Fmaj7,
G / G7, Am / Am7, Bdim / Bm7b5

5.2 Natural Minor

Stufe   Triad                         Seventh
i       Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
ii      Dim      [0, 3, 6]           HalfDim7  [0, 3, 6, 10]
III     Maj      [0, 4, 7]           Maj7      [0, 4, 7, 11]
iv      Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
v       Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
VI      Maj      [0, 4, 7]           Maj7      [0, 4, 7, 11]
VII     Maj      [0, 4, 7]           Dom7      [0, 4, 7, 10]

Root-C-Referenz:

Cm / Cm7, Ddim / Dm7b5, Eb / Ebmaj7, Fm / Fm7,
Gm / Gm7, Ab / Abmaj7, Bb / Bb7

5.3 Dorian

Stufe   Triad                         Seventh
i       Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
ii      Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
III     Maj      [0, 4, 7]           Maj7      [0, 4, 7, 11]
IV      Maj      [0, 4, 7]           Dom7      [0, 4, 7, 10]
v       Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
vi      Dim      [0, 3, 6]           HalfDim7  [0, 3, 6, 10]
VII     Maj      [0, 4, 7]           Maj7      [0, 4, 7, 11]

Root-C-Referenz:

Cm / Cm7, Dm / Dm7, Eb / Ebmaj7, F / F7,
Gm / Gm7, Adim / Am7b5, Bb / Bbmaj7

5.4 Harmonic Minor

Stufe   Triad                         Seventh
i       Min      [0, 3, 7]           MinMaj7   [0, 3, 7, 11]
ii      Dim      [0, 3, 6]           HalfDim7  [0, 3, 6, 10]
III     Aug      [0, 4, 8]           AugMaj7   [0, 4, 8, 11]
iv      Min      [0, 3, 7]           Min7      [0, 3, 7, 10]
V       Maj      [0, 4, 7]           Dom7      [0, 4, 7, 10]
VI      Maj      [0, 4, 7]           Maj7      [0, 4, 7, 11]
vii     Dim      [0, 3, 6]           Dim7      [0, 3, 6, 9]

Root-C-Referenz:

Cm / CmMaj7, Ddim / Dm7b5, Ebaug / Ebmaj7#5, Fm / Fm7,
G / G7, Ab / Abmaj7, Bdim / Bdim7

Die spannungsreicheren Augmented-, Diminished- und Minor-Major-Seventh-Fälle
sind mathematisch beabsichtigt. Sie müssen vor Freigabe musikalisch gegen das
Sound Manifest gehört werden und dürfen nicht stillschweigend durch harmonisch
falsche Major- oder Minor-Akkorde ersetzt werden.

===============================================================================
6. EXAKTE MAPPING-REGEL
===============================================================================

Für eine eingehende MIDI-Note n und den Root-Pitch-Class-Wert r gilt:

pitchClass = n modulo 12
relativePitchClass = (pitchClass - r + 12) modulo 12

1. Suche relativePitchClass in der ausgewählten Skalentabelle.
2. Kein Treffer: Durchreiche n als einzelne Note.
3. Treffer: Der Tabellenindex bestimmt die diatonische Stufe 1..7.
4. Wähle aus der Akkordtabelle dieser Stufe Triad oder Seventh.
5. Addiere die dort angegebenen Intervalle zur originalen MIDI-Note n.
6. Wende Inversion und anschließend Voicing an.
7. Normalisiere ausschließlich Oktavlagen in den gültigen MIDI-Bereich 0..127.
8. Sortiere aufsteigend und entferne nur eventuell entstandene exakte Duplikate.

Die gespielte Note bestimmt somit die Akkordgrundnote und ihre Oktavlage. Root
und Scale bestimmen ausschließlich die passende diatonische Qualität.

===============================================================================
7. INVERSION UND VOICING
===============================================================================

7.1 Inversion

Ausgangspunkt ist die aufsteigend sortierte Close-Grundstellung.

- Root: keine Akkordnote wird versetzt.
- 1st: tiefste Akkordnote wird um 12 Halbtöne angehoben, danach neu sortieren.
- 2nd: die zwei ursprünglich tiefsten Akkordnoten werden jeweils um 12 Halbtöne
  angehoben, danach neu sortieren.
- 3rd / +8ve:
  - bei Seventh: die drei ursprünglich tiefsten Akkordnoten werden jeweils um
    12 Halbtöne angehoben; dies ist die echte dritte Umkehrung.
  - bei Triad: alle drei Akkordnoten werden um 12 Halbtöne angehoben; dies ist
    ausdrücklich eine Root-Position +8ve und keine vorgetäuschte dritte
    Dreiklangsumkehrung.

7.2 Voicing

Voicing wird nach Inversion angewendet.

- Close: keine zusätzliche Änderung.
- Open: die zweithöchste Akkordnote wird um 12 Halbtöne abgesenkt; anschließend
  neu sortieren.
- Deep: zuerst Open anwenden und anschließend die nun tiefste Akkordnote um eine
  weitere Oktave absenken.

Falls eine Absenkung unter MIDI 0 oder eine Anhebung über MIDI 127 führen würde,
wird der betroffene Ton in 12-Halbton-Schritten in den gültigen Bereich gefaltet.
Pitch Class und Akkordqualität bleiben erhalten. Nach dem Falten werden Töne
sortiert und exakte Duplikate entfernt. Es darf niemals geclampte Mehrfachnoten
auf MIDI 0 oder 127 geben.

Die Anzahl tatsächlich erzeugter Töne beträgt dadurch normalerweise drei oder
vier und darf nur an MIDI-Randlagen durch Duplikatentfernung kleiner werden.

===============================================================================
8. MIDI- UND NOTENLEBENSZYKLUS
===============================================================================

8.1 Sampleposition und Reihenfolge

- Alle erzeugten Note-Ons übernehmen Sampleposition, Kanal und Velocity des
  auslösenden Note-Ons.
- Beim Akkordwechsel werden die Note-Offs des alten Akkords an derselben
  Sampleposition vor den Note-Ons des neuen Akkords verarbeitet.
- Alle generierten Noten werden in stabiler aufsteigender MIDI-Reihenfolge
  ausgegeben.
- Note-On mit Velocity 0 wird als Note-Off behandelt.

8.2 Monophone Last-Note-Priority

- Die zuletzt gedrückte, noch gehaltene Note ist der aktive Trigger.
- Eine neue Note ersetzt den aktiven Akkord.
- Wird der aktive Trigger losgelassen und eine ältere Taste weiterhin gehalten,
  wird die zuletzt gedrückte verbleibende Taste an derselben Sampleposition
  wieder zum aktiven Trigger.
- Das Halten und die Reihenfolge werden in fest dimensionierten Strukturen
  verwaltet; Heap-Allokation ist verboten.
- Wiederholte Note-Ons derselben Kanal-/Noten-Kombination benötigen eine
  deterministische Zählregel, damit ein einzelnes Note-Off keine noch gehaltene
  Wiederholung fälschlich verliert.

8.3 Gelatchte Akkorddefinition

Root, Scale, Chord, Inversion und Voicing werden für den aktiven Akkord beim
Note-On gelatcht. Parameteränderungen verstimmen oder ersetzen keinen bereits
klingenden Akkord. Sie gelten ab dem nächsten Trigger.

8.4 Umschalten der Engine

- Off -> On: bereits gehaltene Noten werden nicht rückwirkend erweitert. Der
  nächste Note-On verwendet die Engine.
- On -> Off: alle von der Engine gehaltenen Akkordnoten werden sicher beendet.
  Eine weiterhin physisch gehaltene Triggernote wird nicht künstlich neu
  angeschlagen; der nächste Note-On verwendet wieder den normalen Pfad.

8.5 Controller und Reset

- Pitch Bend, Mod Wheel, Channel Pressure und bestehende Controllerpfade bleiben
  unverändert kanalbezogen.
- Sustain/CC64 muss ohne hängende oder vorzeitig verlorene Akkordnoten mit dem
  bestehenden Synthesizer zusammenarbeiten.
- All Notes Off, All Sound Off, Panic, prepare/release resources, Plugin-Reset,
  Host-Stop und State-Load müssen aktive Engine-Ownership vollständig löschen.
- Kein Reset darf eine Note unendlich halten oder einen späteren Note-Off auf
  einen falschen Akkord anwenden.

===============================================================================
9. VELOCITY, DYNAMIK UND HEADROOM
===============================================================================

Velocity bleibt musikalisch wirksam. Es wird kein Kompressor, Limiter, Clipper
oder automatischer Master-Gain eingeführt.

Für N tatsächlich erzeugte Akkordnoten gilt als definierter Startpunkt:

generatedVelocity = inputVelocity / sqrt(N)

Danach wird ausschließlich auf den gültigen MIDI-Velocity-Bereich begrenzt.
Alle Akkordtöne erhalten in V0.14.0 denselben skalierten Velocity-Wert. Eine
spätere musikalische Gewichtung einzelner Stimmen gehört nicht in diesen
Milestone.

Die Skalierung ist durch Peak-, Finite-, Dynamik- und Hörtests zu bestätigen.
Falls sie nachweislich Headroom oder wahrgenommene Lautheit unangemessen
beeinträchtigt, darf der Exponent nur als ausdrücklich dokumentierte und erneut
vollständig getestete Spezifikationsrevision geändert werden.

===============================================================================
10. PARAMETER- UND KOMPATIBILITÄTSVERTRAG
===============================================================================

Der bestehende öffentliche V0.11.0-Parameterblock 0..61 bleibt in jeder
Eigenschaft eingefroren: Index, ID, Hostname, Typ, Version Hint, Range,
Choice-Reihenfolge, Default, Mapping und Textsemantik dürfen sich nicht ändern.

V0.14.0 ist eine ausdrücklich geplante append-only Kompatibilitätserweiterung.
Neue Hostparameter dürfen ausschließlich hinter Index 61 angehängt werden:

Index  ID               Hostname          Typ/Choices                         Default  Hint
62     chordEnabled     Chord Engine      Bool                                Off      2
63     chordRoot        Chord Root        C,C#,D,D#,E,F,F#,G,G#,A,A#,B        C        2
64     chordScale       Chord Scale       Major,Natural Minor,Dorian,         Major    2
                                          Harmonic Minor
65     chordSize        Chord             Triad,Seventh                       Seventh  2
66     chordInversion   Chord Inversion   Root,1st,2nd,3rd / +8ve             Root     2
67     chordVoicing     Chord Voicing     Close,Open,Deep                     Open     2

V0.14.0 besitzt damit genau 68 Hostparameter. Alle neuen Parameter sind diskret;
Audio-Gain-Smoothing ist für sie weder nötig noch zulässig. Ihre Werte werden
pro Block einmal über gebundene Raw-Pointer gelesen und für neue Trigger
validiert/geclampft. Es darf keine APVTS-ID-Suche im Audio-Hotpath geben.

10.1 Host State

- Host State speichert und restauriert alle 68 Parameter.
- V0.13.1- und ältere States besitzen die neuen Werte nicht und erhalten exakt
  die oben definierten Defaults, insbesondere chordEnabled = Off.
- Ungültige, nichtfinite oder außerhalb des gültigen Choice-Bereichs liegende
  Werte werden deterministisch auf sichere Defaults bzw. gültige Indizes
  kanonisiert.
- Plugin-IDs und Bus-/MIDI-Vertrag bleiben unverändert.

10.2 Sound-Presets

Die Scale-Aware Voicing Engine ist ein projektbezogenes Performance-Werkzeug und
kein Bestandteil eines DeepPluck-Sound-Presets.

- Factory-, User-, Pack- und Imported-Presets enthalten weiterhin ausschließlich
  den eingefrorenen 62-Werte-Soundvertrag.
- Kein vorhandenes Factory-Preset oder catalog.json wird geändert.
- Preset Load, Save, Save As, Delete, Random und Random Undo verändern keinen der
  sechs Chord-Parameter.
- Ein Presetwechsel darf Root, Scale, Chord, Inversion, Voicing oder On nicht
  zurücksetzen.
- Factory-Fingerprint und Custom-Erkennung bleiben auf die 62 Soundparameter
  beschränkt.
- Alte .deeppluckpreset-Dateien bleiben unverändert lesbar.

Die Implementierung muss deshalb den 62-Werte-Soundzustand klar vom vollständigen
68-Parameter-Hostzustand trennen. Die bestehende 62er-Struktur darf nicht
unbemerkt auf 68 erweitert und dadurch in Presetdateien geschrieben werden.

10.3 Randomisierung

Alle sechs Chord-Parameter sind von Master Random, Modul-Random, Locks und Undo
ausgeschlossen. Es wird kein zusätzlicher RandomizationModule-Eintrag erzeugt.

===============================================================================
11. ARCHITEKTUR- UND REALTIME-VERTRAG
===============================================================================

- Eine fokussierte Klasse, beispielsweise DeepPluckScaleAwareVoicing, besitzt
  Skalentabellen, Akkordabbildung, gehaltene Trigger und Noten-Ownership.
- Der Processor orchestriert; der Editor besitzt keine musikalische Logik.
- Die Engine liegt ausschließlich im MIDI-Pfad vor der bestehenden
  DeepPluckSynthesiser-Eventverarbeitung.
- Oscillator, Unison, Transient, Noise, Filter, Envelopes, LFO, FX und Output
  bleiben unverändert.
- Die existierenden genau 16 vorallokierten Synthesizerstimmen bleiben erhalten.
- Kein MIDI-Ausgang wird hinzugefügt.
- Engine Off muss den ursprünglichen MIDI-Pfad ohne Transformation verwenden.
- Im Audiothread sind Allocation, Collection Growth, Locks, Datei-/Netzzugriff,
  Logging, GUI-Zugriff und APVTS-String-Lookup verboten.
- Generierte Ereignisse benötigen Streaming-Verarbeitung oder ausreichend
  vorallokierte, hart begrenzte Scratch-Strukturen.
- Ein Overflow-Vertrag muss neue Note-Ons sicher unterdrücken oder kontrolliert
  zurückfallen, dabei aber immer Note-Off/All-Notes-Off priorisieren und jede
  hängende Note verhindern. Stille dynamische Reallokation ist verboten.
- Gleiche Parameter-, MIDI- und Startzustände müssen bitdeterministisch denselben
  Eventstrom und bei Engine On denselben Audioausgang erzeugen.
- Bei Engine Off muss der vollständige bisherige Audio-Referenzvertrag bitidentisch
  bleiben.

===============================================================================
12. GUI-VERTRAG
===============================================================================

- Die vorhandene Fenstergröße bleibt unverändert.
- Die freie untere Fläche der MODULATION-Seite erhält ein neues ruhiges Panel
  mit dem Titel CHORD VOICING.
- Die sechs Controls stehen in einer klaren, streng ausgerichteten Reihe bzw.
  einem gleichmäßigen Raster und verwenden das bestehende Look-and-Feel.
- Es entstehen keine neue Hauptseite, kein Popup-Editor und kein finales
  GUI-Redesign.
- Alle Controls besitzen eindeutige Component IDs, Hover Help, Tastaturfokus,
  sichtbare Werte und korrekte Disabled-Darstellung.
- Inversion 3rd / +8ve muss seine unterschiedliche Triad-/Seventh-Bedeutung im
  Hover Help eindeutig erklären.
- Bei On = Off dürfen die fünf abhängigen Controls gedimmt werden, müssen aber
  weiterhin einstellbar bleiben, damit der Benutzer die Engine vorbereiten kann.
- Es gibt keine Random- oder Lock-Schaltflächen für dieses Panel.
- Ein Live-Akkordname oder Notendisplay ist außerhalb von V0.14.0.

===============================================================================
13. AUTOMATISIERTE TESTMATRIX
===============================================================================

13.1 Tabellen und Transposition

- Exakte Prüfung aller 12 Roots x 4 Scales x 7 diatonischen Stufen x 2
  Chord-Größen = 672 Grundabbildungen.
- Prüfung der exakten Intervallqualität jeder Tabelle, einschließlich Dom7,
  HalfDim7, Dim7, MinMaj7, Aug und AugMaj7.
- Transpositionsinvarianz: jede Root-Tabelle ist die korrekte mod-12-
  Transposition der Referenztabelle.
- Prüfung aller skalenfremden Pitch Classes in allen 48 Root/Scale-Kombinationen:
  genau eine unveränderte Note, keine Quantisierung und keine Zusatztöne.

13.2 Inversion, Voicing und MIDI-Grenzen

- Alle Inversionswerte für Triad und Seventh.
- Close, Open und Deep für repräsentative sowie Randlagen.
- MIDI-Noten 0, 1, 11, 12, 60, 116, 126 und 127.
- Alle erzeugten Werte bleiben 0..127, Pitch Classes bleiben korrekt, Reihenfolge
  ist stabil und Duplikate werden entfernt.
- Triad + 3rd / +8ve und Seventh + 3rd werden getrennt exakt geprüft.

13.3 Event- und Ownership-Verhalten

- Originale Sampleposition, Kanal und skalierte Velocity.
- Alter Note-Off vor neuem Note-On beim Wechsel an derselben Sampleposition.
- Last-Note-Priority und Rückkehr zur zuletzt noch gehaltenen Taste.
- Out-of-order Note-Offs, wiederholte gleiche Note-Ons, Velocity-0-Note-Off,
  mehrere MIDI-Kanäle, leere Blocks und Blockgrenzen.
- Sustain Down/Up, All Notes Off, All Sound Off, Panic, Host-Stop, State Load,
  prepare/release und Engine On/Off während gehaltener Noten.
- Keine hängende Note, kein falscher Akkord-Owner und keine unendliche Stimme.
- Deterministischer, realtime-sicherer Overflow-Test ohne Heap-Wachstum.

13.4 Parameter- und State-Kompatibilität

- Exakt 68 Hostparameter.
- Indizes 0..61 bleiben gegen das V0.11.0-Manifest in allen Metadaten bytegenau
  unverändert.
- Indizes 62..67 entsprechen exakt Tabelle 10.
- Alte Host States jeder unterstützten Epoche migrieren mit Engine Off und
  unverändertem 62er-Soundzustand.
- Neuer Host State restauriert alle sechs Chord-Werte.
- Ungültige, fehlende und nichtfinite neue Werte werden sicher kanonisiert.
- Plugin-ID, Hersteller-/Plugin-Code, Bundle-ID, Buslayout und MIDI-I/O bleiben
  unverändert.

13.5 Presets und Random

- Hashes, Namen, IDs, Werte und Anzahl aller 116 Factory-Presets bleiben
  unverändert.
- Factory/User/Pack/Imported Load lässt alle sechs Chord-Werte unverändert.
- User Save/Save As schreibt weiterhin genau die 62 Soundwerte.
- Alte User-Presets laden unverändert.
- Preset Custom/Fingerprint-Matching ignoriert die Chord-Werte.
- Master Random, Modul-Random, Locks und Undo verändern keinen Chord-Wert und
  konsumieren dafür keine RNG-Ziehung.

13.6 Audio, Headroom und Performance

- Engine Off: vollständiger unveränderter Audio-Nullvergleich gegen die echte
  V0.13.1-Referenz, nicht gegen eine im Kandidatenlauf erzeugte Ersatzreferenz.
- Engine On: jeder generierte Akkord entspricht exakt demselben manuell
  eingespielten Notensatz mit identisch skalierten Velocities.
- Finite-Ausgang für alle Factory-Presets, alle vier Scales, beide Chord-Größen,
  alle Inversionen/Voicings, 44.1/48/96 kHz und repräsentative Buffergrößen.
- Peak-/Headroom-Stresstests bei Velocity 1.0, Unison 4, beiden Oszillatoren,
  Transient/Noise und aktivem FX-Rack.
- Kein versteckter Limiter, kein Clipping-Maskieren und keine plötzliche
  Gain-Umschaltung.
- Velocity 0.2/0.5/0.8/1.0 bleibt streng sinnvoll dynamisch geordnet.
- Engine Off verursacht keine relevante CPU-Regression.
- Engine On bleibt in Typical-, Dense- und Worst-Case-Messungen bounded und
  realtime-sicher.

13.7 GUI

- Exakte unveränderte VST3- und Standalone-Hauptgeometrie.
- Eindeutige IDs und genau sechs neue Controls.
- Alle Parameterattachments existieren genau einmal.
- Auswahltexte, Defaults, Focus Order, Hover Help und Disabled-Zustände.
- Umschalten und Seitenwechsel verändern ohne Benutzeraktion keine Parameter.
- Bestehende Preset-Untermenüs, Outputmeter, Modulationscontrols und Footer
  bleiben geometrisch und funktional erhalten.

13.8 Vollständige Projektabnahme

- Frischer CMake-Configure mit Visual Studio 18 2026 x64.
- Warnungsfreie Debug- und Release-Builds.
- Sämtliche registrierten CTests in Debug und Release.
- Artifact-Version und lokale VST3-/Standalone-Kopien in beiden Konfigurationen.
- Native VST3-Factory-Smokes und Standalone-Start/Normal-Close-Smokes.
- Keine automatische Installation in Systemordner.
- Build, Artifacts und Testevidence bleiben Git-ignoriert.
- JUCE/ bleibt unverändert.
- Geschützte untracked Benutzerdateien bleiben unverändert und unstaged.

===============================================================================
14. MANUELLE HÖR- UND CUBASE-ABNAHME
===============================================================================

14.1 Harmonische Referenzfolgen

Mindestens folgende Folgen mit einzelnen Triggernoten spielen:

- C Major, Seventh: C - A - F - G
  Erwartung: Cmaj7 - Am7 - Fmaj7 - G7
- A Natural Minor, Seventh: A - F - C - G
  Erwartung: Am7 - Fmaj7 - Cmaj7 - G7
- D Dorian, Seventh: D - G - C - D
  Erwartung: Dm7 - G7 - Cmaj7 - Dm7
- A Harmonic Minor, Seventh: A - D - E - A
  Erwartung: AmMaj7 - Dm7 - E7 - AmMaj7

Die Akkorde müssen harmonisch korrekt, warm, musikalisch und DeepPluck-typisch
wirken. Mathematische Richtigkeit allein ist keine Hörfreigabe.

14.2 Chromatische Referenz

Bei C Major nacheinander C, C#, D spielen:

- C erzeugt den gewählten C-Akkord.
- C# bleibt exakt eine einzelne C#-Note.
- D erzeugt den passenden D-Minor-Akkord.

Es darf kein verstecktes Snapping und kein falscher C#-Major-/Minor-Akkord
entstehen.

14.3 Spielverhalten

- Langsame und schnelle Ein-Finger-Akkordfolgen.
- Überlappende gehaltene Tasten und Rückkehr per Last-Note-Priority.
- Sustain-Pedal, wiederholte Noten, Notenwechsel auf Blockgrenzen.
- Alle Inversionen und Voicings in tiefen, mittleren und hohen Lagen.
- Keine hängenden Noten, Klicks, verlorenen Note-Offs oder unerwarteten Retrigger.
- Triads und Sevenths müssen eine brauchbare Lautheitsbalance zum normalen
  Einzelnotenmodus besitzen und Headroom behalten.

14.4 Preset- und Projektverhalten

- Während Engine On Root/Scale/Voicing einstellen und mehrere Factory- sowie
  User-Presets wechseln: Chord-Einstellungen bleiben erhalten.
- Cubase-Projekt speichern, schließen und neu öffnen: alle sechs Chord-Werte
  werden korrekt restauriert.
- Altes V0.13.1-Projekt öffnen: Engine ist Off und der Sound bleibt unverändert.
- Automation zeigt zuerst die unveränderten 62 alten Parameter und danach genau
  die sechs neuen Parameter.
- Alte Automationsspuren und Presets bleiben unverändert wirksam.

14.5 Standalone

- Die vorhandene Bildschirmtastatur erzeugt bei Engine On dieselben Akkorde.
- Octave +/- bleibt korrekt.
- Audio-/MIDI-Gerätewechsel, Fokus, Panic und normales Schließen hinterlassen
  keine Note.

===============================================================================
15. DEFINITION OF DONE FÜR DEN SPÄTEREN IMPLEMENTIERUNGSMILESTONE
===============================================================================

V0.14.0 ist erst abgeschlossen, wenn:

1. alle Regeln dieser Spezifikation implementiert und dokumentiert sind;
2. die 0..61-Kompatibilität vollständig unverändert nachgewiesen ist;
3. die sechs neuen Parameter ausschließlich an 62..67 angehängt sind;
4. Engine Off im vollständigen Referenzvergleich bitidentisch bleibt;
5. alle automatisierten Debug-/Release-Gates bestanden sind;
6. Headroom, Realtime-Sicherheit, Determinismus und Note-Off-Ownership bestanden
   sind;
7. alle Factory- und User-Preset-Verträge unverändert bleiben;
8. Cubase und Standalone praktisch geprüft wurden;
9. die harmonischen Tabellen und Hörbeispiele manuell bestätigt wurden;
10. Dokumentation und finaler Implementierungsbericht vollständig sind;
11. git status nur beabsichtigte getrackte Änderungen zeigt;
12. erst danach ein ausdrücklich freigegebener Git-Commit erstellt wird.

===============================================================================
16. NÄCHSTER PLANUNGSSCHRITT
===============================================================================

Aus dieser geprüften und am 2026-09-11 als Planungsgrundlage freigegebenen
Spezifikation wird ein separater, copy-ready Implementierungs-Masterprompt
erstellt. Dieser Masterprompt muss erneut ausdrücklich das vollständige Lesen
und Befolgen des Sound Manifests verlangen und darf keine über diese
Spezifikation hinausgehende Funktion vorwegnehmen.

Die Freigabe dieser Spezifikation erlaubt ausschließlich ihre verbindliche
Fixierung und die Erstellung des Implementierungs-Masterprompts. Bis zu einem
separaten ausdrücklichen Ausführungsauftrag gilt weiterhin:

- kein Quellcode ändern,
- project(... VERSION ...) nicht ändern,
- keinen Build starten,
- keine Tests oder Artefakte neu erzeugen,
- keinen Commit erstellen.
