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,
|
AblGroupLane,
|
||||||
AblScene,
|
AblScene,
|
||||||
AblTrack,
|
AblTrack,
|
||||||
|
getDrumRackMidiNote,
|
||||||
} from '../../transformers/ableton';
|
} from '../../transformers/ableton';
|
||||||
import { getQuarterNotesPerBar } from '../utils';
|
import { getQuarterNotesPerBar } from '../utils';
|
||||||
import {
|
import {
|
||||||
@@ -218,7 +219,12 @@ function trackAutomationTargets(midiTrack: any, includeArrangementMixer: boolean
|
|||||||
sampleRate > 0
|
sampleRate > 0
|
||||||
? (trimmedFrames > 0 ? trimmedFrames : sampleDuration) / sampleRate
|
? (trimmedFrames > 0 ? trimmedFrames : sampleDuration) / sampleRate
|
||||||
: undefined;
|
: 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, FaderParam.TUNE, targetFor(simpler.Pitch.TransposeFine));
|
||||||
addTarget(
|
addTarget(
|
||||||
targets,
|
targets,
|
||||||
@@ -619,12 +625,7 @@ async function buildDrumRackDevice(koTrack: AblTrack, abletonVersion: AbletonVer
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const padNumber = parseInt(subtrack.padCode.slice(1), 10);
|
const drumPad = getDrumRackMidiNote(subtrack.padCode) - 36;
|
||||||
// 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 drumBranch = structuredClone(drumBranchTemplate.DrumBranch);
|
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
|
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.EffectiveName['@Value'] = subtrack.name;
|
||||||
drumBranch.Name.UserName['@Value'] = subtrack.name;
|
drumBranch.Name.UserName['@Value'] = subtrack.name;
|
||||||
drumBranch.BranchInfo.ReceivingNote['@Value'] = note;
|
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.BranchInfo.ChokeGroup['@Value'] = subtrack.inChokeGroup ? 1 : 0;
|
||||||
|
drumBranch.MixerDevice.Volume.Manual['@Value'] = subtrack.volume;
|
||||||
drumBranch.DeviceChain.MidiToAudioDeviceChain.Devices = await buildSimplerDevice(
|
drumBranch.DeviceChain.MidiToAudioDeviceChain.Devices = await buildSimplerDevice(
|
||||||
subtrack,
|
subtrack,
|
||||||
abletonVersion,
|
abletonVersion,
|
||||||
|
|||||||
Reference in New Issue
Block a user