Update Ableton exporter to use sound length for automation calculations
This commit is contained in:
@@ -6,6 +6,7 @@ export type AbletonAutomationTarget = {
|
|||||||
arrangement?: number;
|
arrangement?: number;
|
||||||
session?: number;
|
session?: number;
|
||||||
maxValue?: number;
|
maxValue?: number;
|
||||||
|
soundLength?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type AbletonAutomationTargets = Partial<Record<FaderParam, AbletonAutomationTarget[]>>;
|
export type AbletonAutomationTargets = Partial<Record<FaderParam, AbletonAutomationTarget[]>>;
|
||||||
@@ -62,10 +63,12 @@ export function convertFaderValue(
|
|||||||
convertedValue = value;
|
convertedValue = value;
|
||||||
break;
|
break;
|
||||||
case FaderParam.ATK:
|
case FaderParam.ATK:
|
||||||
convertedValue = koEnvRangeToSeconds(value * 255, track.soundLength) * 1000;
|
convertedValue =
|
||||||
|
koEnvRangeToSeconds(value * 255, target?.soundLength ?? track.soundLength) * 1000;
|
||||||
break;
|
break;
|
||||||
case FaderParam.REL:
|
case FaderParam.REL:
|
||||||
convertedValue = koEnvRangeToSeconds(value * 255, track.soundLength) * 1000;
|
convertedValue =
|
||||||
|
koEnvRangeToSeconds(value * 255, target?.soundLength ?? track.soundLength) * 1000;
|
||||||
break;
|
break;
|
||||||
case FaderParam.PAN:
|
case FaderParam.PAN:
|
||||||
convertedValue = (value - 0.5) * 2;
|
convertedValue = (value - 0.5) * 2;
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ function setLive10SampleReference(fileRef: any, sampleName: string) {
|
|||||||
fileRef.LivePackId = { '@Value': '' };
|
fileRef.LivePackId = { '@Value': '' };
|
||||||
}
|
}
|
||||||
|
|
||||||
function targetFor(parameter: any, maxValue?: number) {
|
function targetFor(parameter: any, maxValue?: number, soundLength?: number) {
|
||||||
const automationTarget =
|
const automationTarget =
|
||||||
parameter?.AutomationTarget?.['@Id'] === undefined
|
parameter?.AutomationTarget?.['@Id'] === undefined
|
||||||
? undefined
|
? undefined
|
||||||
@@ -113,6 +113,7 @@ function targetFor(parameter: any, maxValue?: number) {
|
|||||||
arrangement: automationTarget,
|
arrangement: automationTarget,
|
||||||
session: automationTarget,
|
session: automationTarget,
|
||||||
maxValue,
|
maxValue,
|
||||||
|
soundLength,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,6 +189,10 @@ function trackAutomationTargets(midiTrack: any, includeArrangementMixer: boolean
|
|||||||
|
|
||||||
findSimplers(midiTrack.DeviceChain.DeviceChain.Devices).forEach((simpler) => {
|
findSimplers(midiTrack.DeviceChain.DeviceChain.Devices).forEach((simpler) => {
|
||||||
const oneshot = Number(simpler.Globals.PlaybackMode['@Value']) === 1;
|
const oneshot = Number(simpler.Globals.PlaybackMode['@Value']) === 1;
|
||||||
|
const sampleRef = simpler.Player.MultiSampleMap.SampleParts.MultiSamplePart.SampleRef;
|
||||||
|
const sampleRate = Number(sampleRef.DefaultSampleRate?.['@Value']);
|
||||||
|
const sampleDuration = Number(sampleRef.DefaultDuration?.['@Value']);
|
||||||
|
const soundLength = sampleRate > 0 ? sampleDuration / sampleRate : undefined;
|
||||||
addTarget(targets, FaderParam.PTC, targetFor(simpler.Pitch.TransposeKey));
|
addTarget(targets, FaderParam.PTC, targetFor(simpler.Pitch.TransposeKey));
|
||||||
addTarget(targets, FaderParam.TUNE, targetFor(simpler.Pitch.TransposeFine));
|
addTarget(targets, FaderParam.TUNE, targetFor(simpler.Pitch.TransposeFine));
|
||||||
addTarget(
|
addTarget(
|
||||||
@@ -198,6 +203,7 @@ function trackAutomationTargets(midiTrack: any, includeArrangementMixer: boolean
|
|||||||
? simpler.VolumeAndPan.OneShotEnvelope.FadeInTime
|
? simpler.VolumeAndPan.OneShotEnvelope.FadeInTime
|
||||||
: simpler.VolumeAndPan.Envelope.AttackTime,
|
: simpler.VolumeAndPan.Envelope.AttackTime,
|
||||||
oneshot ? 2000 : undefined,
|
oneshot ? 2000 : undefined,
|
||||||
|
soundLength,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
addTarget(
|
addTarget(
|
||||||
@@ -208,6 +214,7 @@ function trackAutomationTargets(midiTrack: any, includeArrangementMixer: boolean
|
|||||||
? simpler.VolumeAndPan.OneShotEnvelope.FadeOutTime
|
? simpler.VolumeAndPan.OneShotEnvelope.FadeOutTime
|
||||||
: simpler.VolumeAndPan.Envelope.ReleaseTime,
|
: simpler.VolumeAndPan.Envelope.ReleaseTime,
|
||||||
oneshot ? 2000 : undefined,
|
oneshot ? 2000 : undefined,
|
||||||
|
soundLength,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
addTarget(targets, FaderParam.MOD, targetFor(simpler.Pitch.PitchLfoAmount));
|
addTarget(targets, FaderParam.MOD, targetFor(simpler.Pitch.PitchLfoAmount));
|
||||||
|
|||||||
Reference in New Issue
Block a user