Files
ep-133-project-export/tests/ableton-fader-policies.test.ts

41 lines
1.8 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
canonicalizeFilterFaderValue,
convertGroupFaderValue,
FADER_POLICIES,
getFaderPolicy,
} from '../src/lib/exporters/ableton/faderPolicies';
import { AblTrack } from '../src/lib/transformers/ableton';
import { FaderParam } from '../src/types/types';
const track = { volume: 0.4 } as AblTrack;
test('defines an explicit policy for every EP group fader parameter', () => {
assert.equal(Object.keys(FADER_POLICIES).length, 12);
for (let parameter = FaderParam.LVL; parameter <= FaderParam.MOD; parameter++) {
assert.ok(getFaderPolicy(parameter));
}
});
test('separates Live targets, note transforms and unsupported group parameters', () => {
assert.equal(getFaderPolicy(FaderParam.PAN).renderStrategy, 'target');
assert.equal(getFaderPolicy(FaderParam.VEL).renderStrategy, 'note');
assert.equal(getFaderPolicy(FaderParam.TIM).renderStrategy, 'unsupported');
assert.equal(getFaderPolicy(FaderParam.ATK).renderStrategy, 'unsupported');
assert.equal(getFaderPolicy(FaderParam.REL).renderStrategy, 'unsupported');
});
test('uses one group-fader conversion path for mixer and pad targets', () => {
assert.equal(convertGroupFaderValue(FaderParam.LVL, 0.5, { track }), 0.2);
assert.equal(convertGroupFaderValue(FaderParam.PAN, 0.75, { track }), 0.5);
assert.equal(convertGroupFaderValue(FaderParam.PTC, 0.75, { track, valueOffset: 7 }), 9.5);
});
test('canonicalizes only effectively-open filter fader values', () => {
assert.equal(canonicalizeFilterFaderValue(FaderParam.LPF, 0.9996299743652344), 1);
assert.equal(canonicalizeFilterFaderValue(FaderParam.HPF, 0.0003700256347656), 0);
assert.equal(canonicalizeFilterFaderValue(FaderParam.LPF, 0.998), 0.998);
assert.equal(canonicalizeFilterFaderValue(FaderParam.HPF, 0.002), 0.002);
});