# UnitorMidiControl_261020 – Plugin-Spezifikation v2

**Stand: 20.10.2026.** Für alle 24 JSON-Plugin-Dateien verbindlich. Die vollständigen Daten sind in `plugins/` enthalten.

## Schreibregeln

- Schlüssel sind in `camelCase` geschrieben; SysEx-spezifische Schlüssel beginnen mit `sysEx`.
- `schemaVersion: 2` kennzeichnet das neue Format; `pluginName` ersetzt `name`, `midiOutputPort` ersetzt `output`.
- `controlType`, `actionType` und `fieldType` beschreiben jeweils verschiedene Konzepte.
- Eine einzelne MIDI-Aktion steht flach am Control oder an der Option. Befehlsfolgen werden mit `actions: [...]` in Ausführungsreihenfolge notiert.
- Eine Wartezeit ist `{ "actionType": "delay", "milliseconds": 500 }`. `wait` ist kein zusätzliches Konzept. Erlaubt: 0–60000 ms.
- SysEx-Dumps: `sysExRequest`, `sysExResponsePrefix`, `sysExResponsePayloadLength`, `sysExParameterChangePrefix`.
- In Dump-Parametern heißen Felder `byteOffset`, `bitMask`, `bitShift`, `valueEncoding`, `minValue`, `maxValue`.
- `length` meint die Länge, nicht den Index des letzten Bytes. `byteOffset` ist nullbasiert.
- Formulare verwenden `fieldType`, `defaultValue`, `valueEncoding`, `minValue`, `maxValue`. Vorhandene Feld-IDs und `${...}`-Referenzen bleiben gleich.
- CC: `midiChannel`, `ccNumber`, `ccValue`. SysEx-Senden: `sysExMessage`. Program Change: `programNumber`. Pitch Bend: `pitchBendValue`.
- Kontextabhängige Felder, die nicht eindeutig besser benannt werden konnten, behalten vorläufig ihren Namen. Insbesondere Routing-Felder sowie spezielle Sequencer-Parameter werden nicht semantisch umgedeutet.

## Beispiel

```json
{
  "schemaVersion": 2,
  "pluginName": "Beispielgerät",
  "midiOutputPort": 1,
  "controls": [
    {
      "controlType": "momentary",
      "label": "Glide Off",
      "actionType": "CC",
      "midiChannel": 1,
      "ccNumber": 65,
      "ccValue": 0
    },
    {
      "controlType": "momentary",
      "label": "Program wählen",
      "actions": [
        { "actionType": "ProgramChange", "midiChannel": 1, "programNumber": 5 },
        { "actionType": "delay", "milliseconds": 100 }
      ]
    }
  ]
}
```

## Architektur

Der Parser in `UnitorMidiControlApp.normalizePluginV2()` liest das neue Format und übersetzt es in das interne Modell der bisherigen Implementierung. **Damit bleibt die MIDI-Erzeugung unverändert**, einschließlich K2000-FX-Lese-/Schreibabläufen. Die eigentliche interne API nutzt in Version 261020 noch historische Feldnamen; diese erscheinen in den v2-JSON-Plugins nicht mehr an den umgestellten Stellen.

Version 261020 ist ein erster testbarer Integrationsstand, **kein auf echter Hardware validiertes Release**. Die vorhandene portable Windows-Runtime und der Launcher stammen aus der Originalversion 261015; die Anwendungs-JAR und Plugins wurden ersetzt. Für einen Neu-Build dient `BUILD_WINDOWS.bat`.

## Prüfungen

Alle 24 Dateien wurden einzeln mit ihren v1-Originalen verglichen, nachdem die neue Java-Normalisierung angewendet wurde. **0 Abweichungen** bei den normalisierten JSON-Datenstrukturen (mit den explizit erlaubten Alias-Äquivalenzen für `delay`/`wait` und `ms`/`milliseconds`). Java-Quellen erfolgreich für Java 17 kompiliert. Hardwaretest und Windows-Starttest sind noch erforderlich.
