Expose scheduler state and don't enqueue/trigger midi keys when repl stopped
This commit is contained in:
parent
b954a25b2b
commit
80875cca95
3 changed files with 23 additions and 3 deletions
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue