Improve compatibility with different Ableton Live versions in builders
This commit is contained in:
@@ -597,7 +597,7 @@ async function buildReturnTrack(
|
||||
setColorValue(returnTrack, 28);
|
||||
|
||||
if (projectData.effects.effectType === EffectType.Reverb) {
|
||||
const effectReverbTemplate = await loadTemplate<ALSReverb>('effectReverb');
|
||||
const effectReverbTemplate = await loadTemplate<ALSReverb>('effectReverb', abletonVersion);
|
||||
const effectReverb = structuredClone(effectReverbTemplate.Reverb);
|
||||
|
||||
// these params are very rough approximation of the KO's reverb
|
||||
@@ -612,7 +612,7 @@ async function buildReturnTrack(
|
||||
}
|
||||
|
||||
if (projectData.effects.effectType === EffectType.Delay) {
|
||||
const effectDelayTemplate = await loadTemplate<ALSDelay>('effectDelay');
|
||||
const effectDelayTemplate = await loadTemplate<ALSDelay>('effectDelay', abletonVersion);
|
||||
const effectDelay = structuredClone(effectDelayTemplate.Delay);
|
||||
|
||||
effectDelay.DelayLine_SyncL.Manual['@Value'] = 'false';
|
||||
@@ -628,7 +628,10 @@ async function buildReturnTrack(
|
||||
}
|
||||
|
||||
if (projectData.effects.effectType === EffectType.Distortion) {
|
||||
const effectDistortionTemplate = await loadTemplate<ALSDistortion>('effectDistortion');
|
||||
const effectDistortionTemplate = await loadTemplate<ALSDistortion>(
|
||||
'effectDistortion',
|
||||
abletonVersion,
|
||||
);
|
||||
const effectDistortion = structuredClone(effectDistortionTemplate.Overdrive);
|
||||
|
||||
effectDistortion.Drive.Manual['@Value'] = projectData.effects.param1 * 50;
|
||||
@@ -638,18 +641,27 @@ async function buildReturnTrack(
|
||||
}
|
||||
|
||||
if (projectData.effects.effectType === EffectType.Chorus) {
|
||||
const effectChorusTemplate = await loadTemplate<ALSChorus>('effectChorus');
|
||||
const effectChorus = structuredClone(effectChorusTemplate.Chorus2);
|
||||
const effectChorusTemplate = await loadTemplate<ALSChorus>('effectChorus', abletonVersion);
|
||||
const effectChorus = structuredClone(
|
||||
abletonVersion === '10'
|
||||
? (effectChorusTemplate as any).Chorus
|
||||
: effectChorusTemplate.Chorus2,
|
||||
);
|
||||
|
||||
if (abletonVersion === '10') {
|
||||
effectChorus.ModAmount.Manual['@Value'] = projectData.effects.param1 * 6.5;
|
||||
} else {
|
||||
effectChorus.Amount.Manual['@Value'] = projectData.effects.param1;
|
||||
}
|
||||
effectChorus.Feedback.Manual['@Value'] = projectData.effects.param2 * 0.8;
|
||||
|
||||
returnTrack.DeviceChain.DeviceChain.Devices = { Chorus2: effectChorus };
|
||||
returnTrack.DeviceChain.DeviceChain.Devices =
|
||||
abletonVersion === '10' ? { Chorus: effectChorus } : { Chorus2: effectChorus };
|
||||
}
|
||||
|
||||
// putting a filter in return track is absolutely pointless, but hey, why not
|
||||
if (projectData.effects.effectType === EffectType.Filter) {
|
||||
const effectFilterTemplate = await loadTemplate<ALSFilter>('effectFilter');
|
||||
const effectFilterTemplate = await loadTemplate<ALSFilter>('effectFilter', abletonVersion);
|
||||
const effectFilter = structuredClone(effectFilterTemplate.AutoFilter);
|
||||
|
||||
effectFilter.Cutoff.Manual['@Value'] = 20 + projectData.effects.param1 * (135 - 20);
|
||||
@@ -659,7 +671,10 @@ async function buildReturnTrack(
|
||||
}
|
||||
|
||||
if (projectData.effects.effectType === EffectType.Compressor) {
|
||||
const effectCompressorTemplate = await loadTemplate<ALSCompressor>('effectCompressor');
|
||||
const effectCompressorTemplate = await loadTemplate<ALSCompressor>(
|
||||
'effectCompressor',
|
||||
abletonVersion,
|
||||
);
|
||||
const effectCompressor = structuredClone(effectCompressorTemplate.Compressor2);
|
||||
|
||||
// params are ignored for now, just putting a basic compressor
|
||||
@@ -672,6 +687,7 @@ async function buildReturnTrack(
|
||||
|
||||
export async function buildProject(projectData: ProjectRawData, exporterParams: ExporterParams) {
|
||||
resetIds();
|
||||
const abletonVersion = getAbletonVersion(exporterParams);
|
||||
const transformedData = abletonTransformer(projectData, exporterParams);
|
||||
|
||||
if (import.meta.env.DEV) {
|
||||
@@ -685,7 +701,7 @@ export async function buildProject(projectData: ProjectRawData, exporterParams:
|
||||
_localTrackColor = 1;
|
||||
_localGroupTrackColor = 1;
|
||||
|
||||
const projectTemplate = await loadTemplate<ALSProject>('project');
|
||||
const projectTemplate = await loadTemplate<ALSProject>('project', abletonVersion);
|
||||
const project = structuredClone(projectTemplate);
|
||||
|
||||
// setting up tempo
|
||||
@@ -712,17 +728,24 @@ export async function buildProject(projectData: ProjectRawData, exporterParams:
|
||||
const returnTrack = await buildReturnTrack(
|
||||
projectData,
|
||||
project.Ableton.LiveSet.Tracks['#'].length + 1,
|
||||
abletonVersion,
|
||||
);
|
||||
|
||||
project.Ableton.LiveSet.Tracks['#'].push(returnTrack);
|
||||
}
|
||||
|
||||
if (exporterParams.clips) {
|
||||
project.Ableton.LiveSet.Scenes.Scene = await buildScenes(
|
||||
const scenes = await buildScenes(
|
||||
transformedData.scenes,
|
||||
projectData.settings,
|
||||
transformedData.scenes.length,
|
||||
abletonVersion,
|
||||
);
|
||||
if (abletonVersion === '10') {
|
||||
(project.Ableton.LiveSet as any).SceneNames.Scene = scenes;
|
||||
} else {
|
||||
project.Ableton.LiveSet.Scenes.Scene = scenes;
|
||||
}
|
||||
}
|
||||
|
||||
if (exporterParams.sendEffects) {
|
||||
|
||||
Reference in New Issue
Block a user