From 87de8c08009549bcb675f4e4e980554e72e88762 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 16 Jun 2022 20:36:59 +0200 Subject: [PATCH 1/2] automatically run onTrigger in scheduler --- packages/webaudio/scheduler.mjs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/webaudio/scheduler.mjs b/packages/webaudio/scheduler.mjs index dac8c409..11195aef 100644 --- a/packages/webaudio/scheduler.mjs +++ b/packages/webaudio/scheduler.mjs @@ -18,10 +18,12 @@ export class Scheduler { if (!e.part.begin.equals(e.whole.begin)) { return; } + if (e.context.onTrigger) { + // TODO: kill first param, as it's contained in e + e.context.onTrigger(e.whole.begin, e, audioContext.currentTime, 1 /* cps */); + } if (onEvent) { onEvent?.(e); - } else { - console.warn('unplayable event: no audio node nor onEvent callback', e); } }); }, From 25d6ff1c90739f9dbf6fba4f8ed6790294dce076 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Thu, 16 Jun 2022 20:37:13 +0200 Subject: [PATCH 2/2] can now set latency on the scheduler --- packages/webaudio/scheduler.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/webaudio/scheduler.mjs b/packages/webaudio/scheduler.mjs index 11195aef..e4719307 100644 --- a/packages/webaudio/scheduler.mjs +++ b/packages/webaudio/scheduler.mjs @@ -10,11 +10,11 @@ import { State, TimeSpan } from '@strudel.cycles/core'; export class Scheduler { worker; pattern; - constructor({ audioContext, interval = 0.2, onEvent }) { + constructor({ audioContext, interval = 0.2, onEvent, latency = 0.2 }) { this.worker = new ClockWorker( audioContext, (begin, end) => { - this.pattern.query(new State(new TimeSpan(begin, end))).forEach((e) => { + this.pattern.query(new State(new TimeSpan(begin + latency, end + latency))).forEach((e) => { if (!e.part.begin.equals(e.whole.begin)) { return; }