Improve Ableton builder by using dedicated note mapping function and refining device setup.

This commit is contained in:
2026-07-14 07:56:27 +02:00
parent ef62aca806
commit e7fdaea248

View File

@@ -12,6 +12,7 @@ import abletonTransformer, {
AblGroupLane,
AblScene,
AblTrack,
getDrumRackMidiNote,
} from '../../transformers/ableton';
import { getQuarterNotesPerBar } from '../utils';
import {
@@ -218,7 +219,12 @@ function trackAutomationTargets(midiTrack: any, includeArrangementMixer: boolean
sampleRate > 0
? (trimmedFrames > 0 ? trimmedFrames : sampleDuration) / sampleRate
: undefined;
addTarget(targets, FaderParam.PTC, targetFor(simpler.Pitch.TransposeKey));
const pitchTarget = targetFor(simpler.Pitch.TransposeKey);
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;
addTarget(targets, FaderParam.PTC, pitchTarget);
addTarget(targets, FaderParam.TUNE, targetFor(simpler.Pitch.TransposeFine));
addTarget(
targets,
@@ -619,12 +625,7 @@ async function buildDrumRackDevice(koTrack: AblTrack, abletonVersion: AbletonVer
continue;
}
const padNumber = parseInt(subtrack.padCode.slice(1), 10);
// EP133 is 3x4 (top→bottom), Ableton Drum Rack is 4x4 (bottom→top)
// flip vertically: row 3 → row 0, row 0 → row 3
const row = 3 - Math.floor(padNumber / 3);
const col = padNumber % 3;
const drumPad = row * 4 + col;
const drumPad = getDrumRackMidiNote(subtrack.padCode) - 36;
const drumBranch = structuredClone(drumBranchTemplate.DrumBranch);
const note = 92 - drumPad; // 92 is the number of slot for C1 in the drum rack and it goes down
@@ -633,8 +634,10 @@ 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'] = 60; // not sure if this matters
drumBranch.BranchInfo.SendingNote['@Value'] =
subtrack.drumRackSendingNote ?? subtrack.rootNote;
drumBranch.BranchInfo.ChokeGroup['@Value'] = subtrack.inChokeGroup ? 1 : 0;
drumBranch.MixerDevice.Volume.Manual['@Value'] = subtrack.volume;
drumBranch.DeviceChain.MidiToAudioDeviceChain.Devices = await buildSimplerDevice(
subtrack,
abletonVersion,