diff --git a/package.json b/package.json index b09c494..55cb430 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "unique-names-generator": "^4.7.1", "vite-plugin-markdown": "^2.1.0", "zifferjs": "^0.0.44", + "zyklus": "^0.1.4", "zzfx": "^1.2.0" } } diff --git a/src/Clock.ts b/src/Clock.ts index 2d78671..0b61162 100644 --- a/src/Clock.ts +++ b/src/Clock.ts @@ -1,7 +1,6 @@ -// @ts-ignore -import { TransportNode } from "./TransportNode"; -import TransportProcessor from "./TransportProcessor?worker&url"; import { Editor } from "./main"; +// @ts-ignore +import * as zyklus from "zyklus"; export interface TimePosition { /** @@ -37,7 +36,6 @@ export class Clock { ctx: AudioContext; logicalTime: number; - transportNode: TransportNode | null; private _bpm: number; time_signature: number[]; time_position: TimePosition; @@ -58,23 +56,12 @@ export class Clock { this.tick = 0; this._bpm = 120; this._ppqn = 48; - this.transportNode = null; this.ctx = ctx; this.running = true; this.lastPauseTime = 0; this.lastPlayPressTime = 0; this.totalPauseTime = 0; - ctx.audioWorklet - .addModule(TransportProcessor) - .then((e) => { - this.transportNode = new TransportNode(ctx, {}, this.app); - this.transportNode.connect(ctx.destination); - return e; - }) - .catch((e) => { - console.log("Error loading TransportProcessor.js:", e); - }); - } + } convertTicksToTimeposition(ticks: number): TimePosition { /** @@ -157,12 +144,10 @@ export class Clock { } set nudge(nudge: number) { - this.transportNode?.setNudge(nudge); } set bpm(bpm: number) { if (bpm > 0 && this._bpm !== bpm) { - this.transportNode?.setBPM(bpm); this._bpm = bpm; this.logicalTime = this.realTime; } @@ -183,7 +168,6 @@ export class Clock { set ppqn(ppqn: number) { if (ppqn > 0 && this._ppqn !== ppqn) { this._ppqn = ppqn; - this.transportNode?.setPPQN(ppqn); this.logicalTime = this.realTime; } } @@ -226,7 +210,6 @@ export class Clock { this.app.api.MidiConnection.sendStartMessage(); this.lastPlayPressTime = this.app.audioContext.currentTime; this.totalPauseTime += this.lastPlayPressTime - this.lastPauseTime; - this.transportNode?.start(); } public pause(): void { @@ -236,7 +219,6 @@ export class Clock { * @remark also sends a MIDI message if a port is declared */ this.running = false; - this.transportNode?.pause(); this.app.api.MidiConnection.sendStopMessage(); this.lastPauseTime = this.app.audioContext.currentTime; this.logicalTime = this.realTime; @@ -254,6 +236,5 @@ export class Clock { this.logicalTime = this.realTime; this.time_position = { bar: 0, beat: 0, pulse: 0 }; this.app.api.MidiConnection.sendStopMessage(); - this.transportNode?.stop(); } } diff --git a/src/TransportProcessor.js b/src/TransportProcessor.js deleted file mode 100644 index 20e96ce..0000000 --- a/src/TransportProcessor.js +++ /dev/null @@ -1,47 +0,0 @@ -class TransportProcessor extends AudioWorkletProcessor { - constructor(options) { - super(options); - this.port.addEventListener("message", this.handleMessage); - this.port.start(); - this.nudge = 0; - this.started = false; - this.bpm = 120; - this.ppqn = 48; - this.currentPulsePosition = 0; - } - - handleMessage = (message) => { - if (message.data && message.data.type === "ping") { - this.port.postMessage(message.data); - } else if (message.data.type === "start") { - this.started = true; - } else if (message.data.type === "pause") { - this.started = false; - } else if (message.data.type === "stop") { - this.started = false; - } else if (message.data.type === "bpm") { - this.bpm = message.data.value; - this.currentPulsePosition = currentTime; - } else if (message.data.type === "ppqn") { - this.ppqn = message.data.value; - this.currentPulsePosition = currentTime; - } else if (message.data.type === "nudge") { - this.nudge = message.data.value; - } - }; - - process(inputs, outputs, parameters) { - if (this.started) { - const adjustedCurrentTime = currentTime + this.nudge / 100; - const beatNumber = adjustedCurrentTime / (60 / this.bpm); - const currentPulsePosition = Math.ceil(beatNumber * this.ppqn); - if (currentPulsePosition > this.currentPulsePosition) { - this.currentPulsePosition = currentPulsePosition; - this.port.postMessage({ type: "bang", bpm: this.bpm }); - } - } - return true; - } -} - -registerProcessor("transport", TransportProcessor); diff --git a/yarn.lock b/yarn.lock index 83e8be2..add9134 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3887,6 +3887,11 @@ zifferjs@^0.0.44: resolved "https://registry.yarnpkg.com/zifferjs/-/zifferjs-0.0.44.tgz#c6b425166488ec05e349867e3de2460b74204449" integrity sha512-Q+0affxeUZwl+oJpsa1nb4hqHV6V4VX+pkejCQq/e9+/0H6ooTpcDQ9IDopvrWBnhA8E11k0tbwUee5TJtE8UQ== +zyklus@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/zyklus/-/zyklus-0.1.4.tgz#229b2966fd1126ef72c6004697269118762bdcd5" + integrity sha512-hbv2cyy4nOI7P8nL8b3ki1jswoLzkUzewPgCLDdDfABryDkV5iO8DAbU25OgO5ShRZHLjXJIylwv5PJQPl3Mpw== + zzfx@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/zzfx/-/zzfx-1.2.0.tgz#021e5df8e1605f507e2dde15608eba22798b424b"