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