From 80875cca956024e017281108fcd2fee673e6f1f3 Mon Sep 17 00:00:00 2001 From: Aria Date: Wed, 14 Jan 2026 11:44:48 -0600 Subject: [PATCH] Expose scheduler state and don't enqueue/trigger midi keys when repl stopped --- packages/core/repl.mjs | 9 ++++++++- packages/core/schedulerState.mjs | 9 +++++++++ packages/midi/midi.mjs | 8 ++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/core/repl.mjs b/packages/core/repl.mjs index e39b57de3..a056cac53 100644 --- a/packages/core/repl.mjs +++ b/packages/core/repl.mjs @@ -2,7 +2,13 @@ import { NeoCyclist } from './neocyclist.mjs'; import { Cyclist } from './cyclist.mjs'; import { evaluate as _evaluate } from './evaluate.mjs'; import { errorLogger, logger } from './logger.mjs'; -import { setCpsFunc, setPattern as exposeSchedulerPattern, setTime, setTriggerFunc } from './schedulerState.mjs'; +import { + setCpsFunc, + setIsStarted, + setPattern as exposeSchedulerPattern, + setTime, + setTriggerFunc, +} from './schedulerState.mjs'; import { evalScope } from './evaluate.mjs'; import { register, Pattern, isPattern, silence, stack } from './pattern.mjs'; import { reset_state } from './impure.mjs'; @@ -52,6 +58,7 @@ export function repl({ getTime, onToggle: (started) => { updateState({ started }); + setIsStarted(started); onToggle?.(started); if (!started) { reset_state(); diff --git a/packages/core/schedulerState.mjs b/packages/core/schedulerState.mjs index 97a4f56dc..14b4c9054 100644 --- a/packages/core/schedulerState.mjs +++ b/packages/core/schedulerState.mjs @@ -8,6 +8,7 @@ let time; let cpsFunc; let pattern; let triggerFunc; +let isStarted; export function getTime() { if (!time) { throw new Error('no time set! use setTime to define a time source'); @@ -42,3 +43,11 @@ export function setTriggerFunc(func) { export function getTriggerFunc() { return triggerFunc; } + +export function setIsStarted(val) { + isStarted = !!val; +} + +export function getIsStarted() { + return isStarted; +} diff --git a/packages/midi/midi.mjs b/packages/midi/midi.mjs index 50a58b059..d0a1ce18d 100644 --- a/packages/midi/midi.mjs +++ b/packages/midi/midi.mjs @@ -10,6 +10,7 @@ import { Pattern, TimeSpan, getCps, + getIsStarted, getPattern, getTime, getTriggerFunc, @@ -625,8 +626,11 @@ export async function midikeys(input) { const { dataBytes, message } = e; const noteon = message.command === 9; let noteoff = message.command === 8; - if (!noteon && !noteoff) { - // Ignore non-note messages (e.g. CC, pitchbend, modwheel, etc.) + // Don't enqueue or trigger midi notes if scheduler is not started + const notStarted = !getIsStarted(); + // Ignore non-note messages (e.g. CC, pitchbend, modwheel, etc.) + const notANote = !noteon && !noteoff; + if (notStarted || notANote) { return; } const [note, velocity] = dataBytes;