From cab49a37ec074012ab9ebc1961d23ebbb80c5f92 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Mon, 13 Jul 2026 05:01:21 +0200 Subject: [PATCH] Update Ableton exporter builders to correctly initialize track and project structures --- src/lib/exporters/ableton/builders.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/lib/exporters/ableton/builders.ts b/src/lib/exporters/ableton/builders.ts index 06298bc..af6c8df 100644 --- a/src/lib/exporters/ableton/builders.ts +++ b/src/lib/exporters/ableton/builders.ts @@ -850,6 +850,8 @@ async function buildReturnTrack( returnTrack.Name.EffectiveName['@Value'] = EFFECTS[projectData.effects.effectType] || ''; returnTrack.Name.UserName['@Value'] = EFFECTS[projectData.effects.effectType] || ''; setColorValue(returnTrack, 28); + returnTrack.DeviceChain.Mixer.Sends = {}; + returnTrack.DeviceChain.DeviceChain.Devices = {} as any; if (projectData.effects.effectType === EffectType.Reverb) { const effectReverbTemplate = await loadTemplate('effectReverb', abletonVersion); @@ -974,11 +976,13 @@ export async function buildProject(projectData: ProjectRawData, exporterParams: `${projectData.scenesSettings.timeSignature.numerator}/${projectData.scenesSettings.timeSignature.denominator}` ] || TIME_SIGNATURES['4/4']; - project.Ableton.LiveSet.Tracks['#'] = await buildTracks( + const tracks = await buildTracks( transformedData.tracks, + transformedData.groupLanes, transformedData.scenes.length, exporterParams, ); + project.Ableton.LiveSet.Tracks = { '#': tracks } as any; if (exporterParams.sendEffects) { const returnTrack = await buildReturnTrack( @@ -1007,14 +1011,16 @@ export async function buildProject(projectData: ProjectRawData, exporterParams: if (exporterParams.sendEffects) { project.Ableton.LiveSet.SendsPre = { SendPreBool: { - '@Id': 1, + '@Id': 0, '@Value': 'false', }, }; + } else { + project.Ableton.LiveSet.SendsPre = {} as any; } const fixedRoot = fixIds(project); - fixedRoot.Ableton.LiveSet.NextPointeeId['@Value'] = getId() + 1; + fixedRoot.Ableton.LiveSet.NextPointeeId['@Value'] = getId(); if (import.meta.env.DEV) { console.log('ROOT', fixedRoot);