Update MIDI clip duration calculations using loopDuration instead of bar counts

This commit is contained in:
2026-07-14 09:39:06 +02:00
parent ec3809bd1d
commit a68a80cba1

View File

@@ -8,6 +8,7 @@ import {
} from '../../../types/types'; } from '../../../types/types';
import { EFFECTS } from '../../constants'; import { EFFECTS } from '../../constants';
import abletonTransformer, { import abletonTransformer, {
AblArrangementSection,
AblClip, AblClip,
AblGroupLane, AblGroupLane,
AblScene, AblScene,
@@ -305,13 +306,9 @@ async function buildMidiClip(
const midiClipTemplate = await loadTemplate<ALSMidiClip>('midiClip', abletonVersion); const midiClipTemplate = await loadTemplate<ALSMidiClip>('midiClip', abletonVersion);
const midiClip = structuredClone(midiClipTemplate.MidiClip); const midiClip = structuredClone(midiClipTemplate.MidiClip);
const beats = getQuarterNotesPerBar( const time = koClip.offset;
koClip.timeSignature.numerator,
koClip.timeSignature.denominator,
);
const time = koClip.offset * beats;
const start = time; const start = time;
const end = time + koClip.sceneBars * beats; const end = time + koClip.duration;
midiClip['@Id'] = clipIdx; midiClip['@Id'] = clipIdx;
midiClip['@Time'] = time; midiClip['@Time'] = time;
@@ -319,12 +316,12 @@ async function buildMidiClip(
midiClip.CurrentEnd['@Value'] = end; midiClip.CurrentEnd['@Value'] = end;
midiClip.Loop.LoopOn['@Value'] = 'true'; midiClip.Loop.LoopOn['@Value'] = 'true';
midiClip.Loop.LoopStart['@Value'] = 0; midiClip.Loop.LoopStart['@Value'] = 0;
midiClip.Loop.LoopEnd['@Value'] = koClip.bars * beats; midiClip.Loop.LoopEnd['@Value'] = koClip.loopDuration;
if (midiClip.Loop.OutMarker) { if (midiClip.Loop.OutMarker) {
midiClip.Loop.OutMarker['@Value'] = koClip.bars * beats; midiClip.Loop.OutMarker['@Value'] = koClip.loopDuration;
} }
midiClip.Loop.HiddenLoopStart['@Value'] = 0; midiClip.Loop.HiddenLoopStart['@Value'] = 0;
midiClip.Loop.HiddenLoopEnd['@Value'] = koClip.bars * beats; midiClip.Loop.HiddenLoopEnd['@Value'] = koClip.loopDuration;
setColorValue(midiClip, color); setColorValue(midiClip, color);
midiClip.Name['@Value'] = koClip.sceneName; midiClip.Name['@Value'] = koClip.sceneName;
midiClip.TimeSignature.TimeSignatures.RemoteableTimeSignature.Numerator['@Value'] = midiClip.TimeSignature.TimeSignatures.RemoteableTimeSignature.Numerator['@Value'] =
@@ -335,7 +332,7 @@ async function buildMidiClip(
if (clipForLauncher) { if (clipForLauncher) {
midiClip['@Time'] = 0; midiClip['@Time'] = 0;
midiClip.CurrentStart['@Value'] = 0; midiClip.CurrentStart['@Value'] = 0;
midiClip.CurrentEnd['@Value'] = koClip.bars * beats; midiClip.CurrentEnd['@Value'] = koClip.loopDuration;
} }
// ableton group notes // ableton group notes