101 lines
2.7 KiB
TypeScript
101 lines
2.7 KiB
TypeScript
|
|
import assert from 'node:assert/strict';
|
||
|
|
import test from 'node:test';
|
||
|
|
import { collectPads } from '../src/lib/parsers';
|
||
|
|
import abletonTransformer from '../src/lib/transformers/ableton';
|
||
|
|
import dawProjectTransformer from '../src/lib/transformers/dawProject';
|
||
|
|
import midiTransformer from '../src/lib/transformers/midi';
|
||
|
|
import reaperTransformer from '../src/lib/transformers/reaper';
|
||
|
|
import { TarFile } from '../src/lib/untar';
|
||
|
|
import {
|
||
|
|
EffectType,
|
||
|
|
FaderParam,
|
||
|
|
Group,
|
||
|
|
GroupFaderParam,
|
||
|
|
ProjectRawData,
|
||
|
|
} from '../src/types/types';
|
||
|
|
import { findPad } from '../src/lib/utils';
|
||
|
|
|
||
|
|
function faderParams(): GroupFaderParam {
|
||
|
|
return Object.fromEntries(
|
||
|
|
(['a', 'b', 'c', 'd'] as Group[]).map((group) => [
|
||
|
|
group,
|
||
|
|
Object.fromEntries(Array.from({ length: 12 }, (_, parameter) => [parameter, -1])),
|
||
|
|
]),
|
||
|
|
) as GroupFaderParam;
|
||
|
|
}
|
||
|
|
|
||
|
|
function sparseProject(): ProjectRawData {
|
||
|
|
const rawPad = new Uint8Array(27);
|
||
|
|
rawPad[1] = 202;
|
||
|
|
rawPad[16] = 100;
|
||
|
|
rawPad[20] = 255;
|
||
|
|
rawPad[24] = 60;
|
||
|
|
const pads = collectPads([new TarFile('pads/a/p02', rawPad.length, rawPad)], []);
|
||
|
|
const params = faderParams();
|
||
|
|
|
||
|
|
return {
|
||
|
|
pads,
|
||
|
|
groupPatterns: [],
|
||
|
|
scenes: [
|
||
|
|
{
|
||
|
|
number: 1,
|
||
|
|
name: '01',
|
||
|
|
patternNumbers: { a: 0, b: 0, c: 0, d: 0 },
|
||
|
|
timeSignature: { numerator: 4, denominator: 4 },
|
||
|
|
patterns: [],
|
||
|
|
patternEvents: {},
|
||
|
|
},
|
||
|
|
],
|
||
|
|
songPositions: [],
|
||
|
|
settings: {
|
||
|
|
bpm: 120,
|
||
|
|
scale: 0,
|
||
|
|
rootNote: 0,
|
||
|
|
groupFaderParams: params,
|
||
|
|
faderAssignment: {
|
||
|
|
a: FaderParam.LVL,
|
||
|
|
b: FaderParam.LVL,
|
||
|
|
c: FaderParam.LVL,
|
||
|
|
d: FaderParam.LVL,
|
||
|
|
},
|
||
|
|
rawData: new Uint8Array(),
|
||
|
|
},
|
||
|
|
effects: {
|
||
|
|
rawData: new Uint8Array(),
|
||
|
|
effectType: EffectType.Off,
|
||
|
|
param1: 0,
|
||
|
|
param2: 0,
|
||
|
|
},
|
||
|
|
sounds: [],
|
||
|
|
projectFile: {} as File,
|
||
|
|
scenesSettings: { timeSignature: { numerator: 4, denominator: 4 } },
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
test('keeps physical p02 on zero-based pattern source 1 when p01 is omitted', () => {
|
||
|
|
const data = sparseProject();
|
||
|
|
const physicalPad = data.pads.a[0];
|
||
|
|
|
||
|
|
assert.equal(physicalPad.pad, 2);
|
||
|
|
assert.equal(findPad('a0', data.pads), undefined);
|
||
|
|
assert.equal(findPad('a1', data.pads), physicalPad);
|
||
|
|
|
||
|
|
const params = { exportAllPadsWithSamples: true, keepUnusedPatterns: false };
|
||
|
|
assert.deepEqual(
|
||
|
|
abletonTransformer(data, params).tracks.map((track) => track.padCode),
|
||
|
|
['a1'],
|
||
|
|
);
|
||
|
|
assert.deepEqual(
|
||
|
|
midiTransformer(data, params).tracks.map((track) => track.padCode),
|
||
|
|
['a1'],
|
||
|
|
);
|
||
|
|
assert.deepEqual(
|
||
|
|
reaperTransformer(data, params).tracks.map((track) => track.padCode),
|
||
|
|
['a1'],
|
||
|
|
);
|
||
|
|
assert.deepEqual(
|
||
|
|
dawProjectTransformer(data, params).tracks.map((track) => track.padCode),
|
||
|
|
['a1'],
|
||
|
|
);
|
||
|
|
});
|