diff --git a/README.md b/README.md index dd857537..7743bcab 100644 --- a/README.md +++ b/README.md @@ -15,25 +15,15 @@ An experiment in making a [Tidal](https://github.com/tidalcycles/tidal/) using w After cloning the project, you can run the REPL locally: ```bash -pnpm run setup -pnpm run repl +pnpm i +pnpm dev ``` ## Using Strudel In Your Project -There are multiple npm packages you can use to use strudel, or only parts of it, in your project: +This project is organized into many [packages](./packages), which are also available on [npm](https://www.npmjs.com/search?q=%40strudel). -- [`core`](./packages/core/): tidal pattern engine -- [`mini`](./packages/mini): mini notation parser + core binding -- [`transpiler`](./packages/transpiler): user code transpiler -- [`webaudio`](./packages/webaudio): webaudio output -- [`osc`](./packages/osc): bindings to communicate via OSC -- [`midi`](./packages/midi): webmidi bindings -- [`serial`](./packages/serial): webserial bindings -- [`tonal`](./packages/tonal): tonal functions -- ... [and there are more](./packages/) - -Click on the package names to find out more about each one. +Read more about how to use these in your own project [here](https://strudel.cc/technical-manual/project-start). ## Contributing diff --git a/examples/buildless/headless-simple.html b/examples/buildless/headless-simple.html index 013cc87b..15a56161 100644 --- a/examples/buildless/headless-simple.html +++ b/examples/buildless/headless-simple.html @@ -1,10 +1,9 @@ + - diff --git a/examples/buildless/headless-with-samples.html b/examples/buildless/headless-with-samples.html index 2ac7aa71..18b5e379 100644 --- a/examples/buildless/headless-with-samples.html +++ b/examples/buildless/headless-with-samples.html @@ -1,10 +1,10 @@ + - +setcps(1) +n("<0 1 2 3 4>*8").scale('G4 minor') +.s("gm_lead_6_voice") +.clip(sine.range(.2,.8).slow(8)) +.jux(rev) +.room(2) +.sometimes(add(note("12"))) +.lpf(perlin.range(200,20000).slow(4)) +--> ``` -Note that the Code is placed inside HTML comments to prevent the browser from treating it as HTML. +This will load the strudel website in an iframe, using the code provided within the HTML comments ``. +The HTML comments are needed to make sure the browser won't interpret it as HTML. + +Alternatively you can create a REPL from JavaScript like this: + +```html + +
+ +``` + +When you're using JSX, you could also use the `code` attribute in your markup: + +```html + +*8").scale('G4 minor') +.s("gm_lead_6_voice") +.clip(sine.range(.2,.8).slow(8)) +.jux(rev) +.room(2) +.sometimes(add(note("12"))) +.lpf(perlin.range(200,20000).slow(4)) +`}> +``` diff --git a/packages/embed/embed.js b/packages/embed/embed.js index ce2e3b2a..6cf8a3b8 100644 --- a/packages/embed/embed.js +++ b/packages/embed/embed.js @@ -4,7 +4,7 @@ class Strudel extends HTMLElement { } connectedCallback() { setTimeout(() => { - const code = (this.innerHTML + '').replace('', '').trim(); + const code = this.getAttribute('code') || (this.innerHTML + '').replace('', '').trim(); const iframe = document.createElement('iframe'); const src = `https://strudel.cc/#${encodeURIComponent(btoa(code))}`; // const src = `http://localhost:3000/#${encodeURIComponent(btoa(code))}`; diff --git a/packages/repl/README.md b/packages/repl/README.md index b4cbf37c..b82f3434 100644 --- a/packages/repl/README.md +++ b/packages/repl/README.md @@ -2,4 +2,95 @@ The Strudel REPL as a web component. -[Usage example](https://github.com/tidalcycles/strudel/blob/main/examples/buildless/web-component-no-iframe.html) +## Add Script Tag + +First place this script tag once in your HTML: + +```html + +``` + +You can also pin the version like this: + +```html + +``` + +This has the advantage that your code will always work, regardless of potential breaking changes in the strudel codebase. +See [releases](https://github.com/tidalcycles/strudel/releases) for the latest versions. + +## Use Web Component + +When you've added the script tag, you can use the `strudel-editor` web component: + +```html + + + +``` + +This will load the Strudel REPL using the code provided within the HTML comments ``. +The HTML comments are needed to make sure the browser won't interpret it as HTML. + +Alternatively you can create a REPL from JavaScript like this: + +```html + +
+ +``` + +## Interacting with the REPL + +If you get a hold of the `strudel-editor` element, you can interact with the strudel REPL from Javascript: + +```html + + + + + +``` + +or + +```html + +
+ +``` + +The `.editor` property on the `strudel-editor` web component gives you the instance of [StrudelMirror](https://github.com/tidalcycles/strudel/blob/a46bd9b36ea7d31c9f1d3fca484297c7da86893f/packages/codemirror/codemirror.mjs#L124) that runs the REPL. + +For example, you could use `setCode` to change the code from the outside, `start` / `stop` to toggle playback or `evaluate` to evaluate the code. diff --git a/packages/superdough/helpers.mjs b/packages/superdough/helpers.mjs index 39e9977a..f5f3ad68 100644 --- a/packages/superdough/helpers.mjs +++ b/packages/superdough/helpers.mjs @@ -186,3 +186,76 @@ export function getVibratoOscillator(param, value, t) { return vibratoOscillator; } } +// ConstantSource inherits AudioScheduledSourceNode, which has scheduling abilities +// a bit of a hack, but it works very well :) +export function webAudioTimeout(audioContext, onComplete, startTime, stopTime) { + const constantNode = audioContext.createConstantSource(); + constantNode.start(startTime); + constantNode.stop(stopTime); + constantNode.onended = () => { + onComplete(); + }; +} +const mod = (freq, range = 1, type = 'sine') => { + const ctx = getAudioContext(); + const osc = ctx.createOscillator(); + osc.type = type; + osc.frequency.value = freq; + osc.start(); + const g = new GainNode(ctx, { gain: range }); + osc.connect(g); // -range, range + return { node: g, stop: (t) => osc.stop(t) }; +}; +const fm = (frequencyparam, harmonicityRatio, modulationIndex, wave = 'sine') => { + const carrfreq = frequencyparam.value; + const modfreq = carrfreq * harmonicityRatio; + const modgain = modfreq * modulationIndex; + return mod(modfreq, modgain, wave); +}; +export function applyFM(param, value, begin) { + const { + fmh: fmHarmonicity = 1, + fmi: fmModulationIndex, + fmenv: fmEnvelopeType = 'exp', + fmattack: fmAttack, + fmdecay: fmDecay, + fmsustain: fmSustain, + fmrelease: fmRelease, + fmvelocity: fmVelocity, + fmwave: fmWaveform = 'sine', + duration, + } = value; + let modulator; + let stop = () => {}; + + if (fmModulationIndex) { + const ac = getAudioContext(); + const envGain = ac.createGain(); + const fmmod = fm(param, fmHarmonicity, fmModulationIndex, fmWaveform); + + modulator = fmmod.node; + stop = fmmod.stop; + if (![fmAttack, fmDecay, fmSustain, fmRelease, fmVelocity].find((v) => v !== undefined)) { + // no envelope by default + modulator.connect(param); + } else { + const [attack, decay, sustain, release] = getADSRValues([fmAttack, fmDecay, fmSustain, fmRelease]); + const holdEnd = begin + duration; + getParamADSR( + envGain.gain, + attack, + decay, + sustain, + release, + 0, + 1, + begin, + holdEnd, + fmEnvelopeType === 'exp' ? 'exponential' : 'linear', + ); + modulator.connect(envGain); + envGain.connect(param); + } + } + return { stop }; +} diff --git a/packages/superdough/superdough.mjs b/packages/superdough/superdough.mjs index cf9bd181..2fbc5294 100644 --- a/packages/superdough/superdough.mjs +++ b/packages/superdough/superdough.mjs @@ -50,8 +50,8 @@ function loadWorklets() { return workletsLoading; } -function getWorklet(ac, processor, params) { - const node = new AudioWorkletNode(ac, processor); +export function getWorklet(ac, processor, params, config) { + const node = new AudioWorkletNode(ac, processor, config); Object.entries(params).forEach(([key, value]) => { node.parameters.get(key).value = value; }); diff --git a/packages/superdough/synth.mjs b/packages/superdough/synth.mjs index 6d646862..55ecc83f 100644 --- a/packages/superdough/synth.mjs +++ b/packages/superdough/synth.mjs @@ -1,31 +1,138 @@ -import { midiToFreq, noteToMidi } from './util.mjs'; -import { registerSound, getAudioContext } from './superdough.mjs'; -import { gainNode, getADSRValues, getParamADSR, getPitchEnvelope, getVibratoOscillator } from './helpers.mjs'; +import { clamp, midiToFreq, noteToMidi } from './util.mjs'; +import { registerSound, getAudioContext, getWorklet } from './superdough.mjs'; +import { + applyFM, + gainNode, + getADSRValues, + getParamADSR, + getPitchEnvelope, + getVibratoOscillator, + webAudioTimeout, +} from './helpers.mjs'; import { getNoiseMix, getNoiseOscillator } from './noise.mjs'; -const mod = (freq, range = 1, type = 'sine') => { - const ctx = getAudioContext(); - const osc = ctx.createOscillator(); - osc.type = type; - osc.frequency.value = freq; - osc.start(); - const g = new GainNode(ctx, { gain: range }); - osc.connect(g); // -range, range - return { node: g, stop: (t) => osc.stop(t) }; +const getFrequencyFromValue = (value) => { + let { note, freq } = value; + note = note || 36; + if (typeof note === 'string') { + note = noteToMidi(note); // e.g. c3 => 48 + } + // get frequency + if (!freq && typeof note === 'number') { + freq = midiToFreq(note); // + 48); + } + + return Number(freq); }; -const fm = (osc, harmonicityRatio, modulationIndex, wave = 'sine') => { - const carrfreq = osc.frequency.value; - const modfreq = carrfreq * harmonicityRatio; - const modgain = modfreq * modulationIndex; - return mod(modfreq, modgain, wave); -}; - -const waveforms = ['sine', 'square', 'triangle', 'sawtooth']; +const waveforms = ['triangle', 'square', 'sawtooth', 'sine']; const noises = ['pink', 'white', 'brown', 'crackle']; export function registerSynthSounds() { - [...waveforms, ...noises].forEach((s) => { + [...waveforms].forEach((s) => { + registerSound( + s, + (t, value, onended) => { + const [attack, decay, sustain, release] = getADSRValues( + [value.attack, value.decay, value.sustain, value.release], + 'linear', + [0.001, 0.05, 0.6, 0.01], + ); + + let sound = getOscillator(s, t, value); + let { node: o, stop, triggerRelease } = sound; + + // turn down + const g = gainNode(0.3); + + const { duration } = value; + + o.onended = () => { + o.disconnect(); + g.disconnect(); + onended(); + }; + + const envGain = gainNode(1); + let node = o.connect(g).connect(envGain); + const holdEnd = t + duration; + getParamADSR(node.gain, attack, decay, sustain, release, 0, 1, t, holdEnd, 'linear'); + const envEnd = holdEnd + release + 0.01; + triggerRelease?.(envEnd); + stop(envEnd); + return { + node, + stop: (releaseTime) => {}, + }; + }, + { type: 'synth', prebake: true }, + ); + }); + registerSound( + 'supersaw', + (begin, value, onended) => { + const ac = getAudioContext(); + let { duration, n, unison = 5, spread = 0.6, detune } = value; + detune = detune ?? n ?? 0.18; + const frequency = getFrequencyFromValue(value); + + const [attack, decay, sustain, release] = getADSRValues( + [value.attack, value.decay, value.sustain, value.release], + 'linear', + [0.001, 0.05, 0.6, 0.01], + ); + + const holdend = begin + duration; + const end = holdend + release + 0.01; + const voices = clamp(unison, 1, 100); + let panspread = voices > 1 ? clamp(spread, 0, 1) : 0; + let o = getWorklet( + ac, + 'supersaw-oscillator', + { + frequency, + begin, + end, + freqspread: detune, + voices, + panspread, + }, + { + outputChannelCount: [2], + }, + ); + + const gainAdjustment = 1 / Math.sqrt(voices); + getPitchEnvelope(o.parameters.get('detune'), value, begin, holdend); + const vibratoOscillator = getVibratoOscillator(o.parameters.get('detune'), value, begin); + const fm = applyFM(o.parameters.get('frequency'), value, begin); + let envGain = gainNode(1); + envGain = o.connect(envGain); + + webAudioTimeout( + ac, + () => { + o.disconnect(); + envGain.disconnect(); + onended(); + fm?.stop(); + vibratoOscillator?.stop(); + }, + begin, + end, + ); + + getParamADSR(envGain.gain, attack, decay, sustain, release, 0, 0.3 * gainAdjustment, begin, holdend, 'linear'); + + return { + node: envGain, + stop: (time) => {}, + }; + }, + { prebake: true, type: 'synth' }, + ); + + [...noises].forEach((s) => { registerSound( s, (t, value, onended) => { @@ -36,12 +143,9 @@ export function registerSynthSounds() { ); let sound; - if (waveforms.includes(s)) { - sound = getOscillator(s, t, value); - } else { - let { density } = value; - sound = getNoiseOscillator(s, t, density); - } + + let { density } = value; + sound = getNoiseOscillator(s, t, density); let { node: o, stop, triggerRelease } = sound; @@ -106,24 +210,7 @@ export function waveformN(partials, type) { // expects one of waveforms as s export function getOscillator(s, t, value) { - let { - n: partials, - note, - freq, - noise = 0, - // fm - fmh: fmHarmonicity = 1, - fmi: fmModulationIndex, - fmenv: fmEnvelopeType = 'exp', - fmattack: fmAttack, - fmdecay: fmDecay, - fmsustain: fmSustain, - fmrelease: fmRelease, - fmvelocity: fmVelocity, - fmwave: fmWaveform = 'sine', - duration, - } = value; - let ac = getAudioContext(); + let { n: partials, duration, noise = 0 } = value; let o; // If no partials are given, use stock waveforms if (!partials || s === 'sine') { @@ -134,55 +221,15 @@ export function getOscillator(s, t, value) { else { o = waveformN(partials, s); } - - // get frequency from note... - note = note || 36; - if (typeof note === 'string') { - note = noteToMidi(note); // e.g. c3 => 48 - } - // get frequency - if (!freq && typeof note === 'number') { - freq = midiToFreq(note); // + 48); - } - // set frequency - o.frequency.value = Number(freq); + o.frequency.value = getFrequencyFromValue(value); o.start(t); - // FM - let stopFm; - let envGain = ac.createGain(); - if (fmModulationIndex) { - const { node: modulator, stop } = fm(o, fmHarmonicity, fmModulationIndex, fmWaveform); - if (![fmAttack, fmDecay, fmSustain, fmRelease, fmVelocity].find((v) => v !== undefined)) { - // no envelope by default - modulator.connect(o.frequency); - } else { - const [attack, decay, sustain, release] = getADSRValues([fmAttack, fmDecay, fmSustain, fmRelease]); - const holdEnd = t + duration; - getParamADSR( - envGain.gain, - attack, - decay, - sustain, - release, - 0, - 1, - t, - holdEnd, - fmEnvelopeType === 'exp' ? 'exponential' : 'linear', - ); - modulator.connect(envGain); - envGain.connect(o.frequency); - } - stopFm = stop; - } - - // Additional oscillator for vibrato effect let vibratoOscillator = getVibratoOscillator(o.detune, value, t); // pitch envelope getPitchEnvelope(o.detune, value, t, t + duration); + const fmModulator = applyFM(o.frequency, value, t); let noiseMix; if (noise) { @@ -192,9 +239,9 @@ export function getOscillator(s, t, value) { return { node: noiseMix?.node || o, stop: (time) => { + fmModulator.stop(time); vibratoOscillator?.stop(time); noiseMix?.stop(time); - stopFm?.(time); o.stop(time); }, triggerRelease: (time) => { diff --git a/packages/superdough/worklets.mjs b/packages/superdough/worklets.mjs index 4f2965ee..bab28987 100644 --- a/packages/superdough/worklets.mjs +++ b/packages/superdough/worklets.mjs @@ -129,3 +129,148 @@ class DistortProcessor extends AudioWorkletProcessor { } } registerProcessor('distort-processor', DistortProcessor); + +// adjust waveshape to remove frequencies above nyquist to prevent aliasing +// referenced from https://www.kvraudio.com/forum/viewtopic.php?t=375517 +const polyBlep = (phase, dt) => { + // 0 <= phase < 1 + if (phase < dt) { + phase /= dt; + // 2 * (phase - phase^2/2 - 0.5) + return phase + phase - phase * phase - 1; + } + + // -1 < phase < 0 + else if (phase > 1 - dt) { + phase = (phase - 1) / dt; + // 2 * (phase^2/2 + phase + 0.5) + return phase * phase + phase + phase + 1; + } + + // 0 otherwise + else { + return 0; + } +}; + +const saw = (phase, dt) => { + const v = 2 * phase - 1; + return v - polyBlep(phase, dt); +}; + +function lerp(a, b, n) { + return n * (b - a) + a; +} + +function getUnisonDetune(unison, detune, voiceIndex) { + if (unison < 2) { + return 0; + } + return lerp(-detune * 0.5, detune * 0.5, voiceIndex / (unison - 1)); +} +class SuperSawOscillatorProcessor extends AudioWorkletProcessor { + constructor() { + super(); + this.phase = []; + } + static get parameterDescriptors() { + return [ + { + name: 'begin', + defaultValue: 0, + max: Number.POSITIVE_INFINITY, + min: 0, + }, + + { + name: 'end', + defaultValue: 0, + max: Number.POSITIVE_INFINITY, + min: 0, + }, + + { + name: 'frequency', + defaultValue: 440, + min: Number.EPSILON, + }, + + { + name: 'panspread', + defaultValue: 0.4, + min: 0, + max: 1, + }, + { + name: 'freqspread', + defaultValue: 0.2, + min: 0, + }, + { + name: 'detune', + defaultValue: 0, + min: 0, + }, + + { + name: 'voices', + defaultValue: 5, + min: 1, + }, + ]; + } + process(input, outputs, params) { + // eslint-disable-next-line no-undef + if (currentTime <= params.begin[0]) { + return true; + } + // eslint-disable-next-line no-undef + if (currentTime >= params.end[0]) { + // this.port.postMessage({ type: 'onended' }); + return false; + } + let frequency = params.frequency[0]; + //apply detune in cents + frequency = frequency * Math.pow(2, params.detune[0] / 1200); + + const output = outputs[0]; + const voices = params.voices[0]; + const freqspread = params.freqspread[0]; + const panspread = params.panspread[0] * 0.5 + 0.5; + const gain1 = Math.sqrt(1 - panspread); + const gain2 = Math.sqrt(panspread); + + for (let n = 0; n < voices; n++) { + const isOdd = (n & 1) == 1; + + //applies unison "spread" detune in semitones + const freq = frequency * Math.pow(2, getUnisonDetune(voices, freqspread, n) / 12); + let gainL = gain1; + let gainR = gain2; + // invert right and left gain + if (isOdd) { + gainL = gain2; + gainR = gain1; + } + // eslint-disable-next-line no-undef + const dt = freq / sampleRate; + + for (let i = 0; i < output[0].length; i++) { + this.phase[n] = this.phase[n] ?? Math.random(); + const v = saw(this.phase[n], dt); + + output[0][i] = output[0][i] + v * gainL; + output[1][i] = output[1][i] + v * gainR; + + this.phase[n] += dt; + + if (this.phase[n] > 1.0) { + this.phase[n] = this.phase[n] - 1; + } + } + } + return true; + } +} + +registerProcessor('supersaw-oscillator', SuperSawOscillatorProcessor); diff --git a/packages/tonal/tonal.mjs b/packages/tonal/tonal.mjs index 78ec1101..16e8fe1c 100644 --- a/packages/tonal/tonal.mjs +++ b/packages/tonal/tonal.mjs @@ -186,18 +186,35 @@ export const scale = register('scale', function (scale, pat) { // legacy.. return pure(step); } - const asNumber = Number(step); + let asNumber = Number(step); + let semitones = 0; if (isNaN(asNumber)) { - logger(`[tonal] invalid scale step "${step}", expected number`, 'error'); - return silence; + step = String(step); + if (!/^[-+]?\d+(#*|b*){1}$/.test(step)) { + logger( + `[tonal] invalid scale step "${step}", expected number or integer with optional # b suffixes`, + 'error', + ); + return silence; + } + const isharp = step.indexOf('#'); + if (isharp >= 0) { + asNumber = Number(step.substring(0, isharp)); + semitones = step.length - isharp; + } else { + const iflat = step.indexOf('b'); + asNumber = Number(step.substring(0, iflat)); + semitones = iflat - step.length; + } } try { let note; - if (value.anchor) { + if (isObject && value.anchor) { note = stepInNamedScale(asNumber, scale, value.anchor); } else { note = scaleStep(asNumber, scale); } + if (semitones != 0) note = Note.transpose(note, Interval.fromSemitones(semitones)); value = pure(isObject ? { ...value, note } : note); } catch (err) { logger(`[tonal] ${err.message}`, 'error'); diff --git a/packages/web/README.md b/packages/web/README.md index b3d2f6fe..8b567729 100644 --- a/packages/web/README.md +++ b/packages/web/README.md @@ -7,20 +7,17 @@ This package provides an easy to use bundle of multiple strudel packages for the Save this code as a `.html` file and double click it: ```html - + + - ``` -With the help of [skypack](https://www.skypack.dev/), you don't need a bundler nor a server. - As soon as you call `initStrudel()`, all strudel functions are made available. In this case, we are using the `note` function to create a pattern. To actually play the pattern, you have to append `.play()` to the end. @@ -79,4 +76,4 @@ There will probably be an escapte hatch for that in the future. ## More Examples -Check out the examples folder for more examples, both using plain html and vite! \ No newline at end of file +Check out the examples folder for more examples, both using plain html and vite! diff --git a/packages/web/package.json b/packages/web/package.json index 45946398..d70e84c8 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -37,10 +37,10 @@ "@strudel/mini": "workspace:*", "@strudel/tonal": "workspace:*", "@strudel/transpiler": "workspace:*", - "@strudel/webaudio": "workspace:*", - "@rollup/plugin-replace": "^5.0.5" + "@strudel/webaudio": "workspace:*" }, "devDependencies": { - "vite": "^5.0.10" + "vite": "^5.0.10", + "@rollup/plugin-replace": "^5.0.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 033c6a7e..96bd1dc9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,9 +33,6 @@ importers: '@vitest/ui': specifier: ^1.1.0 version: 1.1.0(vitest@1.1.0) - canvas: - specifier: ^2.11.2 - version: 2.11.2 dependency-tree: specifier: ^10.0.9 version: 10.0.9 @@ -452,9 +449,6 @@ importers: packages/web: dependencies: - '@rollup/plugin-replace': - specifier: ^5.0.5 - version: 5.0.5 '@strudel/core': specifier: workspace:* version: link:../core @@ -471,6 +465,9 @@ importers: specifier: workspace:* version: link:../webaudio devDependencies: + '@rollup/plugin-replace': + specifier: ^5.0.5 + version: 5.0.5 vite: specifier: ^5.0.10 version: 5.0.10 @@ -520,7 +517,7 @@ importers: version: 0.4.4(astro@4.0.8) '@astrojs/mdx': specifier: ^2.0.3 - version: 2.0.3(astro@4.0.8) + version: 2.2.1(astro@4.0.8) '@astrojs/react': specifier: ^3.0.9 version: 3.0.9(@types/react-dom@18.2.18)(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(vite@5.0.11) @@ -575,9 +572,6 @@ importers: '@strudel/osc': specifier: workspace:* version: link:../packages/osc - '@strudel/repl': - specifier: workspace:* - version: link:../packages/repl '@strudel/serial': specifier: workspace:* version: link:../packages/serial @@ -620,9 +614,6 @@ importers: astro: specifier: ^4.0.8 version: 4.0.8(@types/node@20.10.6)(typescript@5.3.3) - canvas: - specifier: ^2.11.2 - version: 2.11.2 claviature: specifier: ^0.1.0 version: 0.1.0 @@ -878,13 +869,38 @@ packages: transitivePeerDependencies: - supports-color - /@astrojs/mdx@2.0.3(astro@4.0.8): - resolution: {integrity: sha512-wFjQX5CihU5B4UAQNwc2R48ph0flpc6/yvDCFANE0agtgI2+BaVcAjuW0EhGOQCZ65dQDqnFKE0lvGs7EADYpg==} + /@astrojs/markdown-remark@4.3.1: + resolution: {integrity: sha512-eJFi600tkRjTFiwzY9oD8AgCgB7gFqyWCKWuZ33dATVBgLiROD+zlMZ8STZzU7+ZALvmiUAun/K7umTmP5YfVQ==} + dependencies: + '@astrojs/prism': 3.0.0 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.1 + hast-util-to-text: 4.0.0 + import-meta-resolve: 4.0.0 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.0 + remark-gfm: 4.0.0 + remark-parse: 11.0.0 + remark-rehype: 11.0.0 + remark-smartypants: 2.0.0 + shiki: 1.2.0 + unified: 11.0.4 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.1 + vfile: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@astrojs/mdx@2.2.1(astro@4.0.8): + resolution: {integrity: sha512-bSr/AkvGieD9Pc5ZzMnAk7IHnw0vyt/aOujuYUmYT+NHiWahAUy/+ywNNMhTMmea0irdMYnBVC1AEKMQ/oXxow==} engines: {node: '>=18.14.1'} peerDependencies: astro: ^4.0.0 dependencies: - '@astrojs/markdown-remark': 4.0.1 + '@astrojs/markdown-remark': 4.3.1 '@mdx-js/mdx': 3.0.0 acorn: 8.11.3 astro: 4.0.8(@types/node@20.10.6)(typescript@5.3.3) @@ -3206,23 +3222,6 @@ packages: '@lezer/common': 1.2.0 dev: false - /@mapbox/node-pre-gyp@1.0.10: - resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} - hasBin: true - dependencies: - detect-libc: 2.0.1 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.6.8 - nopt: 5.0.0 - npmlog: 5.0.1 - rimraf: 3.0.2 - semver: 7.3.8 - tar: 6.1.13 - transitivePeerDependencies: - - encoding - - supports-color - /@mdx-js/mdx@3.0.0: resolution: {integrity: sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==} dependencies: @@ -3742,6 +3741,7 @@ packages: dependencies: '@rollup/pluginutils': 5.1.0 magic-string: 0.30.5 + dev: true /@rollup/pluginutils@3.1.0(rollup@2.79.1): resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} @@ -3767,6 +3767,7 @@ packages: '@types/estree': 1.0.0 estree-walker: 2.0.2 picomatch: 2.3.1 + dev: true /@rollup/rollup-android-arm-eabi@4.9.2: resolution: {integrity: sha512-RKzxFxBHq9ysZ83fn8Iduv3A283K7zPPYuhL/z9CQuyFrjwpErJx0h4aeb/bnJ+q29GRLgJpY66ceQ/Wcsn3wA==} @@ -3859,6 +3860,10 @@ packages: requiresBuild: true optional: true + /@shikijs/core@1.2.0: + resolution: {integrity: sha512-OlFvx+nyr5C8zpcMBnSGir0YPD6K11uYhouqhNmm1qLiis4GA7SsGtu07r9gKS9omks8RtQqHrJL4S+lqWK01A==} + dev: false + /@sigstore/bundle@2.1.0: resolution: {integrity: sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng==} engines: {node: ^16.14.0 || >=18.0.0} @@ -4993,9 +4998,6 @@ packages: through: 2.3.8 dev: true - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - /abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5029,6 +5031,7 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} @@ -5121,6 +5124,7 @@ packages: /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} + dev: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -5168,13 +5172,7 @@ packages: /aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - - /are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.0 + dev: true /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} @@ -5751,18 +5749,6 @@ packages: /caniuse-lite@1.0.30001572: resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} - /canvas@2.11.2: - resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} - engines: {node: '>=6'} - requiresBuild: true - dependencies: - '@mapbox/node-pre-gyp': 1.0.10 - nan: 2.17.0 - simple-get: 3.1.1 - transitivePeerDependencies: - - encoding - - supports-color - /catharsis@0.9.0: resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==} engines: {node: '>= 10'} @@ -5863,6 +5849,7 @@ packages: /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + dev: true /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} @@ -5981,6 +5968,7 @@ packages: /code-point-at@1.1.0: resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} engines: {node: '>=0.10.0'} + dev: true /collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -6021,6 +6009,7 @@ packages: /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + dev: true /color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} @@ -6138,6 +6127,7 @@ packages: /console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: true /conventional-changelog-angular@7.0.0: resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} @@ -6372,12 +6362,6 @@ packages: dependencies: character-entities: 2.0.2 - /decompress-response@4.2.1: - resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} - engines: {node: '>=8'} - dependencies: - mimic-response: 2.1.0 - /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -6445,6 +6429,7 @@ packages: /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: true /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} @@ -6480,6 +6465,7 @@ packages: /detect-libc@2.0.1: resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} engines: {node: '>=8'} + dev: true /detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} @@ -7168,6 +7154,7 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -7483,6 +7470,7 @@ packages: engines: {node: '>= 8'} dependencies: minipass: 3.3.6 + dev: true /fs-minipass@3.0.2: resolution: {integrity: sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==} @@ -7526,20 +7514,6 @@ packages: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - object-assign: 4.1.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - /gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -7937,6 +7911,7 @@ packages: /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: true /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} @@ -8088,6 +8063,15 @@ packages: '@types/hast': 3.0.2 dev: false + /hast-util-to-text@4.0.0: + resolution: {integrity: sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==} + dependencies: + '@types/hast': 3.0.2 + '@types/unist': 3.0.1 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + dev: false + /hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} dependencies: @@ -8172,6 +8156,7 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color + dev: true /https-proxy-agent@7.0.2: resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} @@ -8465,6 +8450,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: number-is-nan: 1.0.1 + dev: true /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -9299,12 +9285,6 @@ packages: semver: 5.7.1 dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - /make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -9979,10 +9959,6 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - /mimic-response@2.1.0: - resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} - engines: {node: '>=8'} - /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -10114,12 +10090,14 @@ packages: engines: {node: '>=8'} dependencies: yallist: 4.0.0 + dev: true /minipass@4.0.0: resolution: {integrity: sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==} engines: {node: '>=8'} dependencies: yallist: 4.0.0 + dev: true /minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} @@ -10142,6 +10120,7 @@ packages: dependencies: minipass: 3.3.6 yallist: 4.0.0 + dev: true /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -10155,6 +10134,7 @@ packages: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true + dev: true /mlly@1.4.0: resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} @@ -10248,9 +10228,6 @@ packages: thenify-all: 1.6.0 dev: false - /nan@2.17.0: - resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} - /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -10333,6 +10310,7 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 + dev: true /node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} @@ -10385,13 +10363,6 @@ packages: '@babel/parser': 7.23.6 dev: true - /nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true - dependencies: - abbrev: 1.1.1 - /nopt@7.1.0: resolution: {integrity: sha512-ZFPLe9Iu0tnx7oWhFxAo4s7QTn8+NNDDxYNaKLjE7Dp0tbakQ3M1QhQzsnzXHQBTUO3K9BmwaxnyO8Ayn2I95Q==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -10578,14 +10549,6 @@ packages: dependencies: path-key: 4.0.0 - /npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - dependencies: - are-we-there-yet: 2.0.0 - console-control-strings: 1.1.0 - gauge: 3.0.2 - set-blocking: 2.0.0 - /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -10599,6 +10562,7 @@ packages: /number-is-nan@1.0.1: resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} engines: {node: '>=0.10.0'} + dev: true /nx@17.2.8: resolution: {integrity: sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw==} @@ -10665,6 +10629,7 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + dev: false /object-get@2.1.1: resolution: {integrity: sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==} @@ -12151,10 +12116,6 @@ packages: hasBin: true dev: true - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -12192,6 +12153,7 @@ packages: /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true /set-function-length@1.1.1: resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} @@ -12264,6 +12226,12 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /shiki@1.2.0: + resolution: {integrity: sha512-xLhiTMOIUXCv5DqJ4I70GgQCtdlzsTqFLZWcMHHG3TAieBUbvEGthdrlPDlX4mL/Wszx9C6rEcxU6kMlg4YlxA==} + dependencies: + '@shikijs/core': 1.2.0 + dev: false + /shikiji@0.6.13: resolution: {integrity: sha512-4T7X39csvhT0p7GDnq9vysWddf2b6BeioiN3Ymhnt3xcy9tXmDcnsEFVxX18Z4YcQgEE/w48dLJ4pPPUcG9KkA==} dependencies: @@ -12315,13 +12283,7 @@ packages: /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - /simple-get@3.1.1: - resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} - dependencies: - decompress-response: 4.2.1 - once: 1.4.0 - simple-concat: 1.0.1 + dev: true /simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} @@ -12567,6 +12529,7 @@ packages: code-point-at: 1.1.0 is-fullwidth-code-point: 1.0.0 strip-ansi: 3.0.1 + dev: true /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -12673,6 +12636,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 + dev: true /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -12896,6 +12860,7 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 + dev: true /temp-dir@1.0.0: resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} @@ -13358,6 +13323,13 @@ packages: crypto-random-string: 2.0.0 dev: true + /unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + dependencies: + '@types/unist': 3.0.1 + unist-util-is: 6.0.0 + dev: false + /unist-util-is@3.0.0: resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} dev: false @@ -13894,6 +13866,7 @@ packages: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: string-width: 1.0.2 + dev: true /widest-line@4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap index 3c96b6bd..7a4b52a7 100644 --- a/test/__snapshots__/examples.test.mjs.snap +++ b/test/__snapshots__/examples.test.mjs.snap @@ -1939,18 +1939,54 @@ exports[`runs examples > example "delaytime" example index 0 1`] = ` exports[`runs examples > example "detune" example index 0 1`] = ` [ - "[ 0/1 → 1/3 | n:0 s:superzow octave:3 detune:0 ]", - "[ 1/3 → 2/3 | n:3 s:superzow octave:3 detune:0 ]", - "[ 2/3 → 1/1 | n:7 s:superzow octave:3 detune:0 ]", - "[ 1/1 → 4/3 | n:0 s:superzow octave:3 detune:0.25 ]", - "[ 4/3 → 5/3 | n:3 s:superzow octave:3 detune:0.25 ]", - "[ 5/3 → 2/1 | n:7 s:superzow octave:3 detune:0.25 ]", - "[ 2/1 → 7/3 | n:0 s:superzow octave:3 detune:0.5 ]", - "[ 7/3 → 8/3 | n:3 s:superzow octave:3 detune:0.5 ]", - "[ 8/3 → 3/1 | n:7 s:superzow octave:3 detune:0.5 ]", - "[ 3/1 → 10/3 | n:0 s:superzow octave:3 detune:1 ]", - "[ 10/3 → 11/3 | n:3 s:superzow octave:3 detune:1 ]", - "[ 11/3 → 4/1 | n:7 s:superzow octave:3 detune:1 ]", + "[ 0/1 → 1/12 | note:d s:supersaw detune:0.1 ]", + "[ 1/12 → 1/6 | note:f s:supersaw detune:0.1 ]", + "[ 1/6 → 1/4 | note:a s:supersaw detune:0.1 ]", + "[ 1/4 → 1/3 | note:a# s:supersaw detune:0.1 ]", + "[ 1/3 → 5/12 | note:a s:supersaw detune:0.1 ]", + "[ 5/12 → 1/2 | note:d3 s:supersaw detune:0.1 ]", + "[ 1/2 → 7/12 | note:d s:supersaw detune:0.1 ]", + "[ 7/12 → 2/3 | note:f s:supersaw detune:0.1 ]", + "[ 2/3 → 3/4 | note:a s:supersaw detune:0.1 ]", + "[ 3/4 → 5/6 | note:a# s:supersaw detune:0.1 ]", + "[ 5/6 → 11/12 | note:a s:supersaw detune:0.1 ]", + "[ 11/12 → 1/1 | note:d3 s:supersaw detune:0.1 ]", + "[ 1/1 → 13/12 | note:d s:supersaw detune:0.2 ]", + "[ 13/12 → 7/6 | note:f s:supersaw detune:0.2 ]", + "[ 7/6 → 5/4 | note:a s:supersaw detune:0.2 ]", + "[ 5/4 → 4/3 | note:a# s:supersaw detune:0.2 ]", + "[ 4/3 → 17/12 | note:a s:supersaw detune:0.2 ]", + "[ 17/12 → 3/2 | note:d3 s:supersaw detune:0.2 ]", + "[ 3/2 → 19/12 | note:d s:supersaw detune:0.2 ]", + "[ 19/12 → 5/3 | note:f s:supersaw detune:0.2 ]", + "[ 5/3 → 7/4 | note:a s:supersaw detune:0.2 ]", + "[ 7/4 → 11/6 | note:a# s:supersaw detune:0.2 ]", + "[ 11/6 → 23/12 | note:a s:supersaw detune:0.2 ]", + "[ 23/12 → 2/1 | note:d3 s:supersaw detune:0.2 ]", + "[ 2/1 → 25/12 | note:d s:supersaw detune:0.5 ]", + "[ 25/12 → 13/6 | note:f s:supersaw detune:0.5 ]", + "[ 13/6 → 9/4 | note:a s:supersaw detune:0.5 ]", + "[ 9/4 → 7/3 | note:a# s:supersaw detune:0.5 ]", + "[ 7/3 → 29/12 | note:a s:supersaw detune:0.5 ]", + "[ 29/12 → 5/2 | note:d3 s:supersaw detune:0.5 ]", + "[ 5/2 → 31/12 | note:d s:supersaw detune:0.5 ]", + "[ 31/12 → 8/3 | note:f s:supersaw detune:0.5 ]", + "[ 8/3 → 11/4 | note:a s:supersaw detune:0.5 ]", + "[ 11/4 → 17/6 | note:a# s:supersaw detune:0.5 ]", + "[ 17/6 → 35/12 | note:a s:supersaw detune:0.5 ]", + "[ 35/12 → 3/1 | note:d3 s:supersaw detune:0.5 ]", + "[ 3/1 → 37/12 | note:d s:supersaw detune:24.1 ]", + "[ 37/12 → 19/6 | note:f s:supersaw detune:24.1 ]", + "[ 19/6 → 13/4 | note:a s:supersaw detune:24.1 ]", + "[ 13/4 → 10/3 | note:a# s:supersaw detune:24.1 ]", + "[ 10/3 → 41/12 | note:a s:supersaw detune:24.1 ]", + "[ 41/12 → 7/2 | note:d3 s:supersaw detune:24.1 ]", + "[ 7/2 → 43/12 | note:d s:supersaw detune:24.1 ]", + "[ 43/12 → 11/3 | note:f s:supersaw detune:24.1 ]", + "[ 11/3 → 15/4 | note:a s:supersaw detune:24.1 ]", + "[ 15/4 → 23/6 | note:a# s:supersaw detune:24.1 ]", + "[ 23/6 → 47/12 | note:a s:supersaw detune:24.1 ]", + "[ 47/12 → 4/1 | note:d3 s:supersaw detune:24.1 ]", ] `; @@ -6806,6 +6842,59 @@ exports[`runs examples > example "splice" example index 0 1`] = ` ] `; +exports[`runs examples > example "spread" example index 0 1`] = ` +[ + "[ 0/1 → 1/12 | note:d s:supersaw spread:0 ]", + "[ 1/12 → 1/6 | note:f s:supersaw spread:0 ]", + "[ 1/6 → 1/4 | note:a s:supersaw spread:0 ]", + "[ 1/4 → 1/3 | note:a# s:supersaw spread:0 ]", + "[ 1/3 → 5/12 | note:a s:supersaw spread:0 ]", + "[ 5/12 → 1/2 | note:d3 s:supersaw spread:0 ]", + "[ 1/2 → 7/12 | note:d s:supersaw spread:0 ]", + "[ 7/12 → 2/3 | note:f s:supersaw spread:0 ]", + "[ 2/3 → 3/4 | note:a s:supersaw spread:0 ]", + "[ 3/4 → 5/6 | note:a# s:supersaw spread:0 ]", + "[ 5/6 → 11/12 | note:a s:supersaw spread:0 ]", + "[ 11/12 → 1/1 | note:d3 s:supersaw spread:0 ]", + "[ 1/1 → 13/12 | note:d s:supersaw spread:0.3 ]", + "[ 13/12 → 7/6 | note:f s:supersaw spread:0.3 ]", + "[ 7/6 → 5/4 | note:a s:supersaw spread:0.3 ]", + "[ 5/4 → 4/3 | note:a# s:supersaw spread:0.3 ]", + "[ 4/3 → 17/12 | note:a s:supersaw spread:0.3 ]", + "[ 17/12 → 3/2 | note:d3 s:supersaw spread:0.3 ]", + "[ 3/2 → 19/12 | note:d s:supersaw spread:0.3 ]", + "[ 19/12 → 5/3 | note:f s:supersaw spread:0.3 ]", + "[ 5/3 → 7/4 | note:a s:supersaw spread:0.3 ]", + "[ 7/4 → 11/6 | note:a# s:supersaw spread:0.3 ]", + "[ 11/6 → 23/12 | note:a s:supersaw spread:0.3 ]", + "[ 23/12 → 2/1 | note:d3 s:supersaw spread:0.3 ]", + "[ 2/1 → 25/12 | note:d s:supersaw spread:1 ]", + "[ 25/12 → 13/6 | note:f s:supersaw spread:1 ]", + "[ 13/6 → 9/4 | note:a s:supersaw spread:1 ]", + "[ 9/4 → 7/3 | note:a# s:supersaw spread:1 ]", + "[ 7/3 → 29/12 | note:a s:supersaw spread:1 ]", + "[ 29/12 → 5/2 | note:d3 s:supersaw spread:1 ]", + "[ 5/2 → 31/12 | note:d s:supersaw spread:1 ]", + "[ 31/12 → 8/3 | note:f s:supersaw spread:1 ]", + "[ 8/3 → 11/4 | note:a s:supersaw spread:1 ]", + "[ 11/4 → 17/6 | note:a# s:supersaw spread:1 ]", + "[ 17/6 → 35/12 | note:a s:supersaw spread:1 ]", + "[ 35/12 → 3/1 | note:d3 s:supersaw spread:1 ]", + "[ 3/1 → 37/12 | note:d s:supersaw spread:0 ]", + "[ 37/12 → 19/6 | note:f s:supersaw spread:0 ]", + "[ 19/6 → 13/4 | note:a s:supersaw spread:0 ]", + "[ 13/4 → 10/3 | note:a# s:supersaw spread:0 ]", + "[ 10/3 → 41/12 | note:a s:supersaw spread:0 ]", + "[ 41/12 → 7/2 | note:d3 s:supersaw spread:0 ]", + "[ 7/2 → 43/12 | note:d s:supersaw spread:0 ]", + "[ 43/12 → 11/3 | note:f s:supersaw spread:0 ]", + "[ 11/3 → 15/4 | note:a s:supersaw spread:0 ]", + "[ 15/4 → 23/6 | note:a# s:supersaw spread:0 ]", + "[ 23/6 → 47/12 | note:a s:supersaw spread:0 ]", + "[ 47/12 → 4/1 | note:d3 s:supersaw spread:0 ]", +] +`; + exports[`runs examples > example "square" example index 0 1`] = ` [ "[ 0/1 → 1/4 | note:C3 ]", @@ -7267,6 +7356,59 @@ exports[`runs examples > example "undegradeBy" example index 0 1`] = ` ] `; +exports[`runs examples > example "unison" example index 0 1`] = ` +[ + "[ 0/1 → 1/12 | note:d s:supersaw unison:1 ]", + "[ 1/12 → 1/6 | note:f s:supersaw unison:1 ]", + "[ 1/6 → 1/4 | note:a s:supersaw unison:1 ]", + "[ 1/4 → 1/3 | note:a# s:supersaw unison:1 ]", + "[ 1/3 → 5/12 | note:a s:supersaw unison:1 ]", + "[ 5/12 → 1/2 | note:d3 s:supersaw unison:1 ]", + "[ 1/2 → 7/12 | note:d s:supersaw unison:1 ]", + "[ 7/12 → 2/3 | note:f s:supersaw unison:1 ]", + "[ 2/3 → 3/4 | note:a s:supersaw unison:1 ]", + "[ 3/4 → 5/6 | note:a# s:supersaw unison:1 ]", + "[ 5/6 → 11/12 | note:a s:supersaw unison:1 ]", + "[ 11/12 → 1/1 | note:d3 s:supersaw unison:1 ]", + "[ 1/1 → 13/12 | note:d s:supersaw unison:2 ]", + "[ 13/12 → 7/6 | note:f s:supersaw unison:2 ]", + "[ 7/6 → 5/4 | note:a s:supersaw unison:2 ]", + "[ 5/4 → 4/3 | note:a# s:supersaw unison:2 ]", + "[ 4/3 → 17/12 | note:a s:supersaw unison:2 ]", + "[ 17/12 → 3/2 | note:d3 s:supersaw unison:2 ]", + "[ 3/2 → 19/12 | note:d s:supersaw unison:2 ]", + "[ 19/12 → 5/3 | note:f s:supersaw unison:2 ]", + "[ 5/3 → 7/4 | note:a s:supersaw unison:2 ]", + "[ 7/4 → 11/6 | note:a# s:supersaw unison:2 ]", + "[ 11/6 → 23/12 | note:a s:supersaw unison:2 ]", + "[ 23/12 → 2/1 | note:d3 s:supersaw unison:2 ]", + "[ 2/1 → 25/12 | note:d s:supersaw unison:7 ]", + "[ 25/12 → 13/6 | note:f s:supersaw unison:7 ]", + "[ 13/6 → 9/4 | note:a s:supersaw unison:7 ]", + "[ 9/4 → 7/3 | note:a# s:supersaw unison:7 ]", + "[ 7/3 → 29/12 | note:a s:supersaw unison:7 ]", + "[ 29/12 → 5/2 | note:d3 s:supersaw unison:7 ]", + "[ 5/2 → 31/12 | note:d s:supersaw unison:7 ]", + "[ 31/12 → 8/3 | note:f s:supersaw unison:7 ]", + "[ 8/3 → 11/4 | note:a s:supersaw unison:7 ]", + "[ 11/4 → 17/6 | note:a# s:supersaw unison:7 ]", + "[ 17/6 → 35/12 | note:a s:supersaw unison:7 ]", + "[ 35/12 → 3/1 | note:d3 s:supersaw unison:7 ]", + "[ 3/1 → 37/12 | note:d s:supersaw unison:1 ]", + "[ 37/12 → 19/6 | note:f s:supersaw unison:1 ]", + "[ 19/6 → 13/4 | note:a s:supersaw unison:1 ]", + "[ 13/4 → 10/3 | note:a# s:supersaw unison:1 ]", + "[ 10/3 → 41/12 | note:a s:supersaw unison:1 ]", + "[ 41/12 → 7/2 | note:d3 s:supersaw unison:1 ]", + "[ 7/2 → 43/12 | note:d s:supersaw unison:1 ]", + "[ 43/12 → 11/3 | note:f s:supersaw unison:1 ]", + "[ 11/3 → 15/4 | note:a s:supersaw unison:1 ]", + "[ 15/4 → 23/6 | note:a# s:supersaw unison:1 ]", + "[ 23/6 → 47/12 | note:a s:supersaw unison:1 ]", + "[ 47/12 → 4/1 | note:d3 s:supersaw unison:1 ]", +] +`; + exports[`runs examples > example "unit" example index 0 1`] = ` [ "[ 0/1 → 1/4 | speed:1 s:bd unit:c ]", diff --git a/test/__snapshots__/tunes.test.mjs.snap b/test/__snapshots__/tunes.test.mjs.snap index d929b84a..5740d0c5 100644 --- a/test/__snapshots__/tunes.test.mjs.snap +++ b/test/__snapshots__/tunes.test.mjs.snap @@ -7208,653 +7208,6 @@ exports[`renders tunes > tune: holyflute 1`] = ` ] `; -exports[`renders tunes > tune: hyperpop 1`] = ` -[ - "[ -1/4 ⇜ (0/1 → 1/12) ⇝ 1/8 | gain:0.00024394233952886464 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ -1/4 ⇜ (0/1 → 1/12) ⇝ 1/8 | gain:0.00024394233952886464 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ -3/8 ⇜ (0/1 → 1/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1616.8693414940683 ]", - "[ -3/8 ⇜ (0/1 → 1/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1616.8693414940683 ]", - "[ -1/8 ⇜ (0/1 → 1/6) ⇝ 1/4 | gain:0.00031404209523161047 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ -1/8 ⇜ (0/1 → 1/6) ⇝ 1/4 | gain:0.00031404209523161047 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ -1/4 ⇜ (0/1 → 1/4) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1650 ]", - "[ -1/4 ⇜ (0/1 → 1/4) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1650 ]", - "[ 0/1 → 1/4 | gain:0.00039824554453003064 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.143312438893 cutoff:4000 ]", - "[ 0/1 → 1/4 | gain:0.00039824554453003064 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.143312438893 cutoff:4000 ]", - "[ 0/1 → 1/4 | s:bd gain:0.7 ]", - "[ (0/1 → 1/3) ⇝ 3/8 | gain:0.26103468453995016 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5998.072590601808 cutoff:4000 ]", - "[ (0/1 → 1/3) ⇝ 3/8 | gain:0.26103468453995016 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5998.072590601808 cutoff:4000 ]", - "[ -1/8 ⇜ (0/1 → 3/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1683.1306585059317 ]", - "[ -1/8 ⇜ (0/1 → 3/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:1683.1306585059317 ]", - "[ -1/4 ⇜ (1/12 → 1/8) | gain:0.00024394233952886464 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ -1/4 ⇜ (1/12 → 1/8) | gain:0.00024394233952886464 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ 1/8 → 1/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1699.6897509708342 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 1/8 → 1/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1699.6897509708342 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (1/8 → 5/12) ⇝ 1/2 | gain:0.0002657724569848846 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5994.647308096509 cutoff:4000 ]", - "[ (1/8 → 5/12) ⇝ 1/2 | gain:0.0002657724569848846 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5994.647308096509 cutoff:4000 ]", - "[ -1/8 ⇜ (1/6 → 1/4) | gain:0.00031404209523161047 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ -1/8 ⇜ (1/6 → 1/4) | gain:0.00031404209523161047 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5999.785818935017 cutoff:4000 ]", - "[ 1/4 → 1/2 | gain:0.0003367315392180906 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5992.29333433282 cutoff:4000 ]", - "[ 1/4 → 1/2 | gain:0.0003367315392180906 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5992.29333433282 cutoff:4000 ]", - "[ 1/4 → 1/2 | s:hh3 gain:0.7 ]", - "[ (1/4 → 7/12) ⇝ 5/8 | gain:0.2205154266512362 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5989.512318936654 cutoff:4000 ]", - "[ (1/4 → 7/12) ⇝ 5/8 | gain:0.2205154266512362 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5989.512318936654 cutoff:4000 ]", - "[ 0/1 ⇜ (1/3 → 3/8) | gain:0.26103468453995016 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5998.072590601808 cutoff:4000 ]", - "[ 0/1 ⇜ (1/3 → 3/8) | gain:0.26103468453995016 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5998.072590601808 cutoff:4000 ]", - "[ 3/8 → 1/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1765.826371664994 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 3/8 → 1/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1765.826371664994 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (3/8 → 2/3) ⇝ 3/4 | gain:0.2828651860235305 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5982.671142387316 cutoff:4000 ]", - "[ (3/8 → 2/3) ⇝ 3/4 | gain:0.2828651860235305 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5982.671142387316 cutoff:4000 ]", - "[ 1/8 ⇜ (5/12 → 1/2) | gain:0.0002657724569848846 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5994.647308096509 cutoff:4000 ]", - "[ 1/8 ⇜ (5/12 → 1/2) | gain:0.0002657724569848846 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5994.647308096509 cutoff:4000 ]", - "[ 1/2 → 5/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1798.799979846742 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 1/2 → 5/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1798.799979846742 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 1/2 → 3/4 | gain:0.0002836833950716784 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5978.612153434527 cutoff:4000 ]", - "[ 1/2 → 3/4 | gain:0.0002836833950716784 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5978.612153434527 cutoff:4000 ]", - "[ 1/2 → 3/4 | s:bd gain:0.7 ]", - "[ (1/2 → 5/6) ⇝ 7/8 | gain:0.18560442471759028 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5974.128467049176 cutoff:4000 ]", - "[ (1/2 → 5/6) ⇝ 7/8 | gain:0.18560442471759028 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5974.128467049176 cutoff:4000 ]", - "[ 1/2 → 1/1 | s:sn gain:0.7 ]", - "[ 1/4 ⇜ (7/12 → 5/8) | gain:0.2205154266512362 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5989.512318936654 cutoff:4000 ]", - "[ 1/4 ⇜ (7/12 → 5/8) | gain:0.2205154266512362 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5989.512318936654 cutoff:4000 ]", - "[ (5/8 → 11/12) ⇝ 1/1 | gain:0.237641808847867 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5963.890147645195 cutoff:4000 ]", - "[ (5/8 → 11/12) ⇝ 1/1 | gain:0.237641808847867 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5963.890147645195 cutoff:4000 ]", - "[ 3/8 ⇜ (2/3 → 3/4) | gain:0.2828651860235305 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5982.671142387316 cutoff:4000 ]", - "[ 3/8 ⇜ (2/3 → 3/4) | gain:0.2828651860235305 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5982.671142387316 cutoff:4000 ]", - "[ 3/4 → 7/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1864.4584935007128 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 3/4 → 7/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1864.4584935007128 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 3/4 → 1/1 | gain:0.300533478008833 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5958.137268909887 cutoff:4000 ]", - "[ 3/4 → 1/1 | gain:0.300533478008833 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5958.137268909887 cutoff:4000 ]", - "[ 3/4 → 1/1 | s:hh3 gain:0.7 ]", - "[ (3/4 → 13/12) ⇝ 9/8 | gain:0.15563993880588714 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", - "[ (3/4 → 13/12) ⇝ 9/8 | gain:0.15563993880588714 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", - "[ 1/2 ⇜ (5/6 → 7/8) | gain:0.18560442471759028 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5974.128467049176 cutoff:4000 ]", - "[ 1/2 ⇜ (5/6 → 7/8) | gain:0.18560442471759028 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5974.128467049176 cutoff:4000 ]", - "[ 7/8 → 1/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1897.1038487394403 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 7/8 → 1/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1897.1038487394403 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (7/8 → 7/6) ⇝ 5/4 | gain:0.1989031661444791 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", - "[ (7/8 → 7/6) ⇝ 5/4 | gain:0.1989031661444791 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", - "[ 5/8 ⇜ (11/12 → 1/1) | gain:0.237641808847867 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5963.890147645195 cutoff:4000 ]", - "[ 5/8 ⇜ (11/12 → 1/1) | gain:0.237641808847867 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5963.890147645195 cutoff:4000 ]", - "[ 1/1 → 5/4 | gain:0.2513066112116339 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5930.924800994192 cutoff:4000 ]", - "[ 1/1 → 5/4 | gain:0.2513066112116339 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5930.924800994192 cutoff:4000 ]", - "[ 1/1 → 5/4 | s:bd gain:0.7 ]", - "[ (1/1 → 4/3) ⇝ 11/8 | gain:0.13002412009397907 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5923.077274266886 cutoff:4000 ]", - "[ (1/1 → 4/3) ⇝ 11/8 | gain:0.13002412009397907 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5923.077274266886 cutoff:4000 ]", - "[ 3/4 ⇜ (13/12 → 9/8) | gain:0.15563993880588714 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", - "[ 3/4 ⇜ (13/12 → 9/8) | gain:0.15563993880588714 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5951.963201008076 cutoff:4000 ]", - "[ 9/8 → 5/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1961.928446178906 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 9/8 → 5/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:1961.928446178906 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (9/8 → 17/12) ⇝ 3/2 | gain:0.16585458116324744 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5906.1380911341175 cutoff:4000 ]", - "[ (9/8 → 17/12) ⇝ 3/2 | gain:0.16585458116324744 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5906.1380911341175 cutoff:4000 ]", - "[ 7/8 ⇜ (7/6 → 5/4) | gain:0.1989031661444791 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", - "[ 7/8 ⇜ (7/6 → 5/4) | gain:0.1989031661444791 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5938.355801271282 cutoff:4000 ]", - "[ 5/4 → 3/2 | gain:0.20935386344254933 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5897.049337170482 cutoff:4000 ]", - "[ 5/4 → 3/2 | gain:0.20935386344254933 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5897.049337170482 cutoff:4000 ]", - "[ 5/4 → 3/2 | s:hh3 gain:0.7 ]", - "[ (5/4 → 19/12) ⇝ 13/8 | gain:0.10821620301269062 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5887.549861142967 cutoff:4000 ]", - "[ (5/4 → 19/12) ⇝ 13/8 | gain:0.10821620301269062 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5887.549861142967 cutoff:4000 ]", - "[ 1/1 ⇜ (4/3 → 11/8) | gain:0.13002412009397907 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5923.077274266886 cutoff:4000 ]", - "[ 1/1 ⇜ (4/3 → 11/8) | gain:0.13002412009397907 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5923.077274266886 cutoff:4000 ]", - "[ 11/8 → 3/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2026.0015806698216 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 11/8 → 3/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2026.0015806698216 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (11/8 → 5/3) ⇝ 7/4 | gain:0.13777765528071248 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5867.325323737765 cutoff:4000 ]", - "[ (11/8 → 5/3) ⇝ 7/4 | gain:0.13777765528071248 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5867.325323737765 cutoff:4000 ]", - "[ 9/8 ⇜ (17/12 → 3/2) | gain:0.16585458116324744 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5906.1380911341175 cutoff:4000 ]", - "[ 9/8 ⇜ (17/12 → 3/2) | gain:0.16585458116324744 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5906.1380911341175 cutoff:4000 ]", - "[ 3/2 → 13/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2057.708031580958 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 3/2 → 13/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2057.708031580958 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 3/2 → 7/4 | gain:0.17374970658501893 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5856.603727730447 cutoff:4000 ]", - "[ 3/2 → 7/4 | gain:0.17374970658501893 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5856.603727730447 cutoff:4000 ]", - "[ 3/2 → 7/4 | s:bd gain:0.7 ]", - "[ (3/2 → 11/6) ⇝ 15/8 | gain:0.08972789051217522 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5845.47833980621 cutoff:4000 ]", - "[ (3/2 → 11/6) ⇝ 15/8 | gain:0.08972789051217522 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5845.47833980621 cutoff:4000 ]", - "[ 3/2 → 2/1 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2104.801302079497 ]", - "[ 3/2 → 2/1 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2104.801302079497 ]", - "[ 3/2 → 2/1 | s:sn gain:0.7 ]", - "[ 5/4 ⇜ (19/12 → 13/8) | gain:0.10821620301269062 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5887.549861142967 cutoff:4000 ]", - "[ 5/4 ⇜ (19/12 → 13/8) | gain:0.10821620301269062 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5887.549861142967 cutoff:4000 ]", - "[ (13/8 → 23/12) ⇝ 2/1 | gain:0.11402475157686406 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5822.02388217981 cutoff:4000 ]", - "[ (13/8 → 23/12) ⇝ 2/1 | gain:0.11402475157686406 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5822.02388217981 cutoff:4000 ]", - "[ (13/8 → 2/1) ⇝ 17/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", - "[ (13/8 → 2/1) ⇝ 17/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", - "[ 11/8 ⇜ (5/3 → 7/4) | gain:0.13777765528071248 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5867.325323737765 cutoff:4000 ]", - "[ 11/8 ⇜ (5/3 → 7/4) | gain:0.13777765528071248 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5867.325323737765 cutoff:4000 ]", - "[ 7/4 → 15/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2120.3652183367367 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 7/4 → 15/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2120.3652183367367 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 7/4 → 2/1 | gain:0.14366058218580086 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5809.698831278217 cutoff:4000 ]", - "[ 7/4 → 2/1 | gain:0.14366058218580086 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5809.698831278217 cutoff:4000 ]", - "[ 7/4 → 2/1 | s:hh3 gain:0.7 ]", - "[ (7/4 → 2/1) ⇝ 17/8 | gain:0.07411986998714647 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", - "[ (7/4 → 2/1) ⇝ 17/8 | gain:0.07411986998714647 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", - "[ (7/4 → 2/1) ⇝ 9/4 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2166.622633692871 ]", - "[ (7/4 → 2/1) ⇝ 9/4 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2166.622633692871 ]", - "[ 3/2 ⇜ (11/6 → 15/8) | gain:0.08972789051217522 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5845.47833980621 cutoff:4000 ]", - "[ 3/2 ⇜ (11/6 → 15/8) | gain:0.08972789051217522 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5845.47833980621 cutoff:4000 ]", - "[ 15/8 → 2/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2151.2782118349805 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 15/8 → 2/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2151.2782118349805 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (15/8 → 2/1) ⇝ 9/4 | gain:0.09401455409698445 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", - "[ (15/8 → 2/1) ⇝ 9/4 | gain:0.09401455409698445 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", - "[ (15/8 → 2/1) ⇝ 19/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", - "[ (15/8 → 2/1) ⇝ 19/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", - "[ 13/8 ⇜ (23/12 → 2/1) | gain:0.11402475157686406 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5822.02388217981 cutoff:4000 ]", - "[ 13/8 ⇜ (23/12 → 2/1) | gain:0.11402475157686406 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5822.02388217981 cutoff:4000 ]", - "[ 7/4 ⇜ (2/1 → 25/12) ⇝ 17/8 | gain:0.07411986998714647 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", - "[ 7/4 ⇜ (2/1 → 25/12) ⇝ 17/8 | gain:0.07411986998714647 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", - "[ 13/8 ⇜ (2/1 → 17/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", - "[ 13/8 ⇜ (2/1 → 17/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2135.8582993222344 ]", - "[ 15/8 ⇜ (2/1 → 13/6) ⇝ 9/4 | gain:0.09401455409698445 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", - "[ 15/8 ⇜ (2/1 → 13/6) ⇝ 9/4 | gain:0.09401455409698445 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", - "[ 7/4 ⇜ (2/1 → 9/4) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2166.622633692871 ]", - "[ 7/4 ⇜ (2/1 → 9/4) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2166.622633692871 ]", - "[ 2/1 → 9/4 | gain:0.11833922971344701 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5756.463210874651 cutoff:4000 ]", - "[ 2/1 → 9/4 | gain:0.11833922971344701 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5756.463210874651 cutoff:4000 ]", - "[ 2/1 → 9/4 | s:bd gain:0.7 ]", - "[ (2/1 → 7/3) ⇝ 19/8 | gain:0.06099882456242525 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5742.18185383172 cutoff:4000 ]", - "[ (2/1 → 7/3) ⇝ 19/8 | gain:0.06099882456242525 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5742.18185383172 cutoff:4000 ]", - "[ 15/8 ⇜ (2/1 → 19/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", - "[ 15/8 ⇜ (2/1 → 19/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2197.0757739067362 ]", - "[ 7/4 ⇜ (25/12 → 17/8) | gain:0.07411986998714647 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", - "[ 7/4 ⇜ (25/12 → 17/8) | gain:0.07411986998714647 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5796.978025372246 cutoff:4000 ]", - "[ 17/8 → 9/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2212.17990613181 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 17/8 → 9/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2212.17990613181 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (17/8 → 29/12) ⇝ 5/2 | gain:0.07722803431084992 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5712.469093657604 cutoff:4000 ]", - "[ (17/8 → 29/12) ⇝ 5/2 | gain:0.07722803431084992 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5712.469093657604 cutoff:4000 ]", - "[ 15/8 ⇜ (13/6 → 9/4) | gain:0.09401455409698445 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", - "[ 15/8 ⇜ (13/6 → 9/4) | gain:0.09401455409698445 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5770.357934562703 cutoff:4000 ]", - "[ 9/4 → 5/2 | gain:0.09711940526986938 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5697.042781654914 cutoff:4000 ]", - "[ 9/4 → 5/2 | gain:0.09711940526986938 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5697.042781654914 cutoff:4000 ]", - "[ 9/4 → 5/2 | s:hh3 gain:0.7 ]", - "[ (9/4 → 31/12) ⇝ 21/8 | gain:0.05001458841027654 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5681.240017681994 cutoff:4000 ]", - "[ (9/4 → 31/12) ⇝ 21/8 | gain:0.05001458841027654 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5681.240017681994 cutoff:4000 ]", - "[ 2/1 ⇜ (7/3 → 19/8) | gain:0.06099882456242525 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5742.18185383172 cutoff:4000 ]", - "[ 2/1 ⇜ (7/3 → 19/8) | gain:0.06099882456242525 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5742.18185383172 cutoff:4000 ]", - "[ 19/8 → 5/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2271.727259793624 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 19/8 → 5/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2271.727259793624 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (19/8 → 8/3) ⇝ 11/4 | gain:0.06320447612884668 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5648.516028753632 cutoff:4000 ]", - "[ (19/8 → 8/3) ⇝ 11/4 | gain:0.06320447612884668 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5648.516028753632 cutoff:4000 ]", - "[ 17/8 ⇜ (29/12 → 5/2) | gain:0.07722803431084992 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5712.469093657604 cutoff:4000 ]", - "[ 17/8 ⇜ (29/12 → 5/2) | gain:0.07722803431084992 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5712.469093657604 cutoff:4000 ]", - "[ 5/2 → 21/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2300.948092306816 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 5/2 → 21/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2300.948092306816 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 5/2 → 11/4 | gain:0.0794106090487894 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5631.60041088523 cutoff:4000 ]", - "[ 5/2 → 11/4 | gain:0.0794106090487894 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5631.60041088523 cutoff:4000 ]", - "[ 5/2 → 11/4 | s:bd gain:0.7 ]", - "[ (5/2 → 17/6) ⇝ 23/8 | gain:0.04085727749307612 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5614.319554259933 cutoff:4000 ]", - "[ (5/2 → 17/6) ⇝ 23/8 | gain:0.04085727749307612 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5614.319554259933 cutoff:4000 ]", - "[ 5/2 → 3/1 | s:sn gain:0.7 ]", - "[ 9/4 ⇜ (31/12 → 21/8) | gain:0.05001458841027654 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5681.240017681994 cutoff:4000 ]", - "[ 9/4 ⇜ (31/12 → 21/8) | gain:0.05001458841027654 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5681.240017681994 cutoff:4000 ]", - "[ (21/8 → 35/12) ⇝ 3/1 | gain:0.051537412445127495 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5578.674030756363 cutoff:4000 ]", - "[ (21/8 → 35/12) ⇝ 3/1 | gain:0.051537412445127495 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5578.674030756363 cutoff:4000 ]", - "[ 19/8 ⇜ (8/3 → 11/4) | gain:0.06320447612884668 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5648.516028753632 cutoff:4000 ]", - "[ 19/8 ⇜ (8/3 → 11/4) | gain:0.06320447612884668 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5648.516028753632 cutoff:4000 ]", - "[ 11/4 → 23/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2358.1960716159333 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 11/4 → 23/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2358.1960716159333 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 11/4 → 3/1 | gain:0.06469267544862903 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5560.31547155504 cutoff:4000 ]", - "[ 11/4 → 3/1 | gain:0.06469267544862903 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5560.31547155504 cutoff:4000 ]", - "[ 11/4 → 3/1 | s:hh3 gain:0.7 ]", - "[ (11/4 → 37/12) ⇝ 25/8 | gain:0.033254339487292464 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", - "[ (11/4 → 37/12) ⇝ 25/8 | gain:0.033254339487292464 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", - "[ 5/2 ⇜ (17/6 → 23/8) | gain:0.04085727749307612 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5614.319554259933 cutoff:4000 ]", - "[ 5/2 ⇜ (17/6 → 23/8) | gain:0.04085727749307612 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5614.319554259933 cutoff:4000 ]", - "[ 23/8 → 3/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2386.1887343697626 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 23/8 → 3/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2386.1887343697626 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (23/8 → 19/6) ⇝ 13/4 | gain:0.041870446443995187 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", - "[ (23/8 → 19/6) ⇝ 13/4 | gain:0.041870446443995187 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", - "[ 21/8 ⇜ (35/12 → 3/1) | gain:0.051537412445127495 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5578.674030756363 cutoff:4000 ]", - "[ 21/8 ⇜ (35/12 → 3/1) | gain:0.051537412445127495 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5578.674030756363 cutoff:4000 ]", - "[ 3/1 → 13/4 | gain:0.05251021778611238 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5483.383350728088 cutoff:4000 ]", - "[ 3/1 → 13/4 | gain:0.05251021778611238 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5483.383350728088 cutoff:4000 ]", - "[ 3/1 → 13/4 | s:bd gain:0.7 ]", - "[ (3/1 → 10/3) ⇝ 27/8 | gain:0.026967531141465956 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5463.2923272018625 cutoff:4000 ]", - "[ (3/1 → 10/3) ⇝ 27/8 | gain:0.026967531141465956 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5463.2923272018625 cutoff:4000 ]", - "[ 11/4 ⇜ (37/12 → 25/8) | gain:0.033254339487292464 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", - "[ 11/4 ⇜ (37/12 → 25/8) | gain:0.033254339487292464 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5541.603887904197 cutoff:4000 ]", - "[ 25/8 → 13/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2440.8271075661924 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 25/8 → 13/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2440.8271075661924 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (25/8 → 41/12) ⇝ 7/2 | gain:0.0338929965297769 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5422.104580183649 cutoff:4000 ]", - "[ (25/8 → 41/12) ⇝ 7/2 | gain:0.0338929965297769 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5422.104580183649 cutoff:4000 ]", - "[ 23/8 ⇜ (19/6 → 13/4) | gain:0.041870446443995187 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", - "[ 23/8 ⇜ (19/6 → 13/4) | gain:0.041870446443995187 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5503.134531727652 cutoff:4000 ]", - "[ 13/4 → 7/2 | gain:0.04246699250713177 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5401.014914000078 cutoff:4000 ]", - "[ 13/4 → 7/2 | gain:0.04246699250713177 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5401.014914000078 cutoff:4000 ]", - "[ 13/4 → 7/2 | s:hh3 gain:0.7 ]", - "[ (13/4 → 43/12) ⇝ 29/8 | gain:0.021789864126373813 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5379.599518697443 cutoff:4000 ]", - "[ (13/4 → 43/12) ⇝ 29/8 | gain:0.021789864126373813 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5379.599518697443 cutoff:4000 ]", - "[ 3/1 ⇜ (10/3 → 27/8) | gain:0.026967531141465956 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5463.2923272018625 cutoff:4000 ]", - "[ 3/1 ⇜ (10/3 → 27/8) | gain:0.026967531141465956 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5463.2923272018625 cutoff:4000 ]", - "[ 27/8 → 7/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2493.5603089922215 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 27/8 → 7/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2493.5603089922215 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (27/8 → 11/3) ⇝ 15/4 | gain:0.02733603378769718 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5335.806273589214 cutoff:4000 ]", - "[ (27/8 → 11/3) ⇝ 15/4 | gain:0.02733603378769718 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5335.806273589214 cutoff:4000 ]", - "[ 25/8 ⇜ (41/12 → 7/2) | gain:0.0338929965297769 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5422.104580183649 cutoff:4000 ]", - "[ 25/8 ⇜ (41/12 → 7/2) | gain:0.0338929965297769 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5422.104580183649 cutoff:4000 ]", - "[ 7/2 → 29/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2519.1725829012184 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 7/2 → 29/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2519.1725829012184 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 7/2 → 15/4 | gain:0.034220278760810484 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5313.435927530719 cutoff:4000 ]", - "[ 7/2 → 15/4 | gain:0.034220278760810484 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5313.435927530719 cutoff:4000 ]", - "[ 7/2 → 15/4 | s:bd gain:0.7 ]", - "[ (7/2 → 23/6) ⇝ 31/8 | gain:0.017542573009485987 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5290.754858561636 cutoff:4000 ]", - "[ (7/2 → 23/6) ⇝ 31/8 | gain:0.017542573009485987 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5290.754858561636 cutoff:4000 ]", - "[ 7/2 → 4/1 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2556.604589043475 ]", - "[ 7/2 → 4/1 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2556.604589043475 ]", - "[ 7/2 → 4/1 | s:sn gain:0.7 ]", - "[ 13/4 ⇜ (43/12 → 29/8) | gain:0.021789864126373813 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5379.599518697443 cutoff:4000 ]", - "[ 13/4 ⇜ (43/12 → 29/8) | gain:0.021789864126373813 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5379.599518697443 cutoff:4000 ]", - "[ (29/8 → 47/12) ⇝ 4/1 | gain:0.02196788874761195 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5244.4761496042 cutoff:4000 ]", - "[ (29/8 → 47/12) ⇝ 4/1 | gain:0.02196788874761195 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5244.4761496042 cutoff:4000 ]", - "[ (29/8 → 4/1) ⇝ 33/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", - "[ (29/8 → 4/1) ⇝ 33/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", - "[ 27/8 ⇜ (11/3 → 15/4) | gain:0.02733603378769718 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5335.806273589214 cutoff:4000 ]", - "[ 27/8 ⇜ (11/3 → 15/4) | gain:0.02733603378769718 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5335.806273589214 cutoff:4000 ]", - "[ 15/4 → 31/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2568.811347023862 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 15/4 → 31/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2568.811347023862 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 15/4 → 4/1 | gain:0.027475374351507095 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5220.886439234386 cutoff:4000 ]", - "[ 15/4 → 4/1 | gain:0.027475374351507095 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5220.886439234386 cutoff:4000 ]", - "[ 15/4 → 4/1 | s:hh3 gain:0.7 ]", - "[ (15/4 → 4/1) ⇝ 33/8 | gain:0.01407215930427397 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", - "[ (15/4 → 4/1) ⇝ 33/8 | gain:0.01407215930427397 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", - "[ (15/4 → 4/1) ⇝ 17/4 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2604.594154601839 ]", - "[ (15/4 → 4/1) ⇝ 17/4 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2604.594154601839 ]", - "[ 7/2 ⇜ (23/6 → 31/8) | gain:0.017542573009485987 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5290.754858561636 cutoff:4000 ]", - "[ 7/2 ⇜ (23/6 → 31/8) | gain:0.017542573009485987 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5290.754858561636 cutoff:4000 ]", - "[ 31/8 → 4/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2592.8079367021132 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 31/8 → 4/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2592.8079367021132 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 31/8 → 4/1 | s:bd gain:0.7 ]", - "[ (31/8 → 4/1) ⇝ 17/4 | gain:0.01759019913034246 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", - "[ (31/8 → 4/1) ⇝ 17/4 | gain:0.01759019913034246 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", - "[ (31/8 → 4/1) ⇝ 35/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", - "[ (31/8 → 4/1) ⇝ 35/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", - "[ 29/8 ⇜ (47/12 → 4/1) | gain:0.02196788874761195 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5244.4761496042 cutoff:4000 ]", - "[ 29/8 ⇜ (47/12 → 4/1) | gain:0.02196788874761195 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5244.4761496042 cutoff:4000 ]", - "[ 15/4 ⇜ (4/1 → 49/12) ⇝ 33/8 | gain:0.01407215930427397 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", - "[ 15/4 ⇜ (4/1 → 49/12) ⇝ 33/8 | gain:0.01407215930427397 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", - "[ 29/8 ⇜ (4/1 → 33/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", - "[ 29/8 ⇜ (4/1 → 33/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2580.8797353950404 ]", - "[ 31/8 ⇜ (4/1 → 25/6) ⇝ 17/4 | gain:0.01759019913034246 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", - "[ 31/8 ⇜ (4/1 → 25/6) ⇝ 17/4 | gain:0.01759019913034246 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", - "[ 15/4 ⇜ (4/1 → 17/4) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2604.594154601839 ]", - "[ 15/4 ⇜ (4/1 → 17/4) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2604.594154601839 ]", - "[ 4/1 → 17/4 | gain:0.02198029948120568 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5123.62012082546 cutoff:4000 ]", - "[ 4/1 → 17/4 | gain:0.02198029948120568 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5123.62012082546 cutoff:4000 ]", - "[ 4/1 → 17/4 | s:bd gain:0.7 ]", - "[ (4/1 → 13/3) ⇝ 35/8 | gain:0.011247559038777319 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5098.597504951462 cutoff:4000 ]", - "[ (4/1 → 13/3) ⇝ 35/8 | gain:0.011247559038777319 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5098.597504951462 cutoff:4000 ]", - "[ 31/8 ⇜ (4/1 → 35/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", - "[ 31/8 ⇜ (4/1 → 35/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2627.7335619844803 ]", - "[ 15/4 ⇜ (49/12 → 33/8) | gain:0.01407215930427397 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", - "[ 15/4 ⇜ (49/12 → 33/8) | gain:0.01407215930427397 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5197.0018638323545 cutoff:4000 ]", - "[ 33/8 → 17/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2639.083266757757 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 33/8 → 17/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2639.083266757757 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (33/8 → 53/12) ⇝ 9/2 | gain:0.01403405840758879 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5047.734873274585 cutoff:4000 ]", - "[ (33/8 → 53/12) ⇝ 9/2 | gain:0.01403405840758879 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5047.734873274585 cutoff:4000 ]", - "[ 31/8 ⇜ (25/6 → 17/4) | gain:0.01759019913034246 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", - "[ 31/8 ⇜ (25/6 → 17/4) | gain:0.01759019913034246 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5148.3645377501725 cutoff:4000 ]", - "[ 17/4 → 9/2 | gain:0.01752078272553497 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5021.903572521802 cutoff:4000 ]", - "[ 17/4 → 9/2 | gain:0.01752078272553497 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5021.903572521802 cutoff:4000 ]", - "[ 17/4 → 9/2 | s:hh3 gain:0.7 ]", - "[ (17/4 → 55/12) ⇝ 37/8 | gain:0.008957471551552614 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4995.811501426648 cutoff:4000 ]", - "[ (17/4 → 55/12) ⇝ 37/8 | gain:0.008957471551552614 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4995.811501426648 cutoff:4000 ]", - "[ 4/1 ⇜ (13/3 → 35/8) | gain:0.011247559038777319 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5098.597504951462 cutoff:4000 ]", - "[ 4/1 ⇜ (13/3 → 35/8) | gain:0.011247559038777319 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5098.597504951462 cutoff:4000 ]", - "[ 35/8 → 9/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2682.97580859032 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 35/8 → 9/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2682.97580859032 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (35/8 → 14/3) ⇝ 19/4 | gain:0.011156410432703394 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4942.862975093085 cutoff:4000 ]", - "[ (35/8 → 14/3) ⇝ 19/4 | gain:0.011156410432703394 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4942.862975093085 cutoff:4000 ]", - "[ 33/8 ⇜ (53/12 → 9/2) | gain:0.01403405840758879 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5047.734873274585 cutoff:4000 ]", - "[ 33/8 ⇜ (53/12 → 9/2) | gain:0.01403405840758879 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:5047.734873274585 cutoff:4000 ]", - "[ 9/2 → 37/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2703.995258572327 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 9/2 → 37/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2703.995258572327 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 9/2 → 19/4 | gain:0.013915584104736941 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4916.015592312082 cutoff:4000 ]", - "[ 9/2 → 19/4 | gain:0.013915584104736941 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4916.015592312082 cutoff:4000 ]", - "[ 9/2 → 19/4 | s:bd gain:0.7 ]", - "[ (9/2 → 29/6) ⇝ 39/8 | gain:0.007107876545841471 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4888.925582549005 cutoff:4000 ]", - "[ (9/2 → 29/6) ⇝ 39/8 | gain:0.007107876545841471 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4888.925582549005 cutoff:4000 ]", - "[ 9/2 → 5/1 | s:sn gain:0.7 ]", - "[ 17/4 ⇜ (55/12 → 37/8) | gain:0.008957471551552614 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4995.811501426648 cutoff:4000 ]", - "[ 17/4 ⇜ (55/12 → 37/8) | gain:0.008957471551552614 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4995.811501426648 cutoff:4000 ]", - "[ (37/8 → 59/12) ⇝ 5/1 | gain:0.008836720604435567 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4834.036289789029 cutoff:4000 ]", - "[ (37/8 → 59/12) ⇝ 5/1 | gain:0.008836720604435567 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4834.036289789029 cutoff:4000 ]", - "[ 35/8 ⇜ (14/3 → 19/4) | gain:0.011156410432703394 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4942.862975093085 cutoff:4000 ]", - "[ 35/8 ⇜ (14/3 → 19/4) | gain:0.011156410432703394 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4942.862975093085 cutoff:4000 ]", - "[ 19/4 → 39/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2744.1172176410028 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 19/4 → 39/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2744.1172176410028 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 19/4 → 5/1 | gain:0.011012190825058119 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4806.246411789873 cutoff:4000 ]", - "[ 19/4 → 5/1 | gain:0.011012190825058119 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4806.246411789873 cutoff:4000 ]", - "[ 19/4 → 5/1 | s:hh3 gain:0.7 ]", - "[ (19/4 → 61/12) ⇝ 41/8 | gain:0.005619756192058716 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", - "[ (19/4 → 61/12) ⇝ 41/8 | gain:0.005619756192058716 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", - "[ 9/2 ⇜ (29/6 → 39/8) | gain:0.007107876545841471 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4888.925582549005 cutoff:4000 ]", - "[ 9/2 ⇜ (29/6 → 39/8) | gain:0.007107876545841471 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4888.925582549005 cutoff:4000 ]", - "[ 39/8 → 5/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2763.195558759784 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 39/8 → 5/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2763.195558759784 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (39/8 → 31/6) ⇝ 21/4 | gain:0.006973940456445439 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", - "[ (39/8 → 31/6) ⇝ 21/4 | gain:0.006973940456445439 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", - "[ 37/8 ⇜ (59/12 → 5/1) | gain:0.008836720604435567 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4834.036289789029 cutoff:4000 ]", - "[ 37/8 ⇜ (59/12 → 5/1) | gain:0.008836720604435567 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4834.036289789029 cutoff:4000 ]", - "[ 5/1 → 21/4 | gain:0.008682903916956372 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4692.8969006490215 cutoff:4000 ]", - "[ 5/1 → 21/4 | gain:0.008682903916956372 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4692.8969006490215 cutoff:4000 ]", - "[ 5/1 → 21/4 | s:bd gain:0.7 ]", - "[ (5/1 → 16/3) ⇝ 43/8 | gain:0.004427030019445723 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4664.036300812779 cutoff:4000 ]", - "[ (5/1 → 16/3) ⇝ 43/8 | gain:0.004427030019445723 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4664.036300812779 cutoff:4000 ]", - "[ 19/4 ⇜ (61/12 → 41/8) | gain:0.005619756192058716 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", - "[ 19/4 ⇜ (61/12 → 41/8) | gain:0.005619756192058716 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4778.23271519263 cutoff:4000 ]", - "[ 41/8 → 21/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2799.329510692108 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 41/8 → 21/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2799.329510692108 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (41/8 → 65/12) ⇝ 11/2 | gain:0.005483770957386215 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4605.721725547503 cutoff:4000 ]", - "[ (41/8 → 65/12) ⇝ 11/2 | gain:0.005483770957386215 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4605.721725547503 cutoff:4000 ]", - "[ 39/8 ⇜ (31/6 → 21/4) | gain:0.006973940456445439 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", - "[ 39/8 ⇜ (31/6 → 21/4) | gain:0.006973940456445439 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4721.553103742387 cutoff:4000 ]", - "[ 21/4 → 11/2 | gain:0.006821319376399847 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4576.2777420207385 cutoff:4000 ]", - "[ 21/4 → 11/2 | gain:0.006821319376399847 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4576.2777420207385 cutoff:4000 ]", - "[ 21/4 → 11/2 | s:hh3 gain:0.7 ]", - "[ (21/4 → 67/12) ⇝ 45/8 | gain:0.00347470282155788 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4546.64934384357 cutoff:4000 ]", - "[ (21/4 → 67/12) ⇝ 45/8 | gain:0.00347470282155788 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4546.64934384357 cutoff:4000 ]", - "[ 5/1 ⇜ (16/3 → 43/8) | gain:0.004427030019445723 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4664.036300812779 cutoff:4000 ]", - "[ 5/1 ⇜ (16/3 → 43/8) | gain:0.004427030019445723 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4664.036300812779 cutoff:4000 ]", - "[ 43/8 → 11/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2832.694627163799 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 43/8 → 11/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2832.694627163799 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (43/8 → 17/3) ⇝ 23/4 | gain:0.004296220430900771 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4486.859640960669 cutoff:4000 ]", - "[ (43/8 → 17/3) ⇝ 23/4 | gain:0.004296220430900771 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4486.859640960669 cutoff:4000 ]", - "[ 41/8 ⇜ (65/12 → 11/2) | gain:0.005483770957386215 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4605.721725547503 cutoff:4000 ]", - "[ 41/8 ⇜ (65/12 → 11/2) | gain:0.005483770957386215 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4605.721725547503 cutoff:4000 ]", - "[ 11/2 → 45/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2848.313487543853 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 11/2 → 45/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2848.313487543853 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 11/2 → 23/4 | gain:0.005339195768845559 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4456.708580912725 cutoff:4000 ]", - "[ 11/2 → 23/4 | gain:0.005339195768845559 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4456.708580912725 cutoff:4000 ]", - "[ 11/2 → 23/4 | s:bd gain:0.7 ]", - "[ (11/2 → 35/6) ⇝ 47/8 | gain:0.0027172198948820303 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4426.39359377459 cutoff:4000 ]", - "[ (11/2 → 35/6) ⇝ 47/8 | gain:0.0027172198948820303 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4426.39359377459 cutoff:4000 ]", - "[ 11/2 → 6/1 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2870.3855457166487 ]", - "[ 11/2 → 6/1 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2870.3855457166487 ]", - "[ 11/2 → 6/1 | s:sn gain:0.7 ]", - "[ 21/4 ⇜ (67/12 → 45/8) | gain:0.00347470282155788 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4546.64934384357 cutoff:4000 ]", - "[ 21/4 ⇜ (67/12 → 45/8) | gain:0.00347470282155788 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4546.64934384357 cutoff:4000 ]", - "[ (45/8 → 71/12) ⇝ 6/1 | gain:0.0033534458443527444 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4365.292642693734 cutoff:4000 ]", - "[ (45/8 → 71/12) ⇝ 6/1 | gain:0.0033534458443527444 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4365.292642693734 cutoff:4000 ]", - "[ (45/8 → 6/1) ⇝ 49/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", - "[ (45/8 → 6/1) ⇝ 49/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", - "[ 43/8 ⇜ (17/3 → 23/4) | gain:0.004296220430900771 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4486.859640960669 cutoff:4000 ]", - "[ 43/8 ⇜ (17/3 → 23/4) | gain:0.004296220430900771 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4486.859640960669 cutoff:4000 ]", - "[ 23/4 → 47/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2877.376777172205 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 23/4 → 47/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2877.376777172205 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 23/4 → 6/1 | gain:0.0041636914909436865 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4334.517148084427 cutoff:4000 ]", - "[ 23/4 → 6/1 | gain:0.0041636914909436865 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4334.517148084427 cutoff:4000 ]", - "[ 23/4 → 6/1 | s:hh3 gain:0.7 ]", - "[ (23/4 → 6/1) ⇝ 49/8 | gain:0.0021170195539929144 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", - "[ (23/4 → 6/1) ⇝ 49/8 | gain:0.0021170195539929144 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", - "[ (23/4 → 6/1) ⇝ 25/4 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", - "[ (23/4 → 6/1) ⇝ 25/4 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", - "[ 11/2 ⇜ (35/6 → 47/8) | gain:0.0027172198948820303 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4426.39359377459 cutoff:4000 ]", - "[ 11/2 ⇜ (35/6 → 47/8) | gain:0.0027172198948820303 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4426.39359377459 cutoff:4000 ]", - "[ 47/8 → 6/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2890.803699781578 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 47/8 → 6/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2890.803699781578 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (47/8 → 6/1) ⇝ 25/4 | gain:0.002607861084803616 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", - "[ (47/8 → 6/1) ⇝ 25/4 | gain:0.002607861084803616 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", - "[ (47/8 → 6/1) ⇝ 51/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", - "[ (47/8 → 6/1) ⇝ 51/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", - "[ 45/8 ⇜ (71/12 → 6/1) | gain:0.0033534458443527444 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4365.292642693734 cutoff:4000 ]", - "[ 45/8 ⇜ (71/12 → 6/1) | gain:0.0033534458443527444 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4365.292642693734 cutoff:4000 ]", - "[ 23/4 ⇜ (6/1 → 73/12) ⇝ 49/8 | gain:0.0021170195539929144 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", - "[ 23/4 ⇜ (6/1 → 73/12) ⇝ 49/8 | gain:0.0021170195539929144 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", - "[ 45/8 ⇜ (6/1 → 49/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", - "[ 45/8 ⇜ (6/1 → 49/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", - "[ 47/8 ⇜ (6/1 → 37/6) ⇝ 25/4 | gain:0.002607861084803616 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", - "[ 47/8 ⇜ (6/1 → 37/6) ⇝ 25/4 | gain:0.002607861084803616 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", - "[ 23/4 ⇜ (6/1 → 25/4) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", - "[ 23/4 ⇜ (6/1 → 25/4) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", - "[ 6/1 → 25/4 | gain:0.0032349487219990097 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4210.038361759807 cutoff:4000 ]", - "[ 6/1 → 25/4 | gain:0.0032349487219990097 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4210.038361759807 cutoff:4000 ]", - "[ 6/1 → 25/4 | s:bd gain:0.7 ]", - "[ (6/1 → 19/3) ⇝ 51/8 | gain:0.0016432698518802527 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4178.601124662687 cutoff:4000 ]", - "[ (6/1 → 19/3) ⇝ 51/8 | gain:0.0016432698518802527 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4178.601124662687 cutoff:4000 ]", - "[ 47/8 ⇜ (6/1 → 51/8) | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", - "[ 47/8 ⇜ (6/1 → 51/8) | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", - "[ 23/4 ⇜ (73/12 → 49/8) | gain:0.0021170195539929144 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", - "[ 23/4 ⇜ (73/12 → 49/8) | gain:0.0021170195539929144 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4303.598663257904 cutoff:4000 ]", - "[ 49/8 → 25/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2915.4076660819765 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 49/8 → 25/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2915.4076660819765 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (49/8 → 77/12) ⇝ 13/2 | gain:0.002020492471376867 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4115.383232572483 cutoff:4000 ]", - "[ (49/8 → 77/12) ⇝ 13/2 | gain:0.002020492471376867 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4115.383232572483 cutoff:4000 ]", - "[ 47/8 ⇜ (37/6 → 25/4) | gain:0.002607861084803616 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", - "[ 47/8 ⇜ (37/6 → 25/4) | gain:0.002607861084803616 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4241.3539374389275 cutoff:4000 ]", - "[ 25/4 → 13/2 | gain:0.0025039971642624803 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4083.6134096397636 cutoff:4000 ]", - "[ 25/4 → 13/2 | gain:0.0025039971642624803 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4083.6134096397636 cutoff:4000 ]", - "[ 25/4 → 13/2 | s:hh3 gain:0.7 ]", - "[ (25/4 → 79/12) ⇝ 53/8 | gain:0.0012707745730195417 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4051.743587553753 cutoff:4000 ]", - "[ (25/4 → 79/12) ⇝ 53/8 | gain:0.0012707745730195417 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4051.743587553753 cutoff:4000 ]", - "[ 6/1 ⇜ (19/3 → 51/8) | gain:0.0016432698518802527 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4178.601124662687 cutoff:4000 ]", - "[ 6/1 ⇜ (19/3 → 51/8) | gain:0.0016432698518802527 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4178.601124662687 cutoff:4000 ]", - "[ 51/8 → 13/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2936.9631544781614 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 51/8 → 13/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2936.9631544781614 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (51/8 → 20/3) ⇝ 27/4 | gain:0.0015595598450028928 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3987.7258050403216 cutoff:4000 ]", - "[ (51/8 → 20/3) ⇝ 27/4 | gain:0.0015595598450028928 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3987.7258050403216 cutoff:4000 ]", - "[ 49/8 ⇜ (77/12 → 13/2) | gain:0.002020492471376867 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4115.383232572483 cutoff:4000 ]", - "[ 49/8 ⇜ (77/12 → 13/2) | gain:0.002020492471376867 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4115.383232572483 cutoff:4000 ]", - "[ 13/2 → 53/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2946.5812012110136 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 13/2 → 53/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2946.5812012110136 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 13/2 → 27/4 | gain:0.001930948569883525 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3955.588813730369 cutoff:4000 ]", - "[ 13/2 → 27/4 | gain:0.001930948569883525 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3955.588813730369 cutoff:4000 ]", - "[ 13/2 → 27/4 | s:bd gain:0.7 ]", - "[ (13/2 → 41/6) ⇝ 55/8 | gain:0.0009790326438946302 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3923.373759622562 cutoff:4000 ]", - "[ (13/2 → 41/6) ⇝ 55/8 | gain:0.0009790326438946302 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3923.373759622562 cutoff:4000 ]", - "[ 13/2 → 7/1 | s:sn gain:0.7 ]", - "[ 25/4 ⇜ (79/12 → 53/8) | gain:0.0012707745730195417 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4051.743587553753 cutoff:4000 ]", - "[ 25/4 ⇜ (79/12 → 53/8) | gain:0.0012707745730195417 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:4051.743587553753 cutoff:4000 ]", - "[ (53/8 → 83/12) ⇝ 7/1 | gain:0.0011992608333914556 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3858.7315549779487 cutoff:4000 ]", - "[ (53/8 → 83/12) ⇝ 7/1 | gain:0.0011992608333914556 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3858.7315549779487 cutoff:4000 ]", - "[ 51/8 ⇜ (20/3 → 27/4) | gain:0.0015595598450028928 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3987.7258050403216 cutoff:4000 ]", - "[ 51/8 ⇜ (20/3 → 27/4) | gain:0.0015595598450028928 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3987.7258050403216 cutoff:4000 ]", - "[ 27/4 → 55/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2963.468935477506 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 27/4 → 55/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2963.468935477506 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 27/4 → 7/1 | gain:0.001483452397136718 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3826.315480550129 cutoff:4000 ]", - "[ 27/4 → 7/1 | gain:0.001483452397136718 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3826.315480550129 cutoff:4000 ]", - "[ 27/4 → 7/1 | s:hh3 gain:0.7 ]", - "[ (27/4 → 85/12) ⇝ 57/8 | gain:0.0007514349161098732 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", - "[ (27/4 → 85/12) ⇝ 57/8 | gain:0.0007514349161098732 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", - "[ 13/2 ⇜ (41/6 → 55/8) | gain:0.0009790326438946302 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3923.373759622562 cutoff:4000 ]", - "[ 13/2 ⇜ (41/6 → 55/8) | gain:0.0009790326438946302 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3923.373759622562 cutoff:4000 ]", - "[ 55/8 → 7/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2970.728450471497 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 55/8 → 7/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2970.728450471497 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (55/8 → 43/6) ⇝ 29/4 | gain:0.0009187360380160062 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", - "[ (55/8 → 43/6) ⇝ 29/4 | gain:0.0009187360380160062 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", - "[ 53/8 ⇜ (83/12 → 7/1) | gain:0.0011992608333914556 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3858.7315549779487 cutoff:4000 ]", - "[ 53/8 ⇜ (83/12 → 7/1) | gain:0.0011992608333914556 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3858.7315549779487 cutoff:4000 ]", - "[ 7/1 → 29/4 | gain:0.0011353833788233256 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3696.147739319613 cutoff:4000 ]", - "[ 7/1 → 29/4 | gain:0.0011353833788233256 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3696.147739319613 cutoff:4000 ]", - "[ 7/1 → 29/4 | s:bd gain:0.7 ]", - "[ (7/1 → 22/3) ⇝ 59/8 | gain:0.0005745826370722221 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3663.507823075358 cutoff:4000 ]", - "[ (7/1 → 22/3) ⇝ 59/8 | gain:0.0005745826370722221 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3663.507823075358 cutoff:4000 ]", - "[ 27/4 ⇜ (85/12 → 57/8) | gain:0.0007514349161098732 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", - "[ 27/4 ⇜ (85/12 → 57/8) | gain:0.0007514349161098732 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3793.8434936445938 cutoff:4000 ]", - "[ 57/8 → 29/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2982.856914513109 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 57/8 → 29/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2982.856914513109 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (57/8 → 89/12) ⇝ 15/2 | gain:0.0007011936914869215 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3598.149539397671 cutoff:4000 ]", - "[ (57/8 → 89/12) ⇝ 15/2 | gain:0.0007011936914869215 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3598.149539397671 cutoff:4000 ]", - "[ 55/8 ⇜ (43/6 → 29/4) | gain:0.0009187360380160062 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", - "[ 55/8 ⇜ (43/6 → 29/4) | gain:0.0009187360380160062 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3728.7540466585065 cutoff:4000 ]", - "[ 29/4 → 15/2 | gain:0.0008657330171865184 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3565.4423707696824 cutoff:4000 ]", - "[ 29/4 → 15/2 | gain:0.0008657330171865184 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3565.4423707696824 cutoff:4000 ]", - "[ 29/4 → 15/2 | s:hh3 gain:0.7 ]", - "[ (29/4 → 91/12) ⇝ 61/8 | gain:0.00043771267437304546 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3532.7239889283615 cutoff:4000 ]", - "[ (29/4 → 91/12) ⇝ 61/8 | gain:0.00043771267437304546 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3532.7239889283615 cutoff:4000 ]", - "[ 7/1 ⇜ (22/3 → 59/8) | gain:0.0005745826370722221 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3663.507823075358 cutoff:4000 ]", - "[ 7/1 ⇜ (22/3 → 59/8) | gain:0.0005745826370722221 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3663.507823075358 cutoff:4000 ]", - "[ 59/8 → 15/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2991.774409503181 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 59/8 → 15/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2991.774409503181 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (59/8 → 23/3) ⇝ 31/4 | gain:0.0005331735858040315 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3467.276011071639 cutoff:4000 ]", - "[ (59/8 → 23/3) ⇝ 31/4 | gain:0.0005331735858040315 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3467.276011071639 cutoff:4000 ]", - "[ 57/8 ⇜ (89/12 → 15/2) | gain:0.0007011936914869215 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3598.149539397671 cutoff:4000 ]", - "[ 57/8 ⇜ (89/12 → 15/2) | gain:0.0007011936914869215 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3598.149539397671 cutoff:4000 ]", - "[ 15/2 → 61/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2995.0220264467503 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 15/2 → 61/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2995.0220264467503 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 15/2 → 31/4 | gain:0.0006576787875353331 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3434.557629230318 cutoff:4000 ]", - "[ 15/2 → 31/4 | gain:0.0006576787875353331 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3434.557629230318 cutoff:4000 ]", - "[ 15/2 → 31/4 | s:bd gain:0.7 ]", - "[ (15/2 → 47/6) ⇝ 63/8 | gain:0.0003322155712311059 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3401.8504606023293 cutoff:4000 ]", - "[ (15/2 → 47/6) ⇝ 63/8 | gain:0.0003322155712311059 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3401.8504606023293 cutoff:4000 ]", - "[ 15/2 → 8/1 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2998.3738658769826 ]", - "[ 15/2 → 8/1 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2998.3738658769826 ]", - "[ 15/2 → 8/1 | s:sn gain:0.7 ]", - "[ 29/4 ⇜ (91/12 → 61/8) | gain:0.00043771267437304546 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3532.7239889283615 cutoff:4000 ]", - "[ 29/4 ⇜ (91/12 → 61/8) | gain:0.00043771267437304546 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3532.7239889283615 cutoff:4000 ]", - "[ (61/8 → 95/12) ⇝ 8/1 | gain:0.00040393160954279157 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3336.4921769246425 cutoff:4000 ]", - "[ (61/8 → 95/12) ⇝ 8/1 | gain:0.00040393160954279157 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3336.4921769246425 cutoff:4000 ]", - "[ (61/8 → 8/1) ⇝ 65/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ (61/8 → 8/1) ⇝ 65/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ 59/8 ⇜ (23/3 → 31/4) | gain:0.0005331735858040315 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3467.276011071639 cutoff:4000 ]", - "[ 59/8 ⇜ (23/3 → 31/4) | gain:0.0005331735858040315 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3467.276011071639 cutoff:4000 ]", - "[ 31/4 → 63/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.0852191942718 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 31/4 → 63/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.0852191942718 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 31/4 → 8/1 | gain:0.0004978069306625383 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3303.852260680389 cutoff:4000 ]", - "[ 31/4 → 8/1 | gain:0.0004978069306625383 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3303.852260680389 cutoff:4000 ]", - "[ 31/4 → 8/1 | s:hh3 gain:0.7 ]", - "[ (31/4 → 8/1) ⇝ 65/8 | gain:0.0002512336761852884 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", - "[ (31/4 → 8/1) ⇝ 65/8 | gain:0.0002512336761852884 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", - "[ (31/4 → 8/1) ⇝ 33/4 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:3000 ]", - "[ (31/4 → 8/1) ⇝ 33/4 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:3000 ]", - "[ 15/2 ⇜ (47/6 → 63/8) | gain:0.0003322155712311059 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3401.8504606023293 cutoff:4000 ]", - "[ 15/2 ⇜ (47/6 → 63/8) | gain:0.0003322155712311059 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3401.8504606023293 cutoff:4000 ]", - "[ 63/8 → 8/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.898347482845 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 63/8 → 8/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.898347482845 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 63/8 → 8/1 | s:bd gain:0.7 ]", - "[ (63/8 → 8/1) ⇝ 33/4 | gain:0.0003049279244110808 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", - "[ (63/8 → 8/1) ⇝ 33/4 | gain:0.0003049279244110808 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", - "[ (63/8 → 8/1) ⇝ 67/8 | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ (63/8 → 8/1) ⇝ 67/8 | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ 61/8 ⇜ (95/12 → 8/1) | gain:0.00040393160954279157 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3336.4921769246425 cutoff:4000 ]", - "[ 61/8 ⇜ (95/12 → 8/1) | gain:0.00040393160954279157 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3336.4921769246425 cutoff:4000 ]", - "[ 31/4 ⇜ (8/1 → 97/12) ⇝ 65/8 | gain:0.0002512336761852884 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", - "[ 31/4 ⇜ (8/1 → 97/12) ⇝ 65/8 | gain:0.0002512336761852884 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", - "[ 61/8 ⇜ (8/1 → 65/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ 61/8 ⇜ (8/1 → 65/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ 63/8 ⇜ (8/1 → 49/6) ⇝ 33/4 | gain:0.0003049279244110808 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", - "[ 63/8 ⇜ (8/1 → 49/6) ⇝ 33/4 | gain:0.0003049279244110808 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", - "[ 31/4 ⇜ (8/1 → 33/4) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:3000 ]", - "[ 31/4 ⇜ (8/1 → 33/4) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:3000 ]", - "[ 8/1 → 33/4 | gain:0.0003754669800233334 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3173.6845194498705 cutoff:4000 ]", - "[ 8/1 → 33/4 | gain:0.0003754669800233334 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3173.6845194498705 cutoff:4000 ]", - "[ 8/1 → 33/4 | s:bd gain:0.7 ]", - "[ (8/1 → 25/3) ⇝ 67/8 | gain:0.2389653154600499 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3141.2684450220513 cutoff:4000 ]", - "[ (8/1 → 25/3) ⇝ 67/8 | gain:0.2389653154600499 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3141.2684450220513 cutoff:4000 ]", - "[ 63/8 ⇜ (8/1 → 67/8) | gain:0.7 note:G3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ 63/8 ⇜ (8/1 → 67/8) | gain:0.7 note:B3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2999.5934052398757 ]", - "[ 31/4 ⇜ (97/12 → 65/8) | gain:0.0002512336761852884 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", - "[ 31/4 ⇜ (97/12 → 65/8) | gain:0.0002512336761852884 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3271.2459533414954 cutoff:4000 ]", - "[ 65/8 → 33/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.0852191942718 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 65/8 → 33/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2999.0852191942718 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (65/8 → 101/12) ⇝ 17/2 | gain:0.00022940355872926835 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3076.6262403774385 cutoff:4000 ]", - "[ (65/8 → 101/12) ⇝ 17/2 | gain:0.00022940355872926835 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3076.6262403774385 cutoff:4000 ]", - "[ 63/8 ⇜ (49/6 → 33/4) | gain:0.0003049279244110808 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", - "[ 63/8 ⇜ (49/6 → 33/4) | gain:0.0003049279244110808 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3206.156506355406 cutoff:4000 ]", - "[ 33/4 → 17/2 | gain:0.00028223848042460063 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3044.4111862696313 cutoff:4000 ]", - "[ 33/4 → 17/2 | gain:0.00028223848042460063 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3044.4111862696313 cutoff:4000 ]", - "[ 33/4 → 17/2 | s:hh3 gain:0.7 ]", - "[ (33/4 → 103/12) ⇝ 69/8 | gain:0.17948457334876392 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3012.274194959679 cutoff:4000 ]", - "[ (33/4 → 103/12) ⇝ 69/8 | gain:0.17948457334876392 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3012.274194959679 cutoff:4000 ]", - "[ 8/1 ⇜ (25/3 → 67/8) | gain:0.2389653154600499 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3141.2684450220513 cutoff:4000 ]", - "[ 8/1 ⇜ (25/3 → 67/8) | gain:0.2389653154600499 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3141.2684450220513 cutoff:4000 ]", - "[ 67/8 → 17/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2995.0220264467503 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 67/8 → 17/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2995.0220264467503 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (67/8 → 26/3) ⇝ 35/4 | gain:0.21713481397646955 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2948.256412446248 cutoff:4000 ]", - "[ (67/8 → 26/3) ⇝ 35/4 | gain:0.21713481397646955 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2948.256412446248 cutoff:4000 ]", - "[ 65/8 ⇜ (101/12 → 17/2) | gain:0.00022940355872926835 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3076.6262403774385 cutoff:4000 ]", - "[ 65/8 ⇜ (101/12 → 17/2) | gain:0.00022940355872926835 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3076.6262403774385 cutoff:4000 ]", - "[ 17/2 → 69/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2991.774409503181 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 17/2 → 69/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2991.774409503181 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 17/2 → 35/4 | gain:0.00021149262064247462 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2916.386590360237 cutoff:4000 ]", - "[ 17/2 → 35/4 | gain:0.00021149262064247462 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2916.386590360237 cutoff:4000 ]", - "[ 17/2 → 35/4 | s:bd gain:0.7 ]", - "[ (17/2 → 53/6) ⇝ 71/8 | gain:0.1343955752824098 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2884.6167674275184 cutoff:4000 ]", - "[ (17/2 → 53/6) ⇝ 71/8 | gain:0.1343955752824098 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2884.6167674275184 cutoff:4000 ]", - "[ 17/2 → 9/1 | s:sn gain:0.7 ]", - "[ 33/4 ⇜ (103/12 → 69/8) | gain:0.17948457334876392 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3012.274194959679 cutoff:4000 ]", - "[ 33/4 ⇜ (103/12 → 69/8) | gain:0.17948457334876392 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:3012.274194959679 cutoff:4000 ]", - "[ (69/8 → 107/12) ⇝ 9/1 | gain:0.16235819115213307 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2821.398875337315 cutoff:4000 ]", - "[ (69/8 → 107/12) ⇝ 9/1 | gain:0.16235819115213307 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2821.398875337315 cutoff:4000 ]", - "[ 67/8 ⇜ (26/3 → 35/4) | gain:0.21713481397646955 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2948.256412446248 cutoff:4000 ]", - "[ 67/8 ⇜ (26/3 → 35/4) | gain:0.21713481397646955 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2948.256412446248 cutoff:4000 ]", - "[ 35/4 → 71/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2982.856914513109 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 35/4 → 71/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2982.856914513109 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 35/4 → 9/1 | gain:0.19946652199116702 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2789.9616382401937 cutoff:4000 ]", - "[ 35/4 → 9/1 | gain:0.19946652199116702 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2789.9616382401937 cutoff:4000 ]", - "[ 35/4 → 9/1 | s:hh3 gain:0.7 ]", - "[ (35/4 → 109/12) ⇝ 73/8 | gain:0.10036006119411293 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", - "[ (35/4 → 109/12) ⇝ 73/8 | gain:0.10036006119411293 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", - "[ 17/2 ⇜ (53/6 → 71/8) | gain:0.1343955752824098 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2884.6167674275184 cutoff:4000 ]", - "[ 17/2 ⇜ (53/6 → 71/8) | gain:0.1343955752824098 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2884.6167674275184 cutoff:4000 ]", - "[ 71/8 → 9/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2977.1924080321423 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 71/8 → 9/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2977.1924080321423 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (71/8 → 55/6) ⇝ 37/4 | gain:0.12109683385552102 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", - "[ (71/8 → 55/6) ⇝ 37/4 | gain:0.12109683385552102 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", - "[ 69/8 ⇜ (107/12 → 9/1) | gain:0.16235819115213307 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2821.398875337315 cutoff:4000 ]", - "[ 69/8 ⇜ (107/12 → 9/1) | gain:0.16235819115213307 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2821.398875337315 cutoff:4000 ]", - "[ 9/1 → 37/4 | gain:0.1486933887883662 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2665.4828519155726 cutoff:4000 ]", - "[ 9/1 → 37/4 | gain:0.1486933887883662 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2665.4828519155726 cutoff:4000 ]", - "[ 9/1 → 37/4 | s:bd gain:0.7 ]", - "[ (9/1 → 28/3) ⇝ 75/8 | gain:0.07477587990602098 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2634.707357306267 cutoff:4000 ]", - "[ (9/1 → 28/3) ⇝ 75/8 | gain:0.07477587990602098 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2634.707357306267 cutoff:4000 ]", - "[ 35/4 ⇜ (109/12 → 73/8) | gain:0.10036006119411293 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", - "[ 35/4 ⇜ (109/12 → 73/8) | gain:0.10036006119411293 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2758.6460625610725 cutoff:4000 ]", - "[ 73/8 → 37/4 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2963.4689354775064 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 73/8 → 37/4 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2963.4689354775064 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (73/8 → 113/12) ⇝ 19/2 | gain:0.09014541883675263 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2573.60640622541 cutoff:4000 ]", - "[ (73/8 → 113/12) ⇝ 19/2 | gain:0.09014541883675263 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2573.60640622541 cutoff:4000 ]", - "[ 71/8 ⇜ (55/6 → 37/4) | gain:0.12109683385552102 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", - "[ 71/8 ⇜ (55/6 → 37/4) | gain:0.12109683385552102 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2696.4013367420957 cutoff:4000 ]", - "[ 37/4 → 19/2 | gain:0.11064613655745076 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2543.291419087276 cutoff:4000 ]", - "[ 37/4 → 19/2 | gain:0.11064613655745076 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2543.291419087276 cutoff:4000 ]", - "[ 37/4 → 19/2 | s:hh3 gain:0.7 ]", - "[ (37/4 → 115/12) ⇝ 77/8 | gain:0.05562379698730943 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2513.140359039332 cutoff:4000 ]", - "[ (37/4 → 115/12) ⇝ 77/8 | gain:0.05562379698730943 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2513.140359039332 cutoff:4000 ]", - "[ 9/1 ⇜ (28/3 → 75/8) | gain:0.07477587990602098 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2634.707357306267 cutoff:4000 ]", - "[ 9/1 ⇜ (28/3 → 75/8) | gain:0.07477587990602098 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2634.707357306267 cutoff:4000 ]", - "[ 75/8 → 19/2 | note:D2 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2946.5812012110136 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 75/8 → 19/2 | note:D2 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2946.5812012110136 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (75/8 → 29/3) ⇝ 39/4 | gain:0.0670223447192876 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2453.350656156431 cutoff:4000 ]", - "[ (75/8 → 29/3) ⇝ 39/4 | gain:0.0670223447192876 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2453.350656156431 cutoff:4000 ]", - "[ 73/8 ⇜ (113/12 → 19/2) | gain:0.09014541883675263 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2573.60640622541 cutoff:4000 ]", - "[ 73/8 ⇜ (113/12 → 19/2) | gain:0.09014541883675263 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2573.60640622541 cutoff:4000 ]", - "[ 19/2 → 77/8 | note:D1 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2936.9631544781614 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 19/2 → 77/8 | note:D1 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2936.9631544781614 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 19/2 → 39/4 | gain:0.08225029341498115 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2423.7222579792624 cutoff:4000 ]", - "[ 19/2 → 39/4 | gain:0.08225029341498115 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2423.7222579792624 cutoff:4000 ]", - "[ 19/2 → 39/4 | s:bd gain:0.7 ]", - "[ (19/2 → 59/6) ⇝ 79/8 | gain:0.04134410948782485 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2394.2782744524975 cutoff:4000 ]", - "[ (19/2 → 59/6) ⇝ 79/8 | gain:0.04134410948782485 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2394.2782744524975 cutoff:4000 ]", - "[ 19/2 → 10/1 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2921.0844879970778 ]", - "[ 19/2 → 10/1 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2921.0844879970778 ]", - "[ 19/2 → 10/1 | s:sn gain:0.7 ]", - "[ 37/4 ⇜ (115/12 → 77/8) | gain:0.05562379698730943 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2513.140359039332 cutoff:4000 ]", - "[ 37/4 ⇜ (115/12 → 77/8) | gain:0.05562379698730943 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2513.140359039332 cutoff:4000 ]", - "[ (77/8 → 119/12) ⇝ 10/1 | gain:0.04981524842313599 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2335.9636991872226 cutoff:4000 ]", - "[ (77/8 → 119/12) ⇝ 10/1 | gain:0.04981524842313599 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2335.9636991872226 cutoff:4000 ]", - "[ (77/8 → 10/1) ⇝ 81/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", - "[ (77/8 → 10/1) ⇝ 81/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2909.5402784268977 ]", - "[ 75/8 ⇜ (29/3 → 39/4) | gain:0.0670223447192876 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2453.350656156431 cutoff:4000 ]", - "[ 75/8 ⇜ (29/3 → 39/4) | gain:0.0670223447192876 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2453.350656156431 cutoff:4000 ]", - "[ 39/4 → 79/8 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2915.4076660819765 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 39/4 → 79/8 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2915.4076660819765 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 39/4 → 10/1 | gain:0.0611394178141992 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2307.1030993509794 cutoff:4000 ]", - "[ 39/4 → 10/1 | gain:0.0611394178141992 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2307.1030993509794 cutoff:4000 ]", - "[ 39/4 → 10/1 | s:hh3 gain:0.7 ]", - "[ (39/4 → 10/1) ⇝ 81/8 | gain:0.030737730012853577 note:C#6 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2278.446896257612 cutoff:4000 ]", - "[ (39/4 → 10/1) ⇝ 81/8 | gain:0.030737730012853577 note:E5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2278.446896257612 cutoff:4000 ]", - "[ (39/4 → 10/1) ⇝ 41/4 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", - "[ (39/4 → 10/1) ⇝ 41/4 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2897.237368890237 ]", - "[ 19/2 ⇜ (59/6 → 79/8) | gain:0.04134410948782485 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2394.2782744524975 cutoff:4000 ]", - "[ 19/2 ⇜ (59/6 → 79/8) | gain:0.04134410948782485 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2394.2782744524975 cutoff:4000 ]", - "[ 79/8 → 10/1 | note:D3 s:sawtooth gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2903.483208638841 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ 79/8 → 10/1 | note:D3 s:square gain:0.3 attack:0.01 decay:0.1 sustain:0.5 cutoff:2903.483208638841 lpattack:0.1 lpenv:2 ftype:24db ]", - "[ (79/8 → 10/1) ⇝ 41/4 | gain:0.03705744590301562 note:A5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2221.7672848073694 cutoff:4000 ]", - "[ (79/8 → 10/1) ⇝ 41/4 | gain:0.03705744590301562 note:C#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2221.7672848073694 cutoff:4000 ]", - "[ (79/8 → 10/1) ⇝ 83/8 | gain:0.7 note:F#3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", - "[ (79/8 → 10/1) ⇝ 83/8 | gain:0.7 note:A3 s:square attack:0.01 decay:0.1 sustain:0 cutoff:2884.183170199766 ]", - "[ 77/8 ⇜ (119/12 → 10/1) | gain:0.04981524842313599 note:F#5 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2335.9636991872226 cutoff:4000 ]", - "[ 77/8 ⇜ (119/12 → 10/1) | gain:0.04981524842313599 note:A4 s:sawtooth attack:0.001 decay:0.2 sustain:0 hcutoff:2335.9636991872226 cutoff:4000 ]", -] -`; - exports[`renders tunes > tune: juxUndTollerei 1`] = ` [ "[ 0/1 → 1/4 | note:c3 s:sawtooth pan:0 cutoff:1188.2154262966046 lpattack:0.2 lpenv:-2 decay:0.05 sustain:0 room:0.6 delay:0.5 delaytime:0.1 delayfeedback:0.4 ]", diff --git a/test/runtime.mjs b/test/runtime.mjs index 946c2759..f14e18e2 100644 --- a/test/runtime.mjs +++ b/test/runtime.mjs @@ -222,7 +222,6 @@ export const testCycles = { randomBells: 24, waa: 16, waar: 16, - hyperpop: 10, festivalOfFingers3: 16, }; diff --git a/website/astro.config.mjs b/website/astro.config.mjs index 591f9a5e..6389debb 100644 --- a/website/astro.config.mjs +++ b/website/astro.config.mjs @@ -97,7 +97,7 @@ export default defineConfig({ enabled: false, }, manifest: { - includeAssets: ['favicon.ico', 'icons/apple-icon-180.png', 'favicon.svg'], + includeAssets: ['favicon.ico', 'icons/apple-icon-180.png'], name: 'Strudel REPL', short_name: 'Strudel', description: diff --git a/website/package.json b/website/package.json index 7af9e61e..b7abacf0 100644 --- a/website/package.json +++ b/website/package.json @@ -33,7 +33,6 @@ "@strudel/midi": "workspace:*", "@strudel/mini": "workspace:*", "@strudel/osc": "workspace:*", - "@strudel/repl": "workspace:*", "@strudel/serial": "workspace:*", "@strudel/soundfonts": "workspace:*", "@strudel/tonal": "workspace:*", @@ -48,7 +47,6 @@ "@types/react": "^18.2.46", "@types/react-dom": "^18.2.18", "astro": "^4.0.8", - "canvas": "^2.11.2", "claviature": "^0.1.0", "date-fns": "^3.2.0", "nanoid": "^5.0.4", diff --git a/website/public/EmuSP12.json b/website/public/EmuSP12.json index 69746bed..b129ee57 100644 --- a/website/public/EmuSP12.json +++ b/website/public/EmuSP12.json @@ -1,16 +1,17 @@ { -"bd": ["bd/Bassdrum-01.wav","bd/Bassdrum-02.wav","bd/Bassdrum-03.wav","bd/Bassdrum-04.wav","bd/Bassdrum-05.wav","bd/Bassdrum-06.wav","bd/Bassdrum-07.wav","bd/Bassdrum-08.wav","bd/Bassdrum-09.wav","bd/Bassdrum-10.wav","bd/Bassdrum-11.wav","bd/Bassdrum-12.wav","bd/Bassdrum-13.wav","bd/Bassdrum-14.wav"], -"cb": ["cb/Cowbell.wav"], -"cp": ["cp/Clap.wav"], -"cr": ["cr/Crash.wav"], -"hh": ["hh/Hat Closed-01.wav","hh/Hat Closed-02.wav"], -"ht": ["ht/Tom H-01.wav","ht/Tom H-02.wav","ht/Tom H-03.wav","ht/Tom H-04.wav","ht/Tom H-05.wav","ht/Tom H-06.wav"], -"lt": ["lt/Tom L-01.wav","lt/Tom L-02.wav","lt/Tom L-03.wav","lt/Tom L-04.wav","lt/Tom L-05.wav","lt/Tom L-06.wav"], -"misc": ["misc/Metal-01.wav","misc/Metal-02.wav","misc/Metal-03.wav","misc/Scratch.wav","misc/Shot-01.wav","misc/Shot-02.wav","misc/Shot-03.wav"], -"mt": ["mt/Tom M-01.wav","mt/Tom M-02.wav","mt/Tom M-03.wav","mt/Tom M-05.wav"], -"oh": ["oh/Hhopen1.wav"], -"perc": ["perc/Blow1.wav"], -"rd": ["rd/Ride.wav"], -"rim": ["rim/zRim Shot-01.wav","rim/zRim Shot-02.wav"], -"sd": ["sd/Snaredrum-01.wav","sd/Snaredrum-02.wav","sd/Snaredrum-03.wav","sd/Snaredrum-04.wav","sd/Snaredrum-05.wav","sd/Snaredrum-06.wav","sd/Snaredrum-07.wav","sd/Snaredrum-08.wav","sd/Snaredrum-09.wav","sd/Snaredrum-10.wav","sd/Snaredrum-11.wav","sd/Snaredrum-12.wav","sd/Snaredrum-13.wav","sd/Snaredrum-14.wav","sd/Snaredrum-15.wav","sd/Snaredrum-16.wav","sd/Snaredrum-17.wav","sd/Snaredrum-18.wav","sd/Snaredrum-19.wav","sd/Snaredrum-20.wav","sd/Snaredrum-21.wav"] +"_base": "https://raw.githubusercontent.com/ritchse/tidal-drum-machines/main/machines/EmuSP12/", +"bd": ["emusp12-bd/Bassdrum-01.wav","emusp12-bd/Bassdrum-02.wav","emusp12-bd/Bassdrum-03.wav","emusp12-bd/Bassdrum-04.wav","emusp12-bd/Bassdrum-05.wav","emusp12-bd/Bassdrum-06.wav","emusp12-bd/Bassdrum-07.wav","emusp12-bd/Bassdrum-08.wav","emusp12-bd/Bassdrum-09.wav","emusp12-bd/Bassdrum-10.wav","emusp12-bd/Bassdrum-11.wav","emusp12-bd/Bassdrum-12.wav","emusp12-bd/Bassdrum-13.wav","emusp12-bd/Bassdrum-14.wav"], +"cb": ["emusp12-cb/Cowbell.wav"], +"cp": ["emusp12-cp/Clap.wav"], +"cr": ["emusp12-cr/Crash.wav"], +"hh": ["emusp12-hh/Hat Closed-01.wav","emusp12-hh/Hat Closed-02.wav"], +"ht": ["emusp12-ht/Tom H-01.wav","emusp12-ht/Tom H-02.wav","emusp12-ht/Tom H-03.wav","emusp12-ht/Tom H-04.wav","emusp12-ht/Tom H-05.wav","emusp12-ht/Tom H-06.wav"], +"lt": ["emusp12-lt/Tom L-01.wav","emusp12-lt/Tom L-02.wav","emusp12-lt/Tom L-03.wav","emusp12-lt/Tom L-04.wav","emusp12-lt/Tom L-05.wav","emusp12-lt/Tom L-06.wav"], +"misc": ["emusp12-misc/Metal-01.wav","emusp12-misc/Metal-02.wav","emusp12-misc/Metal-03.wav","emusp12-misc/Scratch.wav","emusp12-misc/Shot-01.wav","emusp12-misc/Shot-02.wav","emusp12-misc/Shot-03.wav"], +"mt": ["emusp12-mt/Tom M-01.wav","emusp12-mt/Tom M-02.wav","emusp12-mt/Tom M-03.wav","emusp12-mt/Tom M-05.wav"], +"oh": ["emusp12-oh/Hhopen1.wav"], +"perc": ["emusp12-perc/Blow1.wav"], +"rd": ["emusp12-rd/Ride.wav"], +"rim": ["emusp12-rim/zRim Shot-01.wav","emusp12-rim/zRim Shot-02.wav"], +"sd": ["emusp12-sd/Snaredrum-01.wav","emusp12-sd/Snaredrum-02.wav","emusp12-sd/Snaredrum-03.wav","emusp12-sd/Snaredrum-04.wav","emusp12-sd/Snaredrum-05.wav","emusp12-sd/Snaredrum-06.wav","emusp12-sd/Snaredrum-07.wav","emusp12-sd/Snaredrum-08.wav","emusp12-sd/Snaredrum-09.wav","emusp12-sd/Snaredrum-10.wav","emusp12-sd/Snaredrum-11.wav","emusp12-sd/Snaredrum-12.wav","emusp12-sd/Snaredrum-13.wav","emusp12-sd/Snaredrum-14.wav","emusp12-sd/Snaredrum-15.wav","emusp12-sd/Snaredrum-16.wav","emusp12-sd/Snaredrum-17.wav","emusp12-sd/Snaredrum-18.wav","emusp12-sd/Snaredrum-19.wav","emusp12-sd/Snaredrum-20.wav","emusp12-sd/Snaredrum-21.wav"] } diff --git a/website/public/EmuSP12/bd/Bassdrum-01.wav b/website/public/EmuSP12/bd/Bassdrum-01.wav deleted file mode 100644 index 48e93676..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-01.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-02.wav b/website/public/EmuSP12/bd/Bassdrum-02.wav deleted file mode 100644 index 52cd0afc..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-02.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-03.wav b/website/public/EmuSP12/bd/Bassdrum-03.wav deleted file mode 100644 index 5c524ad7..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-03.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-04.wav b/website/public/EmuSP12/bd/Bassdrum-04.wav deleted file mode 100644 index 9f9365d4..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-04.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-05.wav b/website/public/EmuSP12/bd/Bassdrum-05.wav deleted file mode 100644 index a4c80945..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-05.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-06.wav b/website/public/EmuSP12/bd/Bassdrum-06.wav deleted file mode 100644 index 283d2f76..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-06.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-07.wav b/website/public/EmuSP12/bd/Bassdrum-07.wav deleted file mode 100644 index 24f26186..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-07.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-08.wav b/website/public/EmuSP12/bd/Bassdrum-08.wav deleted file mode 100644 index 51661252..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-08.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-09.wav b/website/public/EmuSP12/bd/Bassdrum-09.wav deleted file mode 100644 index 3c6487c3..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-09.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-10.wav b/website/public/EmuSP12/bd/Bassdrum-10.wav deleted file mode 100644 index 34a9b924..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-10.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-11.wav b/website/public/EmuSP12/bd/Bassdrum-11.wav deleted file mode 100644 index 256555c2..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-11.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-12.wav b/website/public/EmuSP12/bd/Bassdrum-12.wav deleted file mode 100644 index 8c29f046..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-12.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-13.wav b/website/public/EmuSP12/bd/Bassdrum-13.wav deleted file mode 100644 index a0291102..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-13.wav and /dev/null differ diff --git a/website/public/EmuSP12/bd/Bassdrum-14.wav b/website/public/EmuSP12/bd/Bassdrum-14.wav deleted file mode 100644 index eecea2f1..00000000 Binary files a/website/public/EmuSP12/bd/Bassdrum-14.wav and /dev/null differ diff --git a/website/public/EmuSP12/cb/Cowbell.wav b/website/public/EmuSP12/cb/Cowbell.wav deleted file mode 100644 index 470763c6..00000000 Binary files a/website/public/EmuSP12/cb/Cowbell.wav and /dev/null differ diff --git a/website/public/EmuSP12/cp/Clap.wav b/website/public/EmuSP12/cp/Clap.wav deleted file mode 100644 index 27517d79..00000000 Binary files a/website/public/EmuSP12/cp/Clap.wav and /dev/null differ diff --git a/website/public/EmuSP12/cr/Crash.wav b/website/public/EmuSP12/cr/Crash.wav deleted file mode 100644 index 6d1e2939..00000000 Binary files a/website/public/EmuSP12/cr/Crash.wav and /dev/null differ diff --git a/website/public/EmuSP12/hh/Hat Closed-01.wav b/website/public/EmuSP12/hh/Hat Closed-01.wav deleted file mode 100644 index 1f18ccac..00000000 Binary files a/website/public/EmuSP12/hh/Hat Closed-01.wav and /dev/null differ diff --git a/website/public/EmuSP12/hh/Hat Closed-02.wav b/website/public/EmuSP12/hh/Hat Closed-02.wav deleted file mode 100644 index cc40c03f..00000000 Binary files a/website/public/EmuSP12/hh/Hat Closed-02.wav and /dev/null differ diff --git a/website/public/EmuSP12/ht/Tom H-01.wav b/website/public/EmuSP12/ht/Tom H-01.wav deleted file mode 100644 index 82706785..00000000 Binary files a/website/public/EmuSP12/ht/Tom H-01.wav and /dev/null differ diff --git a/website/public/EmuSP12/ht/Tom H-02.wav b/website/public/EmuSP12/ht/Tom H-02.wav deleted file mode 100644 index 9cfe221c..00000000 Binary files a/website/public/EmuSP12/ht/Tom H-02.wav and /dev/null differ diff --git a/website/public/EmuSP12/ht/Tom H-03.wav b/website/public/EmuSP12/ht/Tom H-03.wav deleted file mode 100644 index a6eef5cd..00000000 Binary files a/website/public/EmuSP12/ht/Tom H-03.wav and /dev/null differ diff --git a/website/public/EmuSP12/ht/Tom H-04.wav b/website/public/EmuSP12/ht/Tom H-04.wav deleted file mode 100644 index 8c38b3b1..00000000 Binary files a/website/public/EmuSP12/ht/Tom H-04.wav and /dev/null differ diff --git a/website/public/EmuSP12/ht/Tom H-05.wav b/website/public/EmuSP12/ht/Tom H-05.wav deleted file mode 100644 index 2e0899d2..00000000 Binary files a/website/public/EmuSP12/ht/Tom H-05.wav and /dev/null differ diff --git a/website/public/EmuSP12/ht/Tom H-06.wav b/website/public/EmuSP12/ht/Tom H-06.wav deleted file mode 100644 index 9dccec23..00000000 Binary files a/website/public/EmuSP12/ht/Tom H-06.wav and /dev/null differ diff --git a/website/public/EmuSP12/lt/Tom L-01.wav b/website/public/EmuSP12/lt/Tom L-01.wav deleted file mode 100644 index cfa4067f..00000000 Binary files a/website/public/EmuSP12/lt/Tom L-01.wav and /dev/null differ diff --git a/website/public/EmuSP12/lt/Tom L-02.wav b/website/public/EmuSP12/lt/Tom L-02.wav deleted file mode 100644 index 68624f5f..00000000 Binary files a/website/public/EmuSP12/lt/Tom L-02.wav and /dev/null differ diff --git a/website/public/EmuSP12/lt/Tom L-03.wav b/website/public/EmuSP12/lt/Tom L-03.wav deleted file mode 100644 index f1439d8c..00000000 Binary files a/website/public/EmuSP12/lt/Tom L-03.wav and /dev/null differ diff --git a/website/public/EmuSP12/lt/Tom L-04.wav b/website/public/EmuSP12/lt/Tom L-04.wav deleted file mode 100644 index 46d614a0..00000000 Binary files a/website/public/EmuSP12/lt/Tom L-04.wav and /dev/null differ diff --git a/website/public/EmuSP12/lt/Tom L-05.wav b/website/public/EmuSP12/lt/Tom L-05.wav deleted file mode 100644 index c9566585..00000000 Binary files a/website/public/EmuSP12/lt/Tom L-05.wav and /dev/null differ diff --git a/website/public/EmuSP12/lt/Tom L-06.wav b/website/public/EmuSP12/lt/Tom L-06.wav deleted file mode 100644 index c1edf374..00000000 Binary files a/website/public/EmuSP12/lt/Tom L-06.wav and /dev/null differ diff --git a/website/public/EmuSP12/misc/Metal-01.wav b/website/public/EmuSP12/misc/Metal-01.wav deleted file mode 100644 index 0f306e70..00000000 Binary files a/website/public/EmuSP12/misc/Metal-01.wav and /dev/null differ diff --git a/website/public/EmuSP12/misc/Metal-02.wav b/website/public/EmuSP12/misc/Metal-02.wav deleted file mode 100644 index 8a05af0e..00000000 Binary files a/website/public/EmuSP12/misc/Metal-02.wav and /dev/null differ diff --git a/website/public/EmuSP12/misc/Metal-03.wav b/website/public/EmuSP12/misc/Metal-03.wav deleted file mode 100644 index 0ae2ba80..00000000 Binary files a/website/public/EmuSP12/misc/Metal-03.wav and /dev/null differ diff --git a/website/public/EmuSP12/misc/Scratch.wav b/website/public/EmuSP12/misc/Scratch.wav deleted file mode 100644 index 11bde1a5..00000000 Binary files a/website/public/EmuSP12/misc/Scratch.wav and /dev/null differ diff --git a/website/public/EmuSP12/misc/Shot-01.wav b/website/public/EmuSP12/misc/Shot-01.wav deleted file mode 100644 index e4ecfef3..00000000 Binary files a/website/public/EmuSP12/misc/Shot-01.wav and /dev/null differ diff --git a/website/public/EmuSP12/misc/Shot-02.wav b/website/public/EmuSP12/misc/Shot-02.wav deleted file mode 100644 index 80f67cb2..00000000 Binary files a/website/public/EmuSP12/misc/Shot-02.wav and /dev/null differ diff --git a/website/public/EmuSP12/misc/Shot-03.wav b/website/public/EmuSP12/misc/Shot-03.wav deleted file mode 100644 index 0cc84c28..00000000 Binary files a/website/public/EmuSP12/misc/Shot-03.wav and /dev/null differ diff --git a/website/public/EmuSP12/mt/Tom M-01.wav b/website/public/EmuSP12/mt/Tom M-01.wav deleted file mode 100644 index a650caf5..00000000 Binary files a/website/public/EmuSP12/mt/Tom M-01.wav and /dev/null differ diff --git a/website/public/EmuSP12/mt/Tom M-02.wav b/website/public/EmuSP12/mt/Tom M-02.wav deleted file mode 100644 index cbd7d16c..00000000 Binary files a/website/public/EmuSP12/mt/Tom M-02.wav and /dev/null differ diff --git a/website/public/EmuSP12/mt/Tom M-03.wav b/website/public/EmuSP12/mt/Tom M-03.wav deleted file mode 100644 index e5c4b133..00000000 Binary files a/website/public/EmuSP12/mt/Tom M-03.wav and /dev/null differ diff --git a/website/public/EmuSP12/mt/Tom M-05.wav b/website/public/EmuSP12/mt/Tom M-05.wav deleted file mode 100644 index 841cac02..00000000 Binary files a/website/public/EmuSP12/mt/Tom M-05.wav and /dev/null differ diff --git a/website/public/EmuSP12/oh/Hhopen1.wav b/website/public/EmuSP12/oh/Hhopen1.wav deleted file mode 100644 index 73811991..00000000 Binary files a/website/public/EmuSP12/oh/Hhopen1.wav and /dev/null differ diff --git a/website/public/EmuSP12/perc/Blow1.wav b/website/public/EmuSP12/perc/Blow1.wav deleted file mode 100644 index 8021d0d1..00000000 Binary files a/website/public/EmuSP12/perc/Blow1.wav and /dev/null differ diff --git a/website/public/EmuSP12/rd/Ride.wav b/website/public/EmuSP12/rd/Ride.wav deleted file mode 100644 index da0e33eb..00000000 Binary files a/website/public/EmuSP12/rd/Ride.wav and /dev/null differ diff --git a/website/public/EmuSP12/rim/zRim Shot-01.wav b/website/public/EmuSP12/rim/zRim Shot-01.wav deleted file mode 100644 index 98088cf2..00000000 Binary files a/website/public/EmuSP12/rim/zRim Shot-01.wav and /dev/null differ diff --git a/website/public/EmuSP12/rim/zRim Shot-02.wav b/website/public/EmuSP12/rim/zRim Shot-02.wav deleted file mode 100644 index c0f1a12d..00000000 Binary files a/website/public/EmuSP12/rim/zRim Shot-02.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-01.wav b/website/public/EmuSP12/sd/Snaredrum-01.wav deleted file mode 100644 index 008bbf1d..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-01.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-02.wav b/website/public/EmuSP12/sd/Snaredrum-02.wav deleted file mode 100644 index 4711ff70..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-02.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-03.wav b/website/public/EmuSP12/sd/Snaredrum-03.wav deleted file mode 100644 index 643cf237..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-03.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-04.wav b/website/public/EmuSP12/sd/Snaredrum-04.wav deleted file mode 100644 index bb8c4c34..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-04.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-05.wav b/website/public/EmuSP12/sd/Snaredrum-05.wav deleted file mode 100644 index 678db12e..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-05.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-06.wav b/website/public/EmuSP12/sd/Snaredrum-06.wav deleted file mode 100644 index a89a1d60..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-06.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-07.wav b/website/public/EmuSP12/sd/Snaredrum-07.wav deleted file mode 100644 index fdc1fb03..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-07.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-08.wav b/website/public/EmuSP12/sd/Snaredrum-08.wav deleted file mode 100644 index 324eafac..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-08.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-09.wav b/website/public/EmuSP12/sd/Snaredrum-09.wav deleted file mode 100644 index 35b617d7..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-09.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-10.wav b/website/public/EmuSP12/sd/Snaredrum-10.wav deleted file mode 100644 index 85d13e91..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-10.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-11.wav b/website/public/EmuSP12/sd/Snaredrum-11.wav deleted file mode 100644 index d296fea5..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-11.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-12.wav b/website/public/EmuSP12/sd/Snaredrum-12.wav deleted file mode 100644 index b4fc9ca4..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-12.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-13.wav b/website/public/EmuSP12/sd/Snaredrum-13.wav deleted file mode 100644 index fbe745f9..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-13.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-14.wav b/website/public/EmuSP12/sd/Snaredrum-14.wav deleted file mode 100644 index fd321482..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-14.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-15.wav b/website/public/EmuSP12/sd/Snaredrum-15.wav deleted file mode 100644 index 703a23cd..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-15.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-16.wav b/website/public/EmuSP12/sd/Snaredrum-16.wav deleted file mode 100644 index ef6c1f9c..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-16.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-17.wav b/website/public/EmuSP12/sd/Snaredrum-17.wav deleted file mode 100644 index df7e282e..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-17.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-18.wav b/website/public/EmuSP12/sd/Snaredrum-18.wav deleted file mode 100644 index 0950c300..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-18.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-19.wav b/website/public/EmuSP12/sd/Snaredrum-19.wav deleted file mode 100644 index 46b8e0d8..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-19.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-20.wav b/website/public/EmuSP12/sd/Snaredrum-20.wav deleted file mode 100644 index 4c211a7c..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-20.wav and /dev/null differ diff --git a/website/public/EmuSP12/sd/Snaredrum-21.wav b/website/public/EmuSP12/sd/Snaredrum-21.wav deleted file mode 100644 index 246ea401..00000000 Binary files a/website/public/EmuSP12/sd/Snaredrum-21.wav and /dev/null differ diff --git a/website/public/default-og-image.png b/website/public/default-og-image.png deleted file mode 100644 index 97903207..00000000 Binary files a/website/public/default-og-image.png and /dev/null differ diff --git a/website/public/favicon.svg b/website/public/favicon.svg deleted file mode 100644 index 0f390629..00000000 --- a/website/public/favicon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - diff --git a/website/public/piano.json b/website/public/piano.json index 5f0c62c3..63d4a332 100644 --- a/website/public/piano.json +++ b/website/public/piano.json @@ -1,4 +1,5 @@ { + "_base": "https://raw.githubusercontent.com/felixroos/dough-samples/main/piano/", "piano": { "A0": "A0v8.mp3", "C1": "C1v8.mp3", diff --git a/website/public/piano/A0v8.mp3 b/website/public/piano/A0v8.mp3 deleted file mode 100644 index a70ced60..00000000 Binary files a/website/public/piano/A0v8.mp3 and /dev/null differ diff --git a/website/public/piano/A1v8.mp3 b/website/public/piano/A1v8.mp3 deleted file mode 100644 index 4c77113d..00000000 Binary files a/website/public/piano/A1v8.mp3 and /dev/null differ diff --git a/website/public/piano/A2v8.mp3 b/website/public/piano/A2v8.mp3 deleted file mode 100644 index a336ba9a..00000000 Binary files a/website/public/piano/A2v8.mp3 and /dev/null differ diff --git a/website/public/piano/A3v8.mp3 b/website/public/piano/A3v8.mp3 deleted file mode 100644 index cdbf3e9a..00000000 Binary files a/website/public/piano/A3v8.mp3 and /dev/null differ diff --git a/website/public/piano/A4v8.mp3 b/website/public/piano/A4v8.mp3 deleted file mode 100644 index 374a9a85..00000000 Binary files a/website/public/piano/A4v8.mp3 and /dev/null differ diff --git a/website/public/piano/A5v8.mp3 b/website/public/piano/A5v8.mp3 deleted file mode 100644 index 66a90365..00000000 Binary files a/website/public/piano/A5v8.mp3 and /dev/null differ diff --git a/website/public/piano/A6v8.mp3 b/website/public/piano/A6v8.mp3 deleted file mode 100644 index 4caee72b..00000000 Binary files a/website/public/piano/A6v8.mp3 and /dev/null differ diff --git a/website/public/piano/A7v8.mp3 b/website/public/piano/A7v8.mp3 deleted file mode 100644 index 64d32b4a..00000000 Binary files a/website/public/piano/A7v8.mp3 and /dev/null differ diff --git a/website/public/piano/C1v8.mp3 b/website/public/piano/C1v8.mp3 deleted file mode 100644 index d6e17a6f..00000000 Binary files a/website/public/piano/C1v8.mp3 and /dev/null differ diff --git a/website/public/piano/C2v8.mp3 b/website/public/piano/C2v8.mp3 deleted file mode 100644 index 8ed32f55..00000000 Binary files a/website/public/piano/C2v8.mp3 and /dev/null differ diff --git a/website/public/piano/C3v8.mp3 b/website/public/piano/C3v8.mp3 deleted file mode 100644 index 98b80e04..00000000 Binary files a/website/public/piano/C3v8.mp3 and /dev/null differ diff --git a/website/public/piano/C4v8.mp3 b/website/public/piano/C4v8.mp3 deleted file mode 100644 index c7aba1c2..00000000 Binary files a/website/public/piano/C4v8.mp3 and /dev/null differ diff --git a/website/public/piano/C5v8.mp3 b/website/public/piano/C5v8.mp3 deleted file mode 100644 index 7d566154..00000000 Binary files a/website/public/piano/C5v8.mp3 and /dev/null differ diff --git a/website/public/piano/C6v8.mp3 b/website/public/piano/C6v8.mp3 deleted file mode 100644 index c4f30ea5..00000000 Binary files a/website/public/piano/C6v8.mp3 and /dev/null differ diff --git a/website/public/piano/C7v8.mp3 b/website/public/piano/C7v8.mp3 deleted file mode 100644 index 178353a7..00000000 Binary files a/website/public/piano/C7v8.mp3 and /dev/null differ diff --git a/website/public/piano/C8v8.mp3 b/website/public/piano/C8v8.mp3 deleted file mode 100644 index 3357d0ed..00000000 Binary files a/website/public/piano/C8v8.mp3 and /dev/null differ diff --git a/website/public/piano/Ds1v8.mp3 b/website/public/piano/Ds1v8.mp3 deleted file mode 100644 index ae7da2cd..00000000 Binary files a/website/public/piano/Ds1v8.mp3 and /dev/null differ diff --git a/website/public/piano/Ds2v8.mp3 b/website/public/piano/Ds2v8.mp3 deleted file mode 100644 index 0817e581..00000000 Binary files a/website/public/piano/Ds2v8.mp3 and /dev/null differ diff --git a/website/public/piano/Ds3v8.mp3 b/website/public/piano/Ds3v8.mp3 deleted file mode 100644 index fda53ce0..00000000 Binary files a/website/public/piano/Ds3v8.mp3 and /dev/null differ diff --git a/website/public/piano/Ds4v8.mp3 b/website/public/piano/Ds4v8.mp3 deleted file mode 100644 index 7894b6d0..00000000 Binary files a/website/public/piano/Ds4v8.mp3 and /dev/null differ diff --git a/website/public/piano/Ds5v8.mp3 b/website/public/piano/Ds5v8.mp3 deleted file mode 100644 index 98d04e06..00000000 Binary files a/website/public/piano/Ds5v8.mp3 and /dev/null differ diff --git a/website/public/piano/Ds6v8.mp3 b/website/public/piano/Ds6v8.mp3 deleted file mode 100644 index 314331f7..00000000 Binary files a/website/public/piano/Ds6v8.mp3 and /dev/null differ diff --git a/website/public/piano/Ds7v8.mp3 b/website/public/piano/Ds7v8.mp3 deleted file mode 100644 index c2554a9d..00000000 Binary files a/website/public/piano/Ds7v8.mp3 and /dev/null differ diff --git a/website/public/piano/Fs1v8.mp3 b/website/public/piano/Fs1v8.mp3 deleted file mode 100644 index 47d4da8b..00000000 Binary files a/website/public/piano/Fs1v8.mp3 and /dev/null differ diff --git a/website/public/piano/Fs2v8.mp3 b/website/public/piano/Fs2v8.mp3 deleted file mode 100644 index 3502c6ff..00000000 Binary files a/website/public/piano/Fs2v8.mp3 and /dev/null differ diff --git a/website/public/piano/Fs3v8.mp3 b/website/public/piano/Fs3v8.mp3 deleted file mode 100644 index ad3546b0..00000000 Binary files a/website/public/piano/Fs3v8.mp3 and /dev/null differ diff --git a/website/public/piano/Fs4v8.mp3 b/website/public/piano/Fs4v8.mp3 deleted file mode 100644 index 12908edd..00000000 Binary files a/website/public/piano/Fs4v8.mp3 and /dev/null differ diff --git a/website/public/piano/Fs5v8.mp3 b/website/public/piano/Fs5v8.mp3 deleted file mode 100644 index 6aa830a1..00000000 Binary files a/website/public/piano/Fs5v8.mp3 and /dev/null differ diff --git a/website/public/piano/Fs6v8.mp3 b/website/public/piano/Fs6v8.mp3 deleted file mode 100644 index 602f4580..00000000 Binary files a/website/public/piano/Fs6v8.mp3 and /dev/null differ diff --git a/website/public/piano/Fs7v8.mp3 b/website/public/piano/Fs7v8.mp3 deleted file mode 100644 index 8a016d98..00000000 Binary files a/website/public/piano/Fs7v8.mp3 and /dev/null differ diff --git a/website/src/config.ts b/website/src/config.ts index adbcc7f0..012a6542 100644 --- a/website/src/config.ts +++ b/website/src/config.ts @@ -102,9 +102,10 @@ export const SIDEBAR: Sidebar = { { text: 'Strudel vs Tidal', link: 'learn/strudel-vs-tidal' }, ], Development: [ + { text: 'Strudel in your Project', link: 'technical-manual/project-start' }, + { text: 'Packages', link: 'technical-manual/packages' }, { text: 'REPL', link: 'technical-manual/repl' }, { text: 'Sounds', link: 'technical-manual/sounds' }, - { text: 'Packages', link: 'technical-manual/packages' }, { text: 'Docs', link: 'technical-manual/docs' }, { text: 'Testing', link: 'technical-manual/testing' }, // { text: 'Internals', link: 'technical-manual/internals' }, diff --git a/website/src/docs/MiniRepl.jsx b/website/src/docs/MiniRepl.jsx index cb0f26f7..fe618965 100644 --- a/website/src/docs/MiniRepl.jsx +++ b/website/src/docs/MiniRepl.jsx @@ -5,7 +5,6 @@ import { getPunchcardPainter } from '@strudel/draw'; import { transpiler } from '@strudel/transpiler'; import { getAudioContext, webaudioOutput, initAudioOnFirstClick } from '@strudel/webaudio'; import { StrudelMirror } from '@strudel/codemirror'; -// import { prebake } from '@strudel/repl'; import { prebake } from '../repl/prebake.mjs'; import { loadModules } from '../repl/util.mjs'; import Claviature from '@components/Claviature'; diff --git a/website/src/pages/examples/index.astro b/website/src/pages/examples/index.astro index 6b24d9ff..6940e1e4 100644 --- a/website/src/pages/examples/index.astro +++ b/website/src/pages/examples/index.astro @@ -15,14 +15,16 @@ const baseNoTrailing = BASE_URL.endsWith('/') ? BASE_URL.slice(0, -1) : BASE_URL
{ Object.entries(tunes).map(([name, tune]) => ( - +
{getMetadata(tune)['title'] || name}
-
)) }
-../../metadata_parser \ No newline at end of file +../../metadata_parser diff --git a/website/src/pages/img/example-[name].png.js b/website/src/pages/img/example-[name].png.js deleted file mode 100644 index a38a0616..00000000 --- a/website/src/pages/img/example-[name].png.js +++ /dev/null @@ -1,24 +0,0 @@ -import { createCanvas } from 'canvas'; -import { pianoroll } from '@strudel/draw'; -import { evaluate } from '@strudel/transpiler'; -import '../../../../test/runtime.mjs'; -import * as tunes from '../../repl/tunes.mjs'; - -export async function GET({ params, request }) { - const { name } = params; - const tune = tunes[name]; - const { pattern } = await evaluate(tune); - const haps = pattern.queryArc(0, 4); - const canvas = createCanvas(800, 800); - const ctx = canvas.getContext('2d'); - pianoroll({ time: 4, haps, ctx, playhead: 1, fold: 1, background: 'transparent', playheadColor: 'transparent' }); - const buffer = canvas.toBuffer('image/png'); - return new Response(buffer); -} -export function getStaticPaths() { - return Object.keys(tunes).map((name) => ({ - params: { - name, - }, - })); -} diff --git a/website/src/pages/swatch/[name].png.js b/website/src/pages/swatch/[name].png.js deleted file mode 100644 index ac150cfe..00000000 --- a/website/src/pages/swatch/[name].png.js +++ /dev/null @@ -1,26 +0,0 @@ -import { createCanvas } from 'canvas'; -import { pianoroll } from '@strudel/draw'; -import { evaluate } from '@strudel/transpiler'; -import '../../../../test/runtime.mjs'; -import { getMyPatterns } from '../../my_patterns'; - -export async function GET({ params, request }) { - const patterns = await getMyPatterns(); - const { name } = params; - const tune = patterns[name]; - const { pattern } = await evaluate(tune); - const haps = pattern.queryArc(0, 4); - const canvas = createCanvas(800, 800); - const ctx = canvas.getContext('2d'); - pianoroll({ time: 4, haps, ctx, playhead: 1, fold: 1, background: 'transparent', playheadColor: 'transparent' }); - const buffer = canvas.toBuffer('image/png'); - return new Response(buffer); -} -export async function getStaticPaths() { - const patterns = await getMyPatterns(); - return Object.keys(patterns).map((name) => ({ - params: { - name, - }, - })); -} diff --git a/website/src/pages/swatch/index.astro b/website/src/pages/swatch/index.astro index 5f575449..5d03ad97 100644 --- a/website/src/pages/swatch/index.astro +++ b/website/src/pages/swatch/index.astro @@ -25,13 +25,12 @@ const baseNoTrailing = BASE_URL.endsWith('/') ? BASE_URL.slice(0, -1) : BASE_URL { Object.entries(myPatterns).map(([name, tune]) => (
{name}
-
)) } diff --git a/website/src/pages/technical-manual/packages.mdx b/website/src/pages/technical-manual/packages.mdx index d378f781..9a067317 100644 --- a/website/src/pages/technical-manual/packages.mdx +++ b/website/src/pages/technical-manual/packages.mdx @@ -19,6 +19,15 @@ The purpose of the multiple packages is to [See the latest published packages on npm](https://www.npmjs.com/search?q=%40strudel). Here is an overview of all the packages: +### Umbrella Packages + +These packages give you a batteries-included point of getting started, and most likely the thing you'd want to use in your project: + +- [repl](https://github.com/tidalcycles/strudel/tree/main/packages/repl): The Strudel REPL as a web component. +- [web](https://github.com/tidalcycles/strudel/tree/main/packages/web): Strudel library for the browser, without UI. + +To find out more about these two, read [Using Strudel in Your Project](/technical-manual/project-start) + ### Essential Packages These package are the most essential. You might want to use all of those if you're using strudel in your project: diff --git a/website/src/pages/technical-manual/project-start.mdx b/website/src/pages/technical-manual/project-start.mdx new file mode 100644 index 00000000..64081625 --- /dev/null +++ b/website/src/pages/technical-manual/project-start.mdx @@ -0,0 +1,129 @@ +--- +title: Using Strudel in your Project +layout: ../../layouts/MainLayout.astro +--- + +# Using Strudel in your Project + +This Guide shows you the different ways to get started with using Strudel in your own project. + +## Embedding the Strudel REPL + +There are 3 quick ways to embed strudel in your website: + +1. Embed the strudel website as an iframe directly +2. Embed the strudel website as an iframe using `@strudel/embed` +3. Embed the REPL directly using `@strudel/repl` + +### Inside an iframe + +Using an iframe is the most easy way to embed a studel tune. +You can embed any pattern of your choice via an iframe and the URL of the pattern of your choice: + +```html + +``` + +The URL can be obtained by pressing `share` in the REPL. +Note that these share links depend on a database, which is not guaranteed to live forever. +To make sure your code is not lost, you can also use the long url: + +```html + +``` + +That long URL can just be copy pasted from the URL bar when you're on the strudel website. It always reflects the latest evaluation of your code. + +### @strudel/embed + +To simplify the process of emebdding via an iframe, you can use the package `@strudel/embed`: + +```html + + + + +``` + +This will load the strudel website in an iframe, using the code provided within the HTML comments ``. +The HTML comments are needed to make sure the browser won't interpret it as HTML. + +For alternative ways to load this package, see the [@strudel/embed README](https://github.com/tidalcycles/strudel/tree/main/packages/embed#strudelembed). + +### @strudel/repl + +Loading strudel directly in your site, without an iframe, looks similar to the iframe variant: + +```html + + + + +``` + +Here, we're loading `@strudel/repl` instead of `@strudel/embed`, and the component is called `strudel-editor` instead of `strudel-repl`. +Yes the naming is a bit confusing.. + +The upside of using the repl without an iframe is that you can pin the strudel version you're using: + +```html + + + + +``` + +This will guarantee your pattern wont break due to changes to the strudel project in the future. + +For more info on this package, see the [@strudel/repl README](https://github.com/tidalcycles/strudel/tree/main/packages/repl#strudelrepl). + +## With your own UI + +The above approach assumes you want to use the builtin [codemirror](https://codemirror.net/) editor. +If you'd rather use your own UI, you can use the `@strudel/web` package: + +```html + + + + + +``` + +For more info on this package, see the [@strudel/web README](https://github.com/tidalcycles/strudel/tree/main/packages/web#strudelweb). + +## Via npm + +[All the packages and many more are available on npm under the @strudel namespace](https://www.npmjs.com/search?q=%40strudel). +There are actually many more packages you can use to have fine grained control over what you use and what not. +To use these packages, you have to use a bundler that supports es modules, like [vite](https://vitejs.dev/). + +To find out more about the purpose of each package, see [Packages](/technical-manual/packages) diff --git a/website/src/repl/prebake.mjs b/website/src/repl/prebake.mjs index dc8d3c8e..55b534a6 100644 --- a/website/src/repl/prebake.mjs +++ b/website/src/repl/prebake.mjs @@ -19,7 +19,7 @@ export async function prebake() { // => getting "window is not defined", as soon as "@strudel/soundfonts" is imported statically // seems to be a problem with soundfont2 import('@strudel/soundfonts').then(({ registerSoundfonts }) => registerSoundfonts()), - samples(`${baseNoTrailing}/piano.json`, `${baseNoTrailing}/piano/`, { prebake: true }), + samples(`${baseNoTrailing}/piano.json`, undefined, { prebake: true }), // https://github.com/sgossner/VCSL/ // https://api.github.com/repositories/126427031/contents/ // LICENSE: CC0 general-purpose @@ -28,7 +28,7 @@ export async function prebake() { prebake: true, tag: 'drum-machines', }), - samples(`${baseNoTrailing}/EmuSP12.json`, `${baseNoTrailing}/EmuSP12/`, { prebake: true, tag: 'drum-machines' }), + samples(`${baseNoTrailing}/EmuSP12.json`, undefined, { prebake: true, tag: 'drum-machines' }), samples( { casio: ['casio/high.wav', 'casio/low.wav', 'casio/noise.wav'], diff --git a/website/src/repl/tunes.mjs b/website/src/repl/tunes.mjs index f9c69995..9d083f2e 100644 --- a/website/src/repl/tunes.mjs +++ b/website/src/repl/tunes.mjs @@ -447,58 +447,6 @@ note( .room(.5) .lpa(.125).lpenv(-2).v("8:.125").fanchor(.25)`; -export const hyperpop = `// "Hyperpop" -// @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ -// @by Felix Roos - -const lfo = cosine.slow(15); -const lfo2 = sine.slow(16); -const filter1 = x=>x.cutoff(lfo2.range(300,3000)); -const filter2 = x=>x.hcutoff(lfo.range(1000,6000)).cutoff(4000) -const scales = cat('D3 major', 'G3 major').slow(8) - -samples({ - bd: '344/344757_1676145-lq.mp3', - sn: '387/387186_7255534-lq.mp3', - hh: '561/561241_12517458-lq.mp3', - hh2:'44/44944_236326-lq.mp3', - hh3: '44/44944_236326-lq.mp3', -}, 'https://cdn.freesound.org/previews/') - -stack( - "-7 0 -7 7".struct("x(5,8,1)").fast(2).sub(7) - .scale(scales) - .note() - .s("sawtooth,square") - .gain(.3).attack(0.01).decay(0.1).sustain(.5) - .apply(filter1) - .lpa(.1).lpenv(2).ftype('24db') - , - n("~@3 [<2 3>,<4 5>]") - .echo(4,1/16,.7) - .scale(scales) - .s('square').gain(.7) - .attack(0.01).decay(0.1).sustain(0) - .apply(filter1), - "6 4 2".add(14) - .superimpose(sub("5")) - .fast(1).euclidLegato(3,8) - .mask("<1 0@7>") - .fast(2).n() - .echo(32, 1/8, .8) - .scale(scales) - .s("sawtooth") - .mul(gain(sine.range(.1,.4).slow(8))) - .attack(.001).decay(.2).sustain(0) - .apply(filter2) -).stack( - stack( - "bd <~@7 [~ bd]>".fast(2), - "~ sn", - "[~ hh3]*2" - ).s().fast(2).gain(.7) -).slow(2)`; - export const festivalOfFingers3 = `// "Festival of fingers 3" // @license CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0/ // @by Felix Roos