From a68a80cba1918fe8f3fe9fc5d6c2b6a495318e7b Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Tue, 14 Jul 2026 09:39:06 +0200 Subject: [PATCH] Update MIDI clip duration calculations using loopDuration instead of bar counts --- src/lib/exporters/ableton/builders.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/lib/exporters/ableton/builders.ts b/src/lib/exporters/ableton/builders.ts index 4025e14..174490f 100644 --- a/src/lib/exporters/ableton/builders.ts +++ b/src/lib/exporters/ableton/builders.ts @@ -8,6 +8,7 @@ import { } from '../../../types/types'; import { EFFECTS } from '../../constants'; import abletonTransformer, { + AblArrangementSection, AblClip, AblGroupLane, AblScene, @@ -305,13 +306,9 @@ async function buildMidiClip( const midiClipTemplate = await loadTemplate('midiClip', abletonVersion); const midiClip = structuredClone(midiClipTemplate.MidiClip); - const beats = getQuarterNotesPerBar( - koClip.timeSignature.numerator, - koClip.timeSignature.denominator, - ); - const time = koClip.offset * beats; + const time = koClip.offset; const start = time; - const end = time + koClip.sceneBars * beats; + const end = time + koClip.duration; midiClip['@Id'] = clipIdx; midiClip['@Time'] = time; @@ -319,12 +316,12 @@ async function buildMidiClip( midiClip.CurrentEnd['@Value'] = end; midiClip.Loop.LoopOn['@Value'] = 'true'; midiClip.Loop.LoopStart['@Value'] = 0; - midiClip.Loop.LoopEnd['@Value'] = koClip.bars * beats; + midiClip.Loop.LoopEnd['@Value'] = koClip.loopDuration; if (midiClip.Loop.OutMarker) { - midiClip.Loop.OutMarker['@Value'] = koClip.bars * beats; + midiClip.Loop.OutMarker['@Value'] = koClip.loopDuration; } midiClip.Loop.HiddenLoopStart['@Value'] = 0; - midiClip.Loop.HiddenLoopEnd['@Value'] = koClip.bars * beats; + midiClip.Loop.HiddenLoopEnd['@Value'] = koClip.loopDuration; setColorValue(midiClip, color); midiClip.Name['@Value'] = koClip.sceneName; midiClip.TimeSignature.TimeSignatures.RemoteableTimeSignature.Numerator['@Value'] = @@ -335,7 +332,7 @@ async function buildMidiClip( if (clipForLauncher) { midiClip['@Time'] = 0; midiClip.CurrentStart['@Value'] = 0; - midiClip.CurrentEnd['@Value'] = koClip.bars * beats; + midiClip.CurrentEnd['@Value'] = koClip.loopDuration; } // ableton group notes