Remove deprecated and unused Ableton automation parameters and simplify playback state logic

This commit is contained in:
2026-07-14 10:46:44 +02:00
parent 095fdf91c7
commit 6b735ae0e4
4 changed files with 2 additions and 87 deletions

View File

@@ -1,13 +1,9 @@
import { FaderParam } from '../../../types/types';
import { AblGroupPatternOccurrence, AblTrack } from '../../transformers/ableton';
import { koEnvRangeToSeconds } from './utils';
export type AbletonAutomationTarget = {
arrangement?: number;
session?: number;
maxValue?: number;
soundLength?: number;
invertValue?: boolean;
staticValue?: number;
valueOffset?: number;
};
@@ -65,20 +61,6 @@ export function convertFaderValue(
case FaderParam.FX:
convertedValue = value;
break;
case FaderParam.ATK:
convertedValue =
koEnvRangeToSeconds(
(target?.invertValue ? 1 - value : value) * 255,
target?.soundLength ?? track.soundLength,
) * 1000;
break;
case FaderParam.REL:
convertedValue =
koEnvRangeToSeconds(
(target?.invertValue ? 1 - value : value) * 255,
target?.soundLength ?? track.soundLength,
) * 1000;
break;
case FaderParam.PAN:
convertedValue = (value - 0.5) * 2;
break;
@@ -93,9 +75,7 @@ export function convertFaderValue(
break;
}
return target?.maxValue === undefined
? convertedValue
: Math.min(target.maxValue, convertedValue);
return convertedValue;
}
export function getFaderValueAt(

View File

@@ -6,6 +6,5 @@ export function getSimplerPlaybackState(projectMode: AbletonPlaybackMode) {
voices: projectMode === 'key' ? 5 : 0,
retrigger: projectMode === 'oneshot',
portamentoMode: projectMode === 'legato' ? 2 : 0,
useOneShotEnvelope: projectMode === 'oneshot',
};
}

View File

@@ -86,64 +86,3 @@ test('uses absolute automation targets for Session clip envelopes', () => {
assert.equal(envelopes[0].Automation.Events.FloatEvent[2]['@Time'], 1);
assert.deepEqual(envelopes[0].LoopSlot, { Value: {} });
});
test('uses each Simpler target duration and One-Shot release direction', () => {
assert.equal(
convertFaderValue(FaderParam.REL, 1, track, false, {
soundLength: 10,
maxValue: 2000,
invertValue: true,
}),
0,
);
assert.equal(
convertFaderValue(FaderParam.REL, 0, track, false, {
soundLength: 10,
maxValue: 2000,
invertValue: true,
}),
2000,
);
const envelopes = buildClipEnvelopes(
occurrence,
{
[FaderParam.REL]: [
{ session: 23000, soundLength: 2 },
{ session: 23001, soundLength: 4, maxValue: 2000, invertValue: true },
],
},
track,
false,
);
assert.equal(envelopes[0].Automation.Events.FloatEvent[2]['@Value'], 1500);
assert.equal(envelopes[1].Automation.Events.FloatEvent[2]['@Value'], 1000);
});
test('preserves the pad envelope before group automation when the static group value is absent', () => {
const pattern = {
...occurrence,
faderParams: { ...faderParams, [FaderParam.REL]: -1 },
};
const envelopes = buildClipEnvelopes(
pattern,
{
[FaderParam.REL]: [
{
session: 23000,
soundLength: 4,
maxValue: 2000,
invertValue: true,
staticValue: 321,
},
],
},
track,
false,
);
assert.equal(envelopes[0].Automation.Events.FloatEvent[0]['@Value'], 321);
assert.equal(envelopes[0].Automation.Events.FloatEvent[1]['@Value'], 321);
assert.equal(envelopes[0].Automation.Events.FloatEvent[2]['@Value'], 1000);
});

View File

@@ -8,23 +8,20 @@ test('exports every EP playback mode as automatic One-Shot Trigger playback', ()
voices: 5,
retrigger: false,
portamentoMode: 0,
useOneShotEnvelope: false,
});
assert.deepEqual(getSimplerPlaybackState('legato'), {
playbackMode: 1,
voices: 0,
retrigger: false,
portamentoMode: 2,
useOneShotEnvelope: false,
});
});
test('preserves native EP ONE envelope translation', () => {
test('preserves native EP ONE trigger behavior', () => {
assert.deepEqual(getSimplerPlaybackState('oneshot'), {
playbackMode: 1,
voices: 0,
retrigger: true,
portamentoMode: 0,
useOneShotEnvelope: true,
});
});