From 05c6f3f5f99f07faf2cc1ec59dcf60af0165b020 Mon Sep 17 00:00:00 2001 From: themancalledjakob Date: Thu, 7 Mar 2024 11:11:37 +0100 Subject: [PATCH 1/3] remove unnecessary logs --- bin/em/variabletime/web/js/layer.js | 13 ------------- bin/em/variabletime/web/js/main.js | 7 ------- 2 files changed, 20 deletions(-) diff --git a/bin/em/variabletime/web/js/layer.js b/bin/em/variabletime/web/js/layer.js index 64cf29d..47c8c33 100644 --- a/bin/em/variabletime/web/js/layer.js +++ b/bin/em/variabletime/web/js/layer.js @@ -376,13 +376,11 @@ const Layer = function(tp, layerID, fontsAndAxes, autoInit = true) { }; this.init = (initialValues = false) => { return new Promise((resolve) => { - console.log('this is happening','layer init'); const promises = []; promises.push(this.findInjectHierarchyPanelPromise()); const doUpdateTheatre = false; this.updateFonts(doUpdateTheatre) .then(() => { - console.log('this is happening','layer init update fonts'); this.theatreObject = tp.addObject(this.id(), this.props, this.onValuesChange); if (typeof initialValues === 'object') { this.theatreObject.initialValue = initialValues; @@ -390,19 +388,14 @@ const Layer = function(tp, layerID, fontsAndAxes, autoInit = true) { window.layerOrder.add(this.id()); setTimeout(() => { const values = JSON.parse(JSON.stringify(this.theatreObject.value)); - console.log('this is happening','doing the transaction'); tp.studio.transaction(({ set }) => { set(this.theatreObject.props, values); }); - console.log('this is happening','has have been doing the transaction'); setTimeout(() => { - console.log('this is happening'); promises.push(this.findInjectPanelPromise()); - console.log(promises); Promise.allSettled(promises).then(() => { - console.log('this is happening'); resolve(); if (config.autoSave && window.isInitialized) { tp.saveProject(); @@ -468,7 +461,6 @@ const Layer = function(tp, layerID, fontsAndAxes, autoInit = true) { } if (doItAgain) { hierarchyPanelFinderTimeout = setTimeout(() => { - console.log('hierachrypanelfinder'); this.findInjectHierarchyPanel(resolve); }, 30); window.hierarchyPanelFinderTimeout = hierarchyPanelFinderTimeout; @@ -520,19 +512,14 @@ const Layer = function(tp, layerID, fontsAndAxes, autoInit = true) { let panelFinderTimeout = false; this.findInjectPanelPromise = () => { return new Promise((resolve) => { - console.log('this is happening', 'finInjectPanelPRomisE'); this.findInjectPanel(resolve); }); }; this.findInjectPanel = (resolve = false) => { if (tp.studio.selection.length === 0 || (tp.studio.selection.length > 0 && tp.studio.selection[0].address.objectKey !== this.id())) { - console.log('this is happening', 'finInjectPanel DOES NOT RESOLVE HAHAHAHA'); if (typeof resolve === 'function') { - console.log('this is happening', 'resolver'); resolve(); } - console.log('this is happening', 'was resolved?'); - return; } else { const panel = tp.getPanel(); diff --git a/bin/em/variabletime/web/js/main.js b/bin/em/variabletime/web/js/main.js index a3b2d3b..586932e 100644 --- a/bin/em/variabletime/web/js/main.js +++ b/bin/em/variabletime/web/js/main.js @@ -323,20 +323,16 @@ const resize = () => { }; const postModuleInitialized = () => { - console.log('this is happening'); window.setLoadingTask('setting up animation', 80); moduleFS.init() .then(() => { - console.log('this is happening'); artboard = new Artboard(tp, content); initPanels(); // NOTE: we know that our TheatrePlay is initialized tp.connectModuleCallbacks(); exporter.init(); getFontsAndAxes(); - console.log('this is happening'); tp.loadProject().then(() => { - console.log('this is happening'); interactor.init(); resize(); adjustPanel(); @@ -348,7 +344,6 @@ const postModuleInitialized = () => { tp.saveProject(); } }, 1000); - console.log('this is happening'); }); //midiController.init(); }); @@ -461,9 +456,7 @@ const addExistingLayer = (layerID, values) => { layer.valuesCorrector(values); const cppProps = layer.values2cppProps(values); const checkID = Module.addExistingLayer(cppProps, layerID); - console.log('this is happening'); layer.init().then(() => { - console.log('this is happening'); layers.push(layer); layersById[layerID] = layer; resolve(layer); From be11f015b995cb626719e2fa9a61ed3866829305 Mon Sep 17 00:00:00 2001 From: themancalledjakob Date: Thu, 7 Mar 2024 11:13:31 +0100 Subject: [PATCH 2/3] sync letter delays after recording --- bin/em/variabletime/web/js/record.js | 35 +++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/bin/em/variabletime/web/js/record.js b/bin/em/variabletime/web/js/record.js index 5e50c68..708115e 100644 --- a/bin/em/variabletime/web/js/record.js +++ b/bin/em/variabletime/web/js/record.js @@ -4,6 +4,7 @@ import { toCssClass, flattenObject, deFlattenObject, + getNestedProperty, } from './utils.js'; const LiveBuffer = function() { @@ -394,6 +395,38 @@ const Record = function(tp) { liveUpdater.immediateUpdate(layer, merged); }; + /// @brief = copies letterDelay value from audio mapping to the recorded value. + /// + /// @param layer - a layer object + /// @param propPaths - two dimensional array of strings + /// + /// @return + const syncLetterDelays = (layer, propPaths) => { + propPaths.forEach((path) => { + const oldLetterDelay = getNestedProperty(layer.theatreObject.value.letterDelays, path, true); + const isOriginalSequenced = tp.isSequenced(path, layer); + const isLetterDelaySequenced = tp.isSequenced(["letterDelays", path], layer); + // we use audio.getSavedMapping(), because mapping may be removed directly after recording + const mapping = getNestedProperty(audio.getSavedMapping(), [layer.id()].concat(path), true); + const newLetterDelay = (() => { + if (typeof mapping['letterDelay'] === 'undefined') { + return false; + } + return mapping['letterDelay']; + })(); + if (newLetterDelay !== oldLetterDelay && + !isLetterDelaySequenced && + newLetterDelay !== false) { + const prop = getNestedProperty(layer.theatreObject.props.letterDelays, path); + tp.studio.transaction(({ + set + }) => { + set(prop, newLetterDelay); + }); + } + }); + }; + const startRecording = () => { isRecording = STARTING_RECORDING; console.log('Record::startRecording'); @@ -499,10 +532,10 @@ const Record = function(tp) { } }); //setTimeout(() => { - const kf = clone(keyframes); promises.push(() => { return new Promise((subResolve) => { tp.addKeyframes(layer, keyframes).then(() => { + syncLetterDelays(layer, keyframes.map(k => k.path)); layer.updateValuesViaTheatre(true); subResolve(); }); From f829eea9117b0083e42a6003fcc35027ab02f98f Mon Sep 17 00:00:00 2001 From: themancalledjakob Date: Thu, 7 Mar 2024 11:14:24 +0100 Subject: [PATCH 3/3] remember play state --- bin/em/variabletime/web/js/record.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bin/em/variabletime/web/js/record.js b/bin/em/variabletime/web/js/record.js index 708115e..445eb96 100644 --- a/bin/em/variabletime/web/js/record.js +++ b/bin/em/variabletime/web/js/record.js @@ -160,10 +160,15 @@ const Record = function(tp) { const liveUpdater = new LiveUpdater(tp, buffy); let isInitialized = false; + let remember = {}; + const init = () => { if (!isInitialized) { tp.core.onChange(tp.sheet.sequence.pointer.playing, (playing) => { if (isRecording === RECORDING && !playing) { + // when you hit space to stop recording, + // we want to keep it paused + remember.isPlaying = false; stopRecording(); } }); @@ -440,6 +445,7 @@ const Record = function(tp) { init(); } lastPositions = {}; + remember.isPlaying = tp.core.val(tp.sheet.sequence.pointer.playing); tp.sheet.sequence.pause(); const layerKeys = Object.keys(hot); layerKeys.forEach((layerID) => { @@ -554,6 +560,12 @@ const Record = function(tp) { .classList.remove('visible'); console.log('Record::stopRecording', 'stopped recording'); isRecording = NOT_RECORDING; + + if (remember.isPlaying) { + tp.sheet.sequence.play(); + } else { + tp.sheet.sequence.pause(); + } resolve(); }); });