diff --git a/src/lib/exporters/ableton/playback.ts b/src/lib/exporters/ableton/playback.ts new file mode 100644 index 0000000..500eeea --- /dev/null +++ b/src/lib/exporters/ableton/playback.ts @@ -0,0 +1,7 @@ +import { PadCode } from '../../../types/types'; + +export type AbletonPlaybackMode = 'oneshot' | 'key' | 'legato'; + +export function hasOneShotOverride(padCode: PadCode, oneShotPads: PadCode[] = []) { + return oneShotPads.includes(padCode); +} diff --git a/src/lib/transformers/ableton.ts b/src/lib/transformers/ableton.ts index 2b77b4a..ef1e3fd 100644 --- a/src/lib/transformers/ableton.ts +++ b/src/lib/transformers/ableton.ts @@ -10,6 +10,7 @@ import { ProjectRawData, TimeSignature, } from '../../types/types'; +import { hasOneShotOverride } from '../exporters/ableton/playback'; import { getSampleName } from '../exporters/utils'; import { findPad, findSoundByPad, findSoundIdByPad } from '../utils'; @@ -21,6 +22,7 @@ export type AblData = { export type AblTrack = Omit & { padCode: PadCode; + oneShotOverride: boolean; group: string; sampleName: string; sampleChannels: number; @@ -174,6 +176,10 @@ function abletonTransformer(data: ProjectRawData, exporterParams: ExporterParams ...omit(pad, ['file', 'rawData']), soundId, padCode: pattern.pad, + oneShotOverride: hasOneShotOverride( + pattern.pad, + exporterParams.abletonOneShotPads, + ), name: sound?.meta?.name || pattern.pad, volume: pad.volume / 200, // converting from 0-200 to 0.0-1.0 sampleName: getSampleName(sound?.meta?.name, soundId), @@ -244,6 +250,7 @@ function abletonTransformer(data: ProjectRawData, exporterParams: ExporterParams ...omit(pad, ['file', 'rawData']), soundId: pad.soundId, padCode, + oneShotOverride: hasOneShotOverride(padCode, exporterParams.abletonOneShotPads), name: sound?.meta?.name || padCode, volume: pad.volume / 200, sampleName: getSampleName(sound?.meta?.name, pad.soundId), @@ -274,6 +281,7 @@ function abletonTransformer(data: ProjectRawData, exporterParams: ExporterParams const drumTrack: AblTrack = { padCode: `${group}0` as PadCode, + oneShotOverride: false, group, sampleName: '', sampleChannels: 0, diff --git a/src/types/types.ts b/src/types/types.ts index 7f66287..0c42ee6 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -217,6 +217,7 @@ export type ExportFormat = { export type ExporterParams = { abletonVersion?: '10' | '11'; + abletonOneShotPads?: PadCode[]; projectName?: string; // custom project name for exported files includeArchivedSamples?: boolean; exportAllPadsWithSamples?: boolean; // export all pads with assigned samples even if not used