Update Ableton playback state logic for accurate EP representation
This commit is contained in:
@@ -1,10 +1,27 @@
|
|||||||
export type AbletonPlaybackMode = 'oneshot' | 'key' | 'legato';
|
export type AbletonPlaybackMode = 'oneshot' | 'key' | 'legato';
|
||||||
|
|
||||||
export function getSimplerPlaybackState(projectMode: AbletonPlaybackMode) {
|
export function getSimplerPlaybackState(projectMode: AbletonPlaybackMode) {
|
||||||
|
switch (projectMode) {
|
||||||
|
case 'oneshot':
|
||||||
return {
|
return {
|
||||||
playbackMode: 1,
|
playbackMode: 1,
|
||||||
voices: projectMode === 'key' ? 5 : 0,
|
voices: 0,
|
||||||
retrigger: projectMode === 'oneshot',
|
retrigger: true,
|
||||||
portamentoMode: projectMode === 'legato' ? 2 : 0,
|
portamentoMode: 0,
|
||||||
|
};
|
||||||
|
case 'key':
|
||||||
|
return {
|
||||||
|
playbackMode: 0,
|
||||||
|
voices: 5,
|
||||||
|
retrigger: true,
|
||||||
|
portamentoMode: 0,
|
||||||
|
};
|
||||||
|
case 'legato':
|
||||||
|
return {
|
||||||
|
playbackMode: 0,
|
||||||
|
voices: 1,
|
||||||
|
retrigger: false,
|
||||||
|
portamentoMode: 2,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,16 +2,19 @@ import assert from 'node:assert/strict';
|
|||||||
import test from 'node:test';
|
import test from 'node:test';
|
||||||
import { getSimplerPlaybackState } from '../src/lib/exporters/ableton/playback';
|
import { getSimplerPlaybackState } from '../src/lib/exporters/ableton/playback';
|
||||||
|
|
||||||
test('exports every EP playback mode as automatic One-Shot Trigger playback', () => {
|
test('exports EP KEY as polyphonic Classic playback', () => {
|
||||||
assert.deepEqual(getSimplerPlaybackState('key'), {
|
assert.deepEqual(getSimplerPlaybackState('key'), {
|
||||||
playbackMode: 1,
|
playbackMode: 0,
|
||||||
voices: 5,
|
voices: 5,
|
||||||
retrigger: false,
|
retrigger: true,
|
||||||
portamentoMode: 0,
|
portamentoMode: 0,
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test('exports EP LEGATO as monophonic Classic playback without retriggering', () => {
|
||||||
assert.deepEqual(getSimplerPlaybackState('legato'), {
|
assert.deepEqual(getSimplerPlaybackState('legato'), {
|
||||||
playbackMode: 1,
|
playbackMode: 0,
|
||||||
voices: 0,
|
voices: 1,
|
||||||
retrigger: false,
|
retrigger: false,
|
||||||
portamentoMode: 2,
|
portamentoMode: 2,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user