Update Ableton export logic to use comprehensive playback state parameters

This commit is contained in:
2026-07-13 15:58:10 +02:00
parent cdbe72e775
commit e4ef0f97cd
8 changed files with 28 additions and 125 deletions

View File

@@ -1,45 +1,30 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import { getSimplerPlaybackState, hasOneShotOverride } from '../src/lib/exporters/ableton/playback';
import { PadCode } from '../src/types/types';
import { getSimplerPlaybackState } from '../src/lib/exporters/ableton/playback';
const project7Overrides = ['b0', 'c1', 'c8', 'c9', 'd3'] as PadCode[];
test('applies the selective Project 7 One-Shot overrides', () => {
for (const padCode of project7Overrides) {
assert.equal(hasOneShotOverride(padCode, project7Overrides), true);
}
assert.equal(hasOneShotOverride('b3', project7Overrides), false);
assert.equal(hasOneShotOverride('b7', project7Overrides), false);
});
test('preserves project playback modes when no override is selected', () => {
assert.equal(hasOneShotOverride('b0'), false);
});
test('changes only the active playback mode for forced KEY and LEGATO pads', () => {
assert.deepEqual(getSimplerPlaybackState('key', true), {
test('exports every EP playback mode as automatic One-Shot Trigger playback', () => {
assert.deepEqual(getSimplerPlaybackState('key'), {
playbackMode: 1,
monophonic: false,
voices: 5,
retrigger: false,
portamentoMode: 0,
useOneShotEnvelope: false,
});
assert.deepEqual(getSimplerPlaybackState('legato', true), {
assert.deepEqual(getSimplerPlaybackState('legato'), {
playbackMode: 1,
monophonic: true,
voices: 0,
retrigger: false,
portamentoMode: 2,
useOneShotEnvelope: false,
});
});
test('uses One-Shot envelopes only for native EP ONE pads', () => {
assert.deepEqual(getSimplerPlaybackState('oneshot', false), {
test('preserves native EP ONE envelope translation', () => {
assert.deepEqual(getSimplerPlaybackState('oneshot'), {
playbackMode: 1,
monophonic: false,
voices: 0,
retrigger: true,
portamentoMode: 0,
useOneShotEnvelope: true,
});
assert.deepEqual(getSimplerPlaybackState('legato', false), {
playbackMode: 0,
monophonic: true,
useOneShotEnvelope: false,
});
});