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 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,
};
}
}

View File

@@ -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,
});