diff --git a/src/routes/home/Export/ExportProjectDialog.tsx b/src/routes/home/Export/ExportProjectDialog.tsx index 2e85d0b..fb6a65a 100644 --- a/src/routes/home/Export/ExportProjectDialog.tsx +++ b/src/routes/home/Export/ExportProjectDialog.tsx @@ -23,7 +23,7 @@ function sanitizeFileName(value: string): string { } const NOTES: Record = { - ableton: `Pads used at one consistent pitch are automatically organized into Drum Racks, while chromatic pads remain on separate MIDI tracks. Recorded fader automation is exported for LVL, PTC, LPF, HPF, FX, ATK, REL, PAN, TUNE, VEL and MOD. Choke groups work between pads in the same Drum Rack. TIM automation, the EP effects and stretching algorithms remain approximations.`, + ableton: `When samples are included, pads used at one consistent pitch are automatically organized into Drum Racks, while chromatic pads remain on separate MIDI tracks. Recorded fader automation is exported for LVL, PTC, LPF, HPF, FX, ATK, REL, PAN, TUNE, VEL and MOD. Choke groups work between pads in the same Drum Rack. TIM automation, the EP effects and stretching algorithms remain approximations.`, dawproject: `Unfortunately, the DAWproject format does not currently support the "Sampler" instrument, so you will need to manually assign the samples in your DAW.`, midi: `The simplest format supported by any DAW. But you have to assign the samples manually.`, reaper: `Only basic sampler features are supported`, diff --git a/tests/ableton-hybrid.test.ts b/tests/ableton-hybrid.test.ts index a73efc0..39f5d0d 100644 --- a/tests/ableton-hybrid.test.ts +++ b/tests/ableton-hybrid.test.ts @@ -208,6 +208,20 @@ test('uses one hybrid classification for Arrangement and Session exports', () => assert.deepEqual(trackShape(arrangement.tracks), trackShape(session.tracks)); }); +test('classifies a pad from its distinct pitches across every exported scene', () => { + const data = project(); + data.scenes[0].patterns[1].notes = [note(60, 0)]; + data.scenes[1].patterns[1].notes = [note(61, 0)]; + const result = abletonTransformer(data, { includeArchivedSamples: true }); + const rack = result.tracks.find((track) => track.drumRack); + + assert.deepEqual( + rack?.tracks.map((track) => track.padCode), + ['a0'], + ); + assert.ok(result.tracks.some((track) => track.padCode === 'a1' && !track.drumRack)); +}); + test('does not create selector-note racks when samples are excluded', () => { const result = abletonTransformer(project(), { includeArchivedSamples: false,