Update Ableton export logic to use comprehensive playback state parameters
This commit is contained in:
@@ -389,7 +389,7 @@ async function buildMidiClip(
|
||||
async function buildSimplerDevice(koTrack: AblTrack, abletonVersion: AbletonVersion) {
|
||||
const simplerTemplate = await loadTemplate<ALSSimpler>('simpler', abletonVersion);
|
||||
const device = structuredClone(simplerTemplate.OriginalSimpler);
|
||||
const playbackState = getSimplerPlaybackState(koTrack.playMode, koTrack.oneShotOverride);
|
||||
const playbackState = getSimplerPlaybackState(koTrack.playMode);
|
||||
const samplePart = device.Player.MultiSampleMap.SampleParts.MultiSamplePart;
|
||||
const loopModulators = device.Player.LoopModulators;
|
||||
const simplerFilter = device.Filter.Slot.Value.SimplerFilter;
|
||||
@@ -415,10 +415,10 @@ async function buildSimplerDevice(koTrack: AblTrack, abletonVersion: AbletonVers
|
||||
device.VolumeAndPan.OneShotEnvelope.FadeOutTime.Manual['@Value'] = 0;
|
||||
device.VolumeAndPan.OneShotEnvelope.SustainMode.Manual['@Value'] = 0;
|
||||
device.Globals.PlaybackMode['@Value'] = playbackState.playbackMode;
|
||||
if (playbackState.monophonic) {
|
||||
device.Globals.NumVoices['@Value'] = 1;
|
||||
device.Globals.RetriggerMode['@Value'] = 'false';
|
||||
}
|
||||
device.Globals.NumVoices['@Value'] = playbackState.voices;
|
||||
device.Globals.RetriggerMode['@Value'] = playbackState.retrigger;
|
||||
device.Globals.PortamentoMode.Manual['@Value'] = playbackState.portamentoMode;
|
||||
device.Globals.PortamentoTime.Manual['@Value'] = playbackState.portamentoMode === 2 ? 0.1 : 50;
|
||||
const sampleRef = device.Player.MultiSampleMap.SampleParts.MultiSamplePart.SampleRef;
|
||||
if (abletonVersion === '10') {
|
||||
setLive10SampleReference(sampleRef.FileRef, koTrack.sampleName);
|
||||
|
||||
@@ -1,18 +1,11 @@
|
||||
import { PadCode } from '../../../types/types';
|
||||
|
||||
export type AbletonPlaybackMode = 'oneshot' | 'key' | 'legato';
|
||||
|
||||
export function hasOneShotOverride(padCode: PadCode, oneShotPads: PadCode[] = []) {
|
||||
return oneShotPads.includes(padCode);
|
||||
}
|
||||
|
||||
export function getSimplerPlaybackState(
|
||||
projectMode: AbletonPlaybackMode,
|
||||
oneShotOverride: boolean,
|
||||
) {
|
||||
export function getSimplerPlaybackState(projectMode: AbletonPlaybackMode) {
|
||||
return {
|
||||
playbackMode: projectMode === 'oneshot' || oneShotOverride ? 1 : 0,
|
||||
monophonic: projectMode === 'legato',
|
||||
playbackMode: 1,
|
||||
voices: projectMode === 'key' ? 5 : 0,
|
||||
retrigger: projectMode === 'oneshot',
|
||||
portamentoMode: projectMode === 'legato' ? 2 : 0,
|
||||
useOneShotEnvelope: projectMode === 'oneshot',
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ import {
|
||||
ProjectRawData,
|
||||
TimeSignature,
|
||||
} from '../../types/types';
|
||||
import { hasOneShotOverride } from '../exporters/ableton/playback';
|
||||
import { getSampleName } from '../exporters/utils';
|
||||
import { findPad, findSoundByPad, findSoundIdByPad } from '../utils';
|
||||
|
||||
@@ -22,7 +21,6 @@ export type AblData = {
|
||||
|
||||
export type AblTrack = Omit<Pad, 'file' | 'rawData' | 'midiChannel'> & {
|
||||
padCode: PadCode;
|
||||
oneShotOverride: boolean;
|
||||
group: string;
|
||||
sampleName: string;
|
||||
sampleChannels: number;
|
||||
@@ -176,7 +174,6 @@ 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),
|
||||
@@ -247,7 +244,6 @@ 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),
|
||||
@@ -278,7 +274,6 @@ function abletonTransformer(data: ProjectRawData, exporterParams: ExporterParams
|
||||
|
||||
const drumTrack: AblTrack = {
|
||||
padCode: `${group}0` as PadCode,
|
||||
oneShotOverride: false,
|
||||
group,
|
||||
sampleName: '',
|
||||
sampleChannels: 0,
|
||||
|
||||
Reference in New Issue
Block a user