From cf3428b3c3f3be18044d62d3aea297a6a8c8793b Mon Sep 17 00:00:00 2001 From: Fr0stbyteR Date: Sat, 29 Jul 2023 00:00:57 +0800 Subject: [PATCH] use awp as time reference at max precision --- src/TransportNode.js | 4 ++-- src/TransportProcessor.js | 22 ++++++++++++---------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/TransportNode.js b/src/TransportNode.js index c70ce37..3a19d1c 100644 --- a/src/TransportNode.js +++ b/src/TransportNode.js @@ -13,8 +13,8 @@ export class TransportNode extends AudioWorkletNode { } /** @type {(this: MessagePort, ev: MessageEvent) => any} */ handleMessage = (message) => { - if (message.data === "bang") { - let info = this.convertTimeToBarsBeats(this.context.currentTime); + if (message.data && message.data.type === "bang") { + let info = this.convertTimeToBarsBeats(message.data.currentTime); this.app.clock.time_position = { bar: info.bar, beat: info.beat, pulse: info.ppqn } this.$clock.innerHTML = `[${info.bar} | ${info.beat} | ${zeroPad(info.ppqn, '2')}]` tryEvaluate( this.app, this.app.global_buffer ); diff --git a/src/TransportProcessor.js b/src/TransportProcessor.js index ec46228..dbdeb29 100644 --- a/src/TransportProcessor.js +++ b/src/TransportProcessor.js @@ -4,29 +4,31 @@ class TransportProcessor extends AudioWorkletProcessor { super(options); this.port.addEventListener("message", this.handleMessage); this.port.start(); + this.stated = false; + /* this.interval = 0.0001; this.origin = currentTime; this.next = this.origin + this.interval; + */ } handleMessage = (message) => { if (message.data === "start") { - this.origin = currentTime; - this.next = this.origin + this.interval; + this.started = true; + // this.origin = currentTime; + // this.next = this.origin + this.interval; } else if (message.data === "pause") { - this.next = Infinity; + // this.next = Infinity; + this.started = false; } else if (message.data === "stop") { - this.origin = currentTime; - this.next = Infinity; + // this.origin = currentTime; + // this.next = Infinity; + this.started = false; } }; process(inputs, outputs, parameters) { - if (currentTime >= this.next) { - while (this.next < currentTime) - this.next += this.interval; - this.port.postMessage("bang"); - } + if (this.started) this.port.postMessage({ type: "bang", currentTime }); return true; } }