Improve Ableton builder by using dedicated note mapping function and refining device setup.
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user