Refactor pattern scene generation in ableton transformer

This commit is contained in:
2026-07-14 10:32:22 +02:00
parent aa45d435d5
commit 12d0754fee

View File

@@ -375,7 +375,7 @@ function abletonTransformer(data: ProjectRawData, exporterParams: ExporterParams
});
});
data.groupPatterns
const unusedPatterns = data.groupPatterns
.filter(
(pattern) =>
getPatternSources(pattern).length > 0 &&
@@ -385,17 +385,31 @@ function abletonTransformer(data: ProjectRawData, exporterParams: ExporterParams
const patternDifference = a.patternNumber - b.patternNumber;
const groupDifference = PROJECT_GROUPS.indexOf(a.group) - PROJECT_GROUPS.indexOf(b.group);
return patternDifference || groupDifference;
})
.forEach((pattern) => {
const sceneIndex = ablScenes.length;
const sceneName = `${pattern.group.toUpperCase()} PATTERN ${String(pattern.patternNumber).padStart(2, '0')}`;
const timeSignature = data.scenesSettings.timeSignature;
});
const patternRows = new Map<number, GroupPattern[]>();
unusedPatterns.forEach((pattern) => {
const row = patternRows.get(pattern.patternNumber) || [];
row.push(pattern);
patternRows.set(pattern.patternNumber, row);
});
patternRows.forEach((patterns, patternNumber) => {
const sceneIndex = ablScenes.length;
const affectedGroups = patterns.map((pattern) => pattern.group);
const patternLabel = String(patternNumber).padStart(2, '0');
const sceneName =
patterns.length === 1
? `${patterns[0].group.toUpperCase()} PATTERN ${patternLabel}`
: `PATTERN ${patternLabel} (${affectedGroups.map((group) => group.toUpperCase()).join('/')})`;
const timeSignature = data.scenesSettings.timeSignature;
ablScenes.push({
name: sceneName,
kind: 'pattern',
affectedGroups,
});
patterns.forEach((pattern) => {
const duration = Math.max(1, pattern.bars) * getQuarterNotesPerBar(timeSignature);
ablScenes.push({
name: sceneName,
kind: 'pattern',
affectedGroups: [pattern.group],
});
const occurrence = createOccurrence(
pattern,
sceneName,
@@ -406,6 +420,7 @@ function abletonTransformer(data: ProjectRawData, exporterParams: ExporterParams
);
addPatternClips(pattern, occurrence, 'session');
});
});
}
let arrangementOffset = 0;