integrate repl into astro website
+ update build and setup tasks + workflow + move repl test folder to root + move docs and repl to website/src
This commit is contained in:
parent
006ca12b6d
commit
818cd9044b
141 changed files with 25956 additions and 41 deletions
238
test/runtime.mjs
Normal file
238
test/runtime.mjs
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
// this file contains a runtime scope for testing all the tunes
|
||||
// it mocks all the functions that won't work in node (who are not important for testing values / structure)
|
||||
// it might require mocking more stuff when tunes added that use other functions
|
||||
|
||||
// import * as tunes from './tunes.mjs';
|
||||
// import { evaluate } from '@strudel.cycles/eval';
|
||||
import { evaluate } from '@strudel.cycles/transpiler';
|
||||
import { evalScope } from '@strudel.cycles/core';
|
||||
import * as strudel from '@strudel.cycles/core';
|
||||
import * as webaudio from '@strudel.cycles/webaudio';
|
||||
import controls from '@strudel.cycles/core/controls.mjs';
|
||||
// import gist from '@strudel.cycles/core/gist.js';
|
||||
import { mini } from '@strudel.cycles/mini/mini.mjs';
|
||||
// import { Tone } from '@strudel.cycles/tone';
|
||||
// import * as toneHelpers from '@strudel.cycles/tone/tone.mjs';
|
||||
// import * as voicingHelpers from '@strudel.cycles/tonal/voicings.mjs';
|
||||
// import * as uiHelpers from '@strudel.cycles/tone/ui.mjs';
|
||||
// import * as drawHelpers from '@strudel.cycles/tone/draw.mjs';
|
||||
// import euclid from '@strudel.cycles/core/euclid.mjs';
|
||||
// import '@strudel.cycles/tone/tone.mjs';
|
||||
// import '@strudel.cycles/midi/midi.mjs';
|
||||
import * as tonalHelpers from '@strudel.cycles/tonal';
|
||||
import '@strudel.cycles/xen/xen.mjs';
|
||||
// import '@strudel.cycles/xen/tune.mjs';
|
||||
// import '@strudel.cycles/core/euclid.mjs';
|
||||
// import '@strudel.cycles/core/speak.mjs'; // window is not defined
|
||||
// import '@strudel.cycles/tone/pianoroll.mjs';
|
||||
// import '@strudel.cycles/tone/draw.mjs';
|
||||
// import '@strudel.cycles/osc/osc.mjs';
|
||||
// import '@strudel.cycles/webaudio/webaudio.mjs';
|
||||
// import '@strudel.cycles/serial/serial.mjs';
|
||||
// import controls from '@strudel.cycles/core/controls.mjs';
|
||||
import '../website/src/repl/prebake';
|
||||
|
||||
class MockedNode {
|
||||
chain() {
|
||||
return this;
|
||||
}
|
||||
connect() {
|
||||
return this;
|
||||
}
|
||||
toDestination() {
|
||||
return this;
|
||||
}
|
||||
set() {
|
||||
return this;
|
||||
}
|
||||
start() {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
const mockNode = () => new MockedNode();
|
||||
|
||||
const id = (x) => x;
|
||||
|
||||
const toneHelpersMocked = {
|
||||
FeedbackDelay: MockedNode,
|
||||
MembraneSynth: MockedNode,
|
||||
NoiseSynth: MockedNode,
|
||||
MetalSynth: MockedNode,
|
||||
Synth: MockedNode,
|
||||
PolySynth: MockedNode,
|
||||
Chorus: MockedNode,
|
||||
Freeverb: MockedNode,
|
||||
Gain: MockedNode,
|
||||
Reverb: MockedNode,
|
||||
vol: mockNode,
|
||||
out: id,
|
||||
osc: id,
|
||||
adsr: id,
|
||||
getDestination: id,
|
||||
players: mockNode,
|
||||
sampler: mockNode,
|
||||
synth: mockNode,
|
||||
piano: mockNode,
|
||||
polysynth: mockNode,
|
||||
fmsynth: mockNode,
|
||||
membrane: mockNode,
|
||||
noise: mockNode,
|
||||
metal: mockNode,
|
||||
lowpass: mockNode,
|
||||
highpass: mockNode,
|
||||
};
|
||||
|
||||
strudel.Pattern.prototype.osc = function () {
|
||||
return this;
|
||||
};
|
||||
strudel.Pattern.prototype.csound = function () {
|
||||
return this;
|
||||
};
|
||||
strudel.Pattern.prototype.tone = function () {
|
||||
return this;
|
||||
};
|
||||
strudel.Pattern.prototype.webdirt = function () {
|
||||
return this;
|
||||
};
|
||||
|
||||
// draw mock
|
||||
strudel.Pattern.prototype.pianoroll = function () {
|
||||
return this;
|
||||
};
|
||||
|
||||
// speak mock
|
||||
strudel.Pattern.prototype.speak = function () {
|
||||
return this;
|
||||
};
|
||||
|
||||
// webaudio mock
|
||||
strudel.Pattern.prototype.wave = function () {
|
||||
return this;
|
||||
};
|
||||
strudel.Pattern.prototype.filter = function () {
|
||||
return this;
|
||||
};
|
||||
strudel.Pattern.prototype.adsr = function () {
|
||||
return this;
|
||||
};
|
||||
strudel.Pattern.prototype.out = function () {
|
||||
return this;
|
||||
};
|
||||
strudel.Pattern.prototype.soundfont = function () {
|
||||
return this;
|
||||
};
|
||||
// tune mock
|
||||
strudel.Pattern.prototype.tune = function () {
|
||||
return this;
|
||||
};
|
||||
|
||||
strudel.Pattern.prototype.midi = function () {
|
||||
return this;
|
||||
};
|
||||
|
||||
const uiHelpersMocked = {
|
||||
backgroundImage: id,
|
||||
};
|
||||
|
||||
const canvasCtx = {
|
||||
clearRect: () => {},
|
||||
fillText: () => {},
|
||||
fillRect: () => {},
|
||||
canvas: {
|
||||
width: 100,
|
||||
height: 100,
|
||||
},
|
||||
};
|
||||
const audioCtx = {
|
||||
currentTime: 1,
|
||||
};
|
||||
const getDrawContext = () => canvasCtx;
|
||||
const getAudioContext = () => audioCtx;
|
||||
const loadSoundfont = () => {};
|
||||
const loadCsound = () => {};
|
||||
const loadCSound = () => {};
|
||||
const loadcsound = () => {};
|
||||
|
||||
// TODO: refactor to evalScope
|
||||
evalScope(
|
||||
// Tone,
|
||||
strudel,
|
||||
toneHelpersMocked,
|
||||
uiHelpersMocked,
|
||||
controls,
|
||||
webaudio,
|
||||
tonalHelpers,
|
||||
/* controls,
|
||||
toneHelpers,
|
||||
voicingHelpers,
|
||||
drawHelpers,
|
||||
uiHelpers,
|
||||
*/
|
||||
{
|
||||
// gist,
|
||||
// euclid,
|
||||
csound: id,
|
||||
loadOrc: id,
|
||||
mini,
|
||||
getDrawContext,
|
||||
getAudioContext,
|
||||
loadSoundfont,
|
||||
loadCSound,
|
||||
loadCsound,
|
||||
loadcsound,
|
||||
Clock: {}, // whatever
|
||||
// Tone,
|
||||
},
|
||||
);
|
||||
|
||||
export const queryCode = async (code, cycles = 1) => {
|
||||
const { pattern } = await evaluate(code);
|
||||
const haps = pattern.queryArc(0, cycles);
|
||||
return haps.map((h) => h.show(true));
|
||||
};
|
||||
|
||||
export const testCycles = {
|
||||
timeCatMini: 16,
|
||||
timeCat: 8,
|
||||
shapeShifted: 16,
|
||||
tetrisMini: 16,
|
||||
whirlyStrudel: 16,
|
||||
swimming: 51,
|
||||
giantSteps: 20,
|
||||
giantStepsReggae: 25,
|
||||
transposedChordsHacked: 8,
|
||||
scaleTranspose: 16,
|
||||
struct: 4,
|
||||
magicSofa: 8,
|
||||
confusedPhone: 8,
|
||||
zeldasRescue: 48,
|
||||
technoDrums: 4,
|
||||
caverave: 60,
|
||||
callcenterhero: 22,
|
||||
primalEnemy: 4,
|
||||
synthDrums: 4,
|
||||
sampleDrums: 4,
|
||||
xylophoneCalling: 60,
|
||||
sowhatelse: 60,
|
||||
barryHarris: 64,
|
||||
wavyKalimba: 64,
|
||||
jemblung: 12,
|
||||
risingEnemy: 12,
|
||||
festivalOfFingers: 16,
|
||||
festivalOfFingers2: 22,
|
||||
undergroundPlumber: 20,
|
||||
bridgeIsOver: 16,
|
||||
goodTimes: 16,
|
||||
echoPiano: 8,
|
||||
sml1: 48,
|
||||
speakerman: 48,
|
||||
randomBells: 24,
|
||||
waa: 16,
|
||||
waar: 16,
|
||||
hyperpop: 10,
|
||||
festivalOfFingers3: 16,
|
||||
};
|
||||
|
||||
// fixed: https://strudel.tidalcycles.org/?DBp75NUfSxIn (missing .note())
|
||||
// bug: https://strudel.tidalcycles.org/?xHaKTd1kTpCn + https://strudel.tidalcycles.org/?o5LLePbx8kiQ
|
||||
Loading…
Add table
Add a link
Reference in a new issue