41 lines
1.8 KiB
TypeScript
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);
|
|
});
|