Expose scheduler state and don't enqueue/trigger midi keys when repl stopped

This commit is contained in:
Aria 2026-01-14 11:44:48 -06:00
parent b954a25b2b
commit 80875cca95
3 changed files with 23 additions and 3 deletions

View file

@ -2,7 +2,13 @@ import { NeoCyclist } from './neocyclist.mjs';
import { Cyclist } from './cyclist.mjs'; import { Cyclist } from './cyclist.mjs';
import { evaluate as _evaluate } from './evaluate.mjs'; import { evaluate as _evaluate } from './evaluate.mjs';
import { errorLogger, logger } from './logger.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 { evalScope } from './evaluate.mjs';
import { register, Pattern, isPattern, silence, stack } from './pattern.mjs'; import { register, Pattern, isPattern, silence, stack } from './pattern.mjs';
import { reset_state } from './impure.mjs'; import { reset_state } from './impure.mjs';
@ -52,6 +58,7 @@ export function repl({
getTime, getTime,
onToggle: (started) => { onToggle: (started) => {
updateState({ started }); updateState({ started });
setIsStarted(started);
onToggle?.(started); onToggle?.(started);
if (!started) { if (!started) {
reset_state(); reset_state();

View file

@ -8,6 +8,7 @@ let time;
let cpsFunc; let cpsFunc;
let pattern; let pattern;
let triggerFunc; let triggerFunc;
let isStarted;
export function getTime() { export function getTime() {
if (!time) { if (!time) {
throw new Error('no time set! use setTime to define a time source'); throw new Error('no time set! use setTime to define a time source');
@ -42,3 +43,11 @@ export function setTriggerFunc(func) {
export function getTriggerFunc() { export function getTriggerFunc() {
return triggerFunc; return triggerFunc;
} }
export function setIsStarted(val) {
isStarted = !!val;
}
export function getIsStarted() {
return isStarted;
}

View file

@ -10,6 +10,7 @@ import {
Pattern, Pattern,
TimeSpan, TimeSpan,
getCps, getCps,
getIsStarted,
getPattern, getPattern,
getTime, getTime,
getTriggerFunc, getTriggerFunc,
@ -625,8 +626,11 @@ export async function midikeys(input) {
const { dataBytes, message } = e; const { dataBytes, message } = e;
const noteon = message.command === 9; const noteon = message.command === 9;
let noteoff = message.command === 8; let noteoff = message.command === 8;
if (!noteon && !noteoff) { // Don't enqueue or trigger midi notes if scheduler is not started
// Ignore non-note messages (e.g. CC, pitchbend, modwheel, etc.) const notStarted = !getIsStarted();
// Ignore non-note messages (e.g. CC, pitchbend, modwheel, etc.)
const notANote = !noteon && !noteoff;
if (notStarted || notANote) {
return; return;
} }
const [note, velocity] = dataBytes; const [note, velocity] = dataBytes;