From 6da98a5f318784752b5badffcd0458be9a9073d9 Mon Sep 17 00:00:00 2001 From: Enelg52 Date: Tue, 23 Jan 2024 16:47:46 +0100 Subject: [PATCH 01/18] fix midi issue on firefox and quote error --- packages/midi/midi.mjs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/midi/midi.mjs b/packages/midi/midi.mjs index f40a5049..7d253114 100644 --- a/packages/midi/midi.mjs +++ b/packages/midi/midi.mjs @@ -167,10 +167,16 @@ let listeners = {}; const refs = {}; export async function midin(input) { + if (isPattern(input)) { + throw new Error( + `.midi does not accept Pattern input. Make sure to pass device name with single quotes. Example: .midi('${ + WebMidi.outputs?.[0]?.name || 'IAC Driver Bus 1' + }')`, + ); + } const initial = await enableWebMidi(); // only returns on first init const device = getDevice(input, WebMidi.inputs); - - if (initial) { + if (initial || WebMidi.enabled) { const otherInputs = WebMidi.inputs.filter((o) => o.name !== device.name); logger( `Midi enabled! Using "${device.name}". ${ From c06a3710c148fbb96f283d6a802b5c833d252574 Mon Sep 17 00:00:00 2001 From: "Jade (Rose) Rowland" Date: Mon, 19 Feb 2024 23:43:35 -0500 Subject: [PATCH 02/18] fixed --- packages/desktopbridge/midibridge.mjs | 4 ++-- packages/midi/midi.mjs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/desktopbridge/midibridge.mjs b/packages/desktopbridge/midibridge.mjs index 6959a5bb..ebbb185b 100644 --- a/packages/desktopbridge/midibridge.mjs +++ b/packages/desktopbridge/midibridge.mjs @@ -6,11 +6,11 @@ const OFF_MESSAGE = 0x80; const CC_MESSAGE = 0xb0; Pattern.prototype.midi = function (output) { - return this.onTrigger((time, hap, currentTime) => { + return this.onTrigger((time, hap, currentTime, cps) => { const { note, nrpnn, nrpv, ccn, ccv } = hap.value; const offset = (time - currentTime) * 1000; const velocity = Math.floor((hap.context?.velocity ?? 0.9) * 100); // TODO: refactor velocity - const duration = Math.floor(hap.duration.valueOf() * 1000 - 10); + const duration = Math.floor((hap.duration.valueOf() / cps) * 1000 - 10); const roundedOffset = Math.round(offset); const midichan = (hap.value.midichan ?? 1) - 1; const requestedport = output ?? 'IAC'; diff --git a/packages/midi/midi.mjs b/packages/midi/midi.mjs index f40a5049..96a29c27 100644 --- a/packages/midi/midi.mjs +++ b/packages/midi/midi.mjs @@ -129,7 +129,7 @@ Pattern.prototype.midi = function (output) { const velocity = hap.context?.velocity ?? 0.9; // TODO: refactor velocity // note off messages will often a few ms arrive late, try to prevent glitching by subtracting from the duration length - const duration = Math.floor(hap.duration.valueOf() * 1000 - 10); + const duration = Math.floor((hap.duration.valueOf() / cps) * 1000 - 10); if (note != null) { const midiNumber = typeof note === 'number' ? note : noteToMidi(note); const midiNote = new Note(midiNumber, { attack: velocity, duration }); From ebdca32c806e89d6d5648462b7c200ae2c9226c5 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Wed, 21 Feb 2024 09:48:26 +0100 Subject: [PATCH 03/18] automatically add await to samples call --- packages/transpiler/transpiler.mjs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/transpiler/transpiler.mjs b/packages/transpiler/transpiler.mjs index aedf8f3a..72f2e851 100644 --- a/packages/transpiler/transpiler.mjs +++ b/packages/transpiler/transpiler.mjs @@ -1,8 +1,7 @@ -import escodegen from 'escodegen'; -import { parse } from 'acorn'; -import { walk } from 'estree-walker'; -import { isNoteWithOctave } from '@strudel/core'; import { getLeafLocations } from '@strudel/mini'; +import { parse } from 'acorn'; +import escodegen from 'escodegen'; +import { walk } from 'estree-walker'; export function transpiler(input, options = {}) { const { wrapAsync = false, addReturn = true, emitMiniLocations = true, emitWidgets = true } = options; @@ -47,6 +46,9 @@ export function transpiler(input, options = {}) { }); return this.replace(widgetWithLocation(node)); } + if (isBareSamplesCall(node, parent)) { + return this.replace(withAwait(node)); + } }, leave(node, parent, prop, index) {}, }); @@ -119,3 +121,14 @@ function widgetWithLocation(node) { node.callee.name = 'sliderWithID'; return node; } + +function isBareSamplesCall(node, parent) { + return node.type === 'CallExpression' && node.callee.name === 'samples' && parent.type !== 'AwaitExpression'; +} + +function withAwait(node) { + return { + type: 'AwaitExpression', + argument: node, + }; +} From 38d389b83899046b190f594155fb7c374d4b596f Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Wed, 21 Feb 2024 09:50:21 +0100 Subject: [PATCH 04/18] add test --- packages/transpiler/test/transpiler.test.mjs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/transpiler/test/transpiler.test.mjs b/packages/transpiler/test/transpiler.test.mjs index 5f1b754f..988479b4 100644 --- a/packages/transpiler/test/transpiler.test.mjs +++ b/packages/transpiler/test/transpiler.test.mjs @@ -23,6 +23,9 @@ describe('transpiler', () => { it('supports top level await', () => { expect(transpiler("await samples('xxx');", simple).output).toEqual("await samples('xxx');"); }); + it('adds await to bare samples call', () => { + expect(transpiler("samples('xxx');", simple).output).toEqual("await samples('xxx');"); + }); /* it('parses dynamic imports', () => { expect( transpiler("const { default: foo } = await import('https://bar.com/foo.js');", { From bf63b716af91cf512f3de83758a3b8463f346a0d Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Wed, 21 Feb 2024 10:17:45 +0100 Subject: [PATCH 05/18] refactor: remove await before samples calls in docs etc.. + remove /master from dirt-samples calls (there is now a main branch) + remove /main endings from some places --- examples/buildless/headless-with-samples.html | 2 +- examples/buildless/minimal-repl.html | 2 +- examples/codemirror-repl/tunes.mjs | 12 +++++------ examples/headless-repl/index.html | 2 +- examples/minimal-repl/tune.mjs | 2 +- examples/superdough/index.html | 2 +- packages/core/controls.mjs | 2 +- packages/core/pattern.mjs | 6 +++--- packages/superdough/README.md | 4 ++-- packages/superdough/sampler.mjs | 2 +- packages/web/README.md | 2 +- .../blog/release-0.8.0-himbeermuffin.mdx | 2 +- website/src/examples.mjs | 4 ++-- website/src/pages/learn/getting-started.mdx | 2 +- website/src/pages/learn/samples.mdx | 20 +++++++++---------- website/src/pages/recipes/recipes.mdx | 20 +++++++++---------- website/src/pages/recipes/rhythms.mdx | 2 +- website/src/repl/prebake.mjs | 3 +-- website/src/repl/tunes.mjs | 10 +++++----- 19 files changed, 50 insertions(+), 51 deletions(-) diff --git a/examples/buildless/headless-with-samples.html b/examples/buildless/headless-with-samples.html index 40073d70..2ac7aa71 100644 --- a/examples/buildless/headless-with-samples.html +++ b/examples/buildless/headless-with-samples.html @@ -6,7 +6,7 @@ + + From 2854f0cf347e38413989e420bf803bffe3a67e7b Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 23 Feb 2024 14:28:43 +0100 Subject: [PATCH 12/18] try different main / module setting + bump --- packages/web/package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index 3ce40736..45946398 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,10 +1,11 @@ { "name": "@strudel/web", - "version": "1.0.2", + "version": "1.0.3", "description": "Easy to setup, opiniated bundle of Strudel for the browser.", - "main": "web.mjs", + "module": "web.mjs", "publishConfig": { - "main": "dist/index.mjs" + "main": "dist/index.js", + "module": "dist/index.mjs" }, "scripts": { "build": "vite build", From c23d7850c79a426a5cd6a78f06cbb465480de00a Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 23 Feb 2024 14:30:07 +0100 Subject: [PATCH 13/18] simplify web example --- examples/buildless/web.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/buildless/web.html b/examples/buildless/web.html index 785a6071..dc2a4c33 100644 --- a/examples/buildless/web.html +++ b/examples/buildless/web.html @@ -1,9 +1,8 @@ - + From 6d9327aebc2eec1be619f56112d6d5d0475769b1 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 23 Feb 2024 14:30:29 +0100 Subject: [PATCH 14/18] adapt repl package similar to web package --- packages/repl/package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/repl/package.json b/packages/repl/package.json index eae203f1..e6bce6d5 100644 --- a/packages/repl/package.json +++ b/packages/repl/package.json @@ -1,10 +1,11 @@ { "name": "@strudel/repl", - "version": "1.0.1", + "version": "1.0.2", "description": "Strudel REPL as a Web Component", - "main": "index.mjs", + "module": "index.mjs", "publishConfig": { - "main": "dist/index.mjs" + "main": "dist/index.js", + "module": "dist/index.mjs" }, "scripts": { "build": "vite build", From 058e554b0f78a464059e6ddf515c22071014b7d6 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Fri, 23 Feb 2024 14:33:07 +0100 Subject: [PATCH 15/18] update example --- examples/buildless/web-component-no-iframe.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/buildless/web-component-no-iframe.html b/examples/buildless/web-component-no-iframe.html index 6c86d282..8afa85cb 100644 --- a/examples/buildless/web-component-no-iframe.html +++ b/examples/buildless/web-component-no-iframe.html @@ -1,4 +1,4 @@ - +