Update Ableton playback state logic for accurate EP representation

This commit is contained in:
2026-07-14 11:22:07 +02:00
parent 2d8696529c
commit f75bffa879
2 changed files with 31 additions and 11 deletions

View File

@@ -1,10 +1,27 @@
export type AbletonPlaybackMode = 'oneshot' | 'key' | 'legato'; export type AbletonPlaybackMode = 'oneshot' | 'key' | 'legato';
export function getSimplerPlaybackState(projectMode: AbletonPlaybackMode) { export function getSimplerPlaybackState(projectMode: AbletonPlaybackMode) {
return { switch (projectMode) {
playbackMode: 1, case 'oneshot':
voices: projectMode === 'key' ? 5 : 0, return {
retrigger: projectMode === 'oneshot', playbackMode: 1,
portamentoMode: projectMode === 'legato' ? 2 : 0, 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,
};
}
} }

View File

@@ -2,16 +2,19 @@ import assert from 'node:assert/strict';
import test from 'node:test'; import test from 'node:test';
import { getSimplerPlaybackState } from '../src/lib/exporters/ableton/playback'; 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'), { assert.deepEqual(getSimplerPlaybackState('key'), {
playbackMode: 1, playbackMode: 0,
voices: 5, voices: 5,
retrigger: false, retrigger: true,
portamentoMode: 0, portamentoMode: 0,
}); });
});
test('exports EP LEGATO as monophonic Classic playback without retriggering', () => {
assert.deepEqual(getSimplerPlaybackState('legato'), { assert.deepEqual(getSimplerPlaybackState('legato'), {
playbackMode: 1, playbackMode: 0,
voices: 0, voices: 1,
retrigger: false, retrigger: false,
portamentoMode: 2, portamentoMode: 2,
}); });