Refactor pattern scene generation in ableton transformer
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user