Feature: Add option to keep unused patterns during export

This commit is contained in:
2026-07-14 09:28:17 +02:00
parent 381901e892
commit f46703ce4f
2 changed files with 29 additions and 2 deletions

View File

@@ -41,6 +41,7 @@ async function exportAbleton(
progressCallback, progressCallback,
abortSignal, abortSignal,
exporterParams.exportAllPadsWithSamples, exporterParams.exportAllPadsWithSamples,
exporterParams.keepUnusedPatterns,
); );
samples.forEach((s) => { samples.forEach((s) => {
zippedProject.file(`${projectName} Project/Samples/Imported/${s.name}`, s.data); zippedProject.file(`${projectName} Project/Samples/Imported/${s.name}`, s.data);

View File

@@ -219,7 +219,11 @@ export function getSampleName(name: string | undefined, soundId: number, extensi
return extension ? `${n}.wav` : n; return extension ? `${n}.wav` : n;
} }
function getSoundsInfoFromProject(data: ProjectRawData, exportAllPadsWithSamples = false) { function getSoundsInfoFromProject(
data: ProjectRawData,
exportAllPadsWithSamples = false,
keepUnusedPatterns = false,
) {
const snds: SoundInfo[] = []; const snds: SoundInfo[] = [];
const existingSounds = new Set<number>(); const existingSounds = new Set<number>();
const usedSoundIds = new Set<number>(); const usedSoundIds = new Set<number>();
@@ -235,6 +239,23 @@ function getSoundsInfoFromProject(data: ProjectRawData, exportAllPadsWithSamples
} }
} }
if (keepUnusedPatterns) {
for (const pattern of data.groupPatterns) {
for (const [source, notes] of Object.entries(pattern.notes)) {
if (notes.length === 0) {
continue;
}
const pad = data.pads[pattern.group]?.find(
(candidate) => candidate.pad === Number(source) + 1,
);
if (pad?.soundId) {
usedSoundIds.add(pad.soundId);
}
}
}
}
for (const group in data.pads) { for (const group in data.pads) {
for (const pad of data.pads[group]) { for (const pad of data.pads[group]) {
if (pad.soundId <= 0) { if (pad.soundId <= 0) {
@@ -267,8 +288,13 @@ export async function collectSamples(
progressCallback: ({ progress, status }: ExportStatus) => void, progressCallback: ({ progress, status }: ExportStatus) => void,
abortSignal: AbortSignal, abortSignal: AbortSignal,
exportAllPadsWithSamples = false, exportAllPadsWithSamples = false,
keepUnusedPatterns = false,
) { ) {
const projectSounds = getSoundsInfoFromProject(data, exportAllPadsWithSamples); const projectSounds = getSoundsInfoFromProject(
data,
exportAllPadsWithSamples,
keepUnusedPatterns,
);
const samples: { name: string; data: Blob }[] = []; const samples: { name: string; data: Blob }[] = [];
const downloaded: string[] = []; const downloaded: string[] = [];