Skip to content

fix(korg): ESX→E2S Transfer-Treue — egtime + FX-/Export-Zuweisungsdateien (v3.312–v3.314) - #39

Merged
GeorgDub merged 5 commits into
mainfrom
fix/esx-egtime-transfer
Aug 1, 2026
Merged

GeorgDub merged 5 commits into
mainfrom
fix/esx-egtime-transfer

Conversation

@GeorgDub

@GeorgDub GeorgDub commented Aug 1, 2026 •

Copy link
Copy Markdown
Owner

Problem

Gerätebefund (2026-08-01, „lukn kicks"-Bank): Nach dem ESX→E2S-Transfer klingt der Mix anders — manche Parts zu leise. Part-Level/Pan/Samples wurden 1:1 korrekt übertragen; verloren gingen (1) die Amp-EG-Zeit (egtime) und (2) das FX-Routing (ESX schickt Parts insert-artig durch ihre 3 Master-FX).

Drei Commits

v3.312 — egtime übernehmen: esxParser dekodiert egTime (Drum/Keyboard @+11, Stretch/Slice @+9), Converter reicht durch, e2sExport schreibt PART_EGTIME_OFF 0x15 (Korg TABLE 6 „EG"; Template 127 bleibt ohne Wert stehen).

v3.313 — FX-Zuweisung im ESX-Import: esxParser dekodiert fxflags (bit2=Send, bits0-1=FX-Wahl; verifiziert gegen lammas Common.FXFlags) + Pattern-FXParam-Block @1148 (3× fxtype/edit1/edit2) + Chain @byte 12. Die Import-Anleitung (-mapping.md) bekommt „## FX-Zuweisung (am Gerät nachbauen)" mit Prozessoren, Chain und pro geroutetem Part der Ziel-FX-Zeile. Empirisch verifiziert (lukn kicks P1: EQ 99/67 · Compressor 62/38 · Short Delay 127/0).

v3.314 — Zuweisungsdatei beim Sequenzer-Export: Beide DrumMachine-Export-Buttons (.e2spat + .e2sallpat) laden automatisch eine *-zuweisung.md mit: Sound/Sample pro Part, Level/Pan als E2-Werte, aktivierte Channel-FX mit E2-IFX/MFX-Vorschlag, Time-Stretch/Micro-Timing.

Tests

  • egtime: Unit (Clamp/Fallback) + Integration gegen reale lukn kicks.esx (50 Parts mit egtime<127)
  • FX: synthetische fxflags/FXParam-Dekodierung + Real-File-Check + mapping-Sektion
  • Export-Guide: FX-Zeilen, E2-Wert-Umrechnung, Synth-Label, Leer-Fall
  • Volle Suite: 11486 passed; einziger Fail ist der vorbestehende script-sandbox-codegen-Hash-Test (auch auf main rot, unabhängig von diesem PR)

🤖 Generated with Claude Code

https://claude.ai/code/session_0141pjnQj2b29e4t2Fw7k5ob

GeorgDub and others added 3 commits August 1, 2026 04:16
…v3.312.0)

Geraetebefund (2026-08-01, "lukn kicks"-Bank): Nach dem ESX->E2S-Transfer
klang der Mix anders als auf der ESX — manche Parts zu leise. Part-Level,
Pan und Samples waren korrekt (1:1 verifiziert); verloren ging die
Amp-EG-Zeit (egtime): ~26 Drum-Parts mit kurzen perkussiven Huellkurven
(egtime 1..80) standen auf dem E2S alle auf Decay 127, klangen dauerhaft
lang und maskierten die uebrigen Parts.

- esxParser: egTime dekodieren (Drum/Keyboard @+11, Stretch/Slice @+9;
  Layout lt. lammas/electribe drumpart.js + open-electribe-editor)
- esxToE2sBank: egTime in den E2PatternInput-Part uebernehmen
- e2sExport: neues PART_EGTIME_OFF 0x15 (Korg TABLE 6 "EG"), nur
  ueberlagert wenn der Aufrufer einen Wert liefert (Template bleibt 127)
- electribePatternBuilder: E2PartInput.egTime dokumentiert
- Test: Unit (Byte-Schreibpfad inkl. Clamp) + Integration gegen die reale
  "Korg ESX files/lukn kicks.esx" (50 Parts mit egtime<127 muessen ankommen)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141pjnQj2b29e4t2Fw7k5ob
Die ESX-1 routet Parts insert-artig durch ihre 3 Master-FX — beim Transfer
auf die E2S geht das verloren und die betroffenen Parts klingen trocken/
leiser (zweite Haelfte des "manche Parts zu leise"-Befunds, 2026-08-01).

- esxParser: fxflags dekodieren (bit2=Send, bits0-1=FX-Auswahl; Drum/
  Keyboard @+13, Stretch/Slice @+11) + Pattern-FXParam-Block @1148
  (3x fxtype/edit1/edit2, lammas fxparam.js) + FX-Chain @byte 12;
  ESX_FX_TYPE_NAMES (16 Typen) + esxFxTypeName() exportiert.
  Empirisch verifiziert an lukn kicks Pattern 1: EQ(99/67),
  Compressor(62/38), Short Delay(127/0).
- esxToE2sBank: mapping.md bekommt "## FX-Zuweisung (am Geraet nachbauen)"
  — pro Pattern die 3 Prozessoren + Chain, pro geroutetem Part die Zeile
  "Part N (SampleNr Name) -> FXx (Typ Edit1/Edit2)".
- Tests: synthetische fxflags/FXParam-Dekodierung + Real-File-Check
  (lukn kicks) + mapping-Sektion.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141pjnQj2b29e4t2Fw7k5ob
Analog zur ESX-Import-Anleitung (v3.313): Beim Export von .e2spat /
.e2sallpat aus dem DrumMachine-Sequenzer wird automatisch eine
*-zuweisung.md mitgeliefert. Sie listet pro Pattern/Part, was das
E2-Format NICHT traegt und am Geraet nachgebaut werden muss:
Sample-Zuordnung (Sound-Name), Level/Pan als E2-Werte (0..127) und die
aktivierten Synthstudio-Channel-FX (Filter/Distortion/Compressor/Delay/
Reverb/EQ) mit E2-IFX/MFX-Vorschlag; dazu Time-Stretch/Micro-Timing.

- utils/e2ExportGuide.ts: buildE2ExportGuide() (rein, testbar) +
  downloadGuideMarkdown() (DOM-guarded)
- DrumMachine: beide Export-Buttons (Einzel-Pattern + Bank) laden die
  Zuweisung nach erfolgreichem Export mit herunter
- Tests: FX-Zeilen, E2-Wert-Umrechnung, Synth-Label, Leer-Fall

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141pjnQj2b29e4t2Fw7k5ob
@GeorgDub GeorgDub changed the title fix(korg): ESX-egtime in E2-Export übernehmen — Amp-EG @ Part+0x15 (v3.312.0) fix(korg): ESX→E2S Transfer-Treue — egtime + FX-/Export-Zuweisungsdateien (v3.312–v3.314) Aug 1, 2026
GeorgDub and others added 2 commits August 1, 2026 14:06
….315.0)

Nutzerfrage "ist mit EQ low, mid oder high gemeint?" — die rohen
Edit1/Edit2-Zahlen waren nicht selbsterklaerend. Jetzt:

- EQ (2-Band, KEIN Mid): "EQ [Low +35 (Boost) / High +3 (~neutral)]" —
  Werte relativ zur Reglermitte 64, lt. ESX-1-Manual Edit1=Low, Edit2=High
- uebrige FX mit Manual-Labels: Compressor [Sens/Attack], Delays
  [Time|Beat/Depth], LPF/HPF [Cutoff/Reso], Distortion [Gain/Level] usw.;
  Grain Shifter/Talking Mod ohne gesichertes Label bleiben Edit1/Edit2
- EQ-Lesehilfe-Absatz in der mapping.md (E2S-Pendant: IFX "2band EQ")

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141pjnQj2b29e4t2Fw7k5ob
…(v3.316.0)

chunk[body+0x1D] = 0x02 war als "Fix-Byte" (Oe2sSLE _UFix) hartkodiert —
tatsaechlich ist 0x1D das MSB von importNum (u16 @0x1c = sampleNumber+50).
In den Referenz-Banken lagen alle importNums zufaellig in 0x200..0x2FF,
daher sah das Byte konstant aus. Ab sampleNumber 718 (importNum >= 0x300)
verlor jedes Sample 256 im importNum-Feld. Befund beim Bau einer
233-Slot-Bank (Slots 501..734, "hunnel sample"-Pack, 2026-08-01).

Fix: Hardcode entfernt — setUint16 @0x1c schreibt das MSB bereits korrekt.
Regressionstest: importNum fuer sampleNumber 500/717/718/949.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0141pjnQj2b29e4t2Fw7k5ob
@GeorgDub
GeorgDub merged commit 1279390 into main Aug 1, 2026
2 of 3 checks passed
@GeorgDub
GeorgDub deleted the fix/esx-egtime-transfer branch August 1, 2026 18:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant