From 69d5c545c79ce594e5283f9eb41ea6bb95ab6227 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 14 Jul 2026 07:58:32 +0200 Subject: [PATCH] Update Ableton exporter logic and fix test assertions --- src/lib/exporters/ableton/builders.ts | 10 ++++------ tests/ableton-hybrid.test.ts | 15 ++++++--------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/lib/exporters/ableton/builders.ts b/src/lib/exporters/ableton/builders.ts index 5c507f0..00424bb 100644 --- a/src/lib/exporters/ableton/builders.ts +++ b/src/lib/exporters/ableton/builders.ts @@ -228,7 +228,8 @@ function trackAutomationTargets(midiTrack: any, includeArrangementMixer: boolean const staticPitchValue = koTrack.faderParams[FaderParam.PTC]; const staticPitchOffset = staticPitchValue === -1 ? 0 : Math.round((staticPitchValue - 0.5) * 10); - pitchTarget.valueOffset = Number(simpler.Pitch.TransposeKey.Manual['@Value']) - staticPitchOffset; + pitchTarget.valueOffset = + Number(simpler.Pitch.TransposeKey.Manual['@Value']) - staticPitchOffset; addTarget(targets, FaderParam.PTC, pitchTarget); addTarget(targets, FaderParam.TUNE, targetFor(simpler.Pitch.TransposeFine)); addTarget( @@ -385,9 +386,7 @@ async function buildMidiClip( midiClip.Notes.NoteIdGenerator.NextId['@Value'] = _noteId; const clipEnvelopes = - abletonVersion === '10' - ? buildMidiClipEnvelopes(koClip.midiEvents, midiControllerTargets) - : []; + abletonVersion === '10' ? buildMidiClipEnvelopes(koClip.midiEvents, midiControllerTargets) : []; if (clipForLauncher && koTrack) { clipEnvelopes.push( ...buildClipEnvelopes(koClip.groupPattern, automationTargets, koTrack, false), @@ -641,8 +640,7 @@ async function buildDrumRackDevice(koTrack: AblTrack, abletonVersion: AbletonVer drumBranch.Name.EffectiveName['@Value'] = subtrack.name; drumBranch.Name.UserName['@Value'] = subtrack.name; drumBranch.BranchInfo.ReceivingNote['@Value'] = note; - drumBranch.BranchInfo.SendingNote['@Value'] = - subtrack.drumRackSendingNote ?? subtrack.rootNote; // not sure if this matters + drumBranch.BranchInfo.SendingNote['@Value'] = subtrack.drumRackSendingNote ?? subtrack.rootNote; // not sure if this matters drumBranch.BranchInfo.ChokeGroup['@Value'] = subtrack.inChokeGroup ? 1 : 0; drumBranch.MixerDevice.Volume.Manual['@Value'] = subtrack.volume; drumBranch.DeviceChain.MidiToAudioDeviceChain.Devices = await buildSimplerDevice( diff --git a/tests/ableton-hybrid.test.ts b/tests/ableton-hybrid.test.ts index 763b870..a73efc0 100644 --- a/tests/ableton-hybrid.test.ts +++ b/tests/ableton-hybrid.test.ts @@ -1,9 +1,6 @@ import assert from 'node:assert/strict'; import test from 'node:test'; -import abletonTransformer, { - AblTrack, - getDrumRackMidiNote, -} from '../src/lib/transformers/ableton'; +import abletonTransformer, { AblTrack, getDrumRackMidiNote } from '../src/lib/transformers/ableton'; import { EffectType, FaderParam, @@ -170,10 +167,7 @@ test('automatically builds a per-group rack without flattening chromatic pads', ); assert.deepEqual( melodic.lane?.clips.map((clip) => clip.notes.map((item) => item.note)), - [ - [60, 64], - [67], - ], + [[60, 64], [67]], ); }); @@ -220,7 +214,10 @@ test('does not create selector-note racks when samples are excluded', () => { exportAllPadsWithSamples: true, }); - assert.equal(result.tracks.some((track) => track.drumRack), false); + assert.equal( + result.tracks.some((track) => track.drumRack), + false, + ); assert.deepEqual( result.tracks.map((track) => track.padCode), ['a0', 'a1', 'a2'] as PadCode[],