From f75bffa8790fa3e681f6c609dfc5e08d81c49346 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 14 Jul 2026 11:22:07 +0200 Subject: [PATCH] Update Ableton playback state logic for accurate EP representation --- src/lib/exporters/ableton/playback.ts | 29 +++++++++++++++++++++------ tests/ableton-playback.test.ts | 13 +++++++----- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/lib/exporters/ableton/playback.ts b/src/lib/exporters/ableton/playback.ts index 7911fb6..f62935f 100644 --- a/src/lib/exporters/ableton/playback.ts +++ b/src/lib/exporters/ableton/playback.ts @@ -1,10 +1,27 @@ export type AbletonPlaybackMode = 'oneshot' | 'key' | 'legato'; export function getSimplerPlaybackState(projectMode: AbletonPlaybackMode) { - return { - playbackMode: 1, - voices: projectMode === 'key' ? 5 : 0, - retrigger: projectMode === 'oneshot', - portamentoMode: projectMode === 'legato' ? 2 : 0, - }; + switch (projectMode) { + case 'oneshot': + return { + playbackMode: 1, + voices: 0, + retrigger: true, + portamentoMode: 0, + }; + case 'key': + return { + playbackMode: 0, + voices: 5, + retrigger: true, + portamentoMode: 0, + }; + case 'legato': + return { + playbackMode: 0, + voices: 1, + retrigger: false, + portamentoMode: 2, + }; + } } diff --git a/tests/ableton-playback.test.ts b/tests/ableton-playback.test.ts index 151aaf4..0b264ab 100644 --- a/tests/ableton-playback.test.ts +++ b/tests/ableton-playback.test.ts @@ -2,16 +2,19 @@ import assert from 'node:assert/strict'; import test from 'node:test'; import { getSimplerPlaybackState } from '../src/lib/exporters/ableton/playback'; -test('exports every EP playback mode as automatic One-Shot Trigger playback', () => { +test('exports EP KEY as polyphonic Classic playback', () => { assert.deepEqual(getSimplerPlaybackState('key'), { - playbackMode: 1, + playbackMode: 0, voices: 5, - retrigger: false, + retrigger: true, portamentoMode: 0, }); +}); + +test('exports EP LEGATO as monophonic Classic playback without retriggering', () => { assert.deepEqual(getSimplerPlaybackState('legato'), { - playbackMode: 1, - voices: 0, + playbackMode: 0, + voices: 1, retrigger: false, portamentoMode: 2, });