From 1a1363ef777918983bab70d2f58db6a4cc92e9ef Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 10 Nov 2022 22:25:58 +0100 Subject: [PATCH] scheduler error handling --- packages/core/cyclist.mjs | 2 +- packages/core/util.mjs | 6 +++++- packages/react/src/hooks/useStrudel.mjs | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/core/cyclist.mjs b/packages/core/cyclist.mjs index c54887dd..711903ed 100644 --- a/packages/core/cyclist.mjs +++ b/packages/core/cyclist.mjs @@ -38,7 +38,7 @@ export class Cyclist { } }); } catch (e) { - console.warn('scheduler error', e); + console.warn('scheduler error: ', e.message); onError?.(e); } }, // called slightly before each cycle diff --git a/packages/core/util.mjs b/packages/core/util.mjs index 85b11b90..7b8a72d1 100644 --- a/packages/core/util.mjs +++ b/packages/core/util.mjs @@ -55,9 +55,13 @@ export const midi2note = (n) => { export const mod = (n, m) => ((n % m) + m) % m; export const getPlayableNoteValue = (hap) => { - let { value: note, context } = hap; + let { value, context } = hap; + let note = value; if (typeof note === 'object' && !Array.isArray(note)) { note = note.note || note.n || note.value; + if (note === undefined) { + throw new Error(`cannot find a playable note for ${JSON.stringify(value)}`); + } } // if value is number => interpret as midi number as long as its not marked as frequency if (typeof note === 'number' && context.type !== 'frequency') { diff --git a/packages/react/src/hooks/useStrudel.mjs b/packages/react/src/hooks/useStrudel.mjs index 833cc4cd..8fb0eafa 100644 --- a/packages/react/src/hooks/useStrudel.mjs +++ b/packages/react/src/hooks/useStrudel.mjs @@ -30,6 +30,7 @@ function useStrudel({ defaultOutput, interval, getTime, evalOnMount = false, ini setActiveCode(code); setPattern(_pattern); setEvalError(); + setSchedulerError(); if (autolink) { window.location.hash = '#' + encodeURIComponent(btoa(code)); }