From 281ad5fac9131ce6ee1c1f2dbb2c0df11b69233d Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 24 Aug 2023 08:50:42 +0200 Subject: [PATCH] add nanFallback for better errors --- packages/superdough/sampler.mjs | 3 ++- packages/superdough/superdough.mjs | 3 ++- packages/superdough/util.mjs | 8 ++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/superdough/sampler.mjs b/packages/superdough/sampler.mjs index 02e5eada..62f06243 100644 --- a/packages/superdough/sampler.mjs +++ b/packages/superdough/sampler.mjs @@ -1,4 +1,4 @@ -import { noteToMidi, valueToMidi } from './util.mjs'; +import { noteToMidi, valueToMidi, nanFallback } from './util.mjs'; import { getAudioContext, registerSound } from './index.mjs'; import { getEnvelope } from './helpers.mjs'; import { logger } from './logger.mjs'; @@ -33,6 +33,7 @@ export const getSampleBufferSource = async (s, n, note, speed, freq, bank, resol const ac = getAudioContext(); let sampleUrl; if (Array.isArray(bank)) { + n = nanFallback(n, 0); sampleUrl = bank[n % bank.length]; } else { const midiDiff = (noteA) => noteToMidi(noteA) - midi; diff --git a/packages/superdough/superdough.mjs b/packages/superdough/superdough.mjs index 1279000c..1379c1f6 100644 --- a/packages/superdough/superdough.mjs +++ b/packages/superdough/superdough.mjs @@ -7,7 +7,7 @@ This program is free software: you can redistribute it and/or modify it under th import './feedbackdelay.mjs'; import './reverb.mjs'; import './vowel.mjs'; -import { clamp } from './util.mjs'; +import { clamp, nanFallback } from './util.mjs'; import workletsUrl from './worklets.mjs?url'; import { getFilter, gainNode } from './helpers.mjs'; import { map } from 'nanostores'; @@ -168,6 +168,7 @@ export const superdough = async (value, deadline, hapDuration) => { size = 2, velocity = 1, } = value; + gain = nanFallback(gain, 1); gain *= velocity; // legacy fix for velocity let toDisconnect = []; // audio nodes that will be disconnected when the source has ended const onended = () => { diff --git a/packages/superdough/util.mjs b/packages/superdough/util.mjs index db056376..5ba8e9d5 100644 --- a/packages/superdough/util.mjs +++ b/packages/superdough/util.mjs @@ -51,3 +51,11 @@ export const valueToMidi = (value, fallbackValue) => { } return fallbackValue; }; + +export function nanFallback(value, fallback) { + if (isNaN(Number(value))) { + logger(`"${value}" is not a number, falling back to ${fallback}`, 'warning'); + return fallback; + } + return value; +}