From 8bdbc9ec4c39c31cd9e5cb79485a394dbddd17b3 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 17 Aug 2023 10:08:55 +0200 Subject: [PATCH] superdough: add logger --- packages/superdough/index.mjs | 1 + packages/superdough/logger.mjs | 7 +++++++ packages/superdough/sampler.mjs | 11 ++++++----- packages/superdough/superdough.mjs | 3 ++- packages/webaudio/webaudio.mjs | 4 +++- 5 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 packages/superdough/logger.mjs diff --git a/packages/superdough/index.mjs b/packages/superdough/index.mjs index 9b2067e6..b795539a 100644 --- a/packages/superdough/index.mjs +++ b/packages/superdough/index.mjs @@ -8,3 +8,4 @@ export * from './superdough.mjs'; export * from './sampler.mjs'; export * from './helpers.mjs'; export * from './synth.mjs'; +export * from './logger.mjs'; diff --git a/packages/superdough/logger.mjs b/packages/superdough/logger.mjs new file mode 100644 index 00000000..a20af1b3 --- /dev/null +++ b/packages/superdough/logger.mjs @@ -0,0 +1,7 @@ +let log = (msg) => console.log(msg); + +export const logger = (...args) => log(...args); + +export const setLogger = (fn) => { + log = fn; +}; diff --git a/packages/superdough/sampler.mjs b/packages/superdough/sampler.mjs index 0df5ec15..02e5eada 100644 --- a/packages/superdough/sampler.mjs +++ b/packages/superdough/sampler.mjs @@ -1,6 +1,7 @@ import { noteToMidi, valueToMidi } from './util.mjs'; import { getAudioContext, registerSound } from './index.mjs'; import { getEnvelope } from './helpers.mjs'; +import { logger } from './logger.mjs'; const bufferCache = {}; // string: Promise const loadCache = {}; // string: Promise @@ -24,7 +25,7 @@ function humanFileSize(bytes, si) { export const getSampleBufferSource = async (s, n, note, speed, freq, bank, resolveUrl) => { let transpose = 0; if (freq !== undefined && note !== undefined) { - // logger('[sampler] hap has note and freq. ignoring note', 'warning'); + logger('[sampler] hap has note and freq. ignoring note', 'warning'); } let midi = valueToMidi({ freq, note }, 36); transpose = midi - 36; // C3 is middle C @@ -64,7 +65,7 @@ export const getSampleBufferSource = async (s, n, note, speed, freq, bank, resol export const loadBuffer = (url, ac, s, n = 0) => { const label = s ? `sound "${s}:${n}"` : 'sample'; if (!loadCache[url]) { - //logger(`[sampler] load ${label}..`, 'load-sample', { url }); + logger(`[sampler] load ${label}..`, 'load-sample', { url }); const timestamp = Date.now(); loadCache[url] = fetch(url) .then((res) => res.arrayBuffer()) @@ -72,7 +73,7 @@ export const loadBuffer = (url, ac, s, n = 0) => { const took = Date.now() - timestamp; const size = humanFileSize(res.byteLength); // const downSpeed = humanFileSize(res.byteLength / took); - //logger(`[sampler] load ${label}... done! loaded ${size} in ${took}ms`, 'loaded-sample', { url }); + logger(`[sampler] load ${label}... done! loaded ${size} in ${took}ms`, 'loaded-sample', { url }); const decoded = await ac.decodeAudioData(res); bufferCache[url] = decoded; return decoded; @@ -224,12 +225,12 @@ export async function onTriggerSample(t, value, onended, bank, resolveUrl) { // asny stuff above took too long? if (ac.currentTime > t) { - //logger(`[sampler] still loading sound "${s}:${n}"`, 'highlight'); + logger(`[sampler] still loading sound "${s}:${n}"`, 'highlight'); // console.warn('sample still loading:', s, n); return; } if (!bufferSource) { - //logger(`[sampler] could not load "${s}:${n}"`, 'error'); + logger(`[sampler] could not load "${s}:${n}"`, 'error'); return; } bufferSource.playbackRate.value = Math.abs(speed) * bufferSource.playbackRate.value; diff --git a/packages/superdough/superdough.mjs b/packages/superdough/superdough.mjs index 33498d95..1279000c 100644 --- a/packages/superdough/superdough.mjs +++ b/packages/superdough/superdough.mjs @@ -11,6 +11,7 @@ import { clamp } from './util.mjs'; import workletsUrl from './worklets.mjs?url'; import { getFilter, gainNode } from './helpers.mjs'; import { map } from 'nanostores'; +import { logger } from './logger.mjs'; export const soundMap = map(); export function registerSound(key, onTrigger, data = {}) { @@ -195,7 +196,7 @@ export const superdough = async (value, deadline, hapDuration) => { return; } if (ac.currentTime > t) { - // logger('[webaudio] skip hap: still loading', ac.currentTime - t); + logger('[webaudio] skip hap: still loading', ac.currentTime - t); return; } const chain = []; // audio nodes that will be connected to each other sequentially diff --git a/packages/webaudio/webaudio.mjs b/packages/webaudio/webaudio.mjs index 6d01e37f..8b32a90c 100644 --- a/packages/webaudio/webaudio.mjs +++ b/packages/webaudio/webaudio.mjs @@ -5,9 +5,11 @@ This program is free software: you can redistribute it and/or modify it under th */ import * as strudel from '@strudel.cycles/core'; -import { superdough, getAudioContext } from 'superdough'; +import { superdough, getAudioContext, setLogger } from 'superdough'; const { Pattern, logger } = strudel; +setLogger(logger); + const hap2value = (hap) => { hap.ensureObjectValue(); return { ...hap.value, velocity: hap.context.velocity };