diff --git a/docs/dist/groove.js b/docs/dist/groove.js new file mode 100644 index 00000000..d28990bc --- /dev/null +++ b/docs/dist/groove.js @@ -0,0 +1,5 @@ +import {Pattern as _Pattern} from "../_snowpack/link/strudel.js"; +const Pattern = _Pattern; +Pattern.prototype.groove = function(groove) { + return groove.fmap(() => (v) => v).appLeft(this); +}; diff --git a/docs/dist/parse.js b/docs/dist/parse.js index 79f8a779..72677bd5 100644 --- a/docs/dist/parse.js +++ b/docs/dist/parse.js @@ -5,6 +5,7 @@ import "./tone.js"; import "./midi.js"; import "./voicings.js"; import "./tonal.js"; +import "./groove.js"; import * as toneStuff from "./tone.js"; import shapeshifter from "./shapeshifter.js"; const { diff --git a/docs/dist/tunes.js b/docs/dist/tunes.js index 66f68f73..6875228b 100644 --- a/docs/dist/tunes.js +++ b/docs/dist/tunes.js @@ -267,4 +267,17 @@ export const scaleTranspose = `stack(f2, f3, c4, ab4) .synth('sawtooth') .filter(800) .gain(0.5)`; +export const groove = `stack( + m('c2 g2 a2 [e2@2 eb2] d2 a2 g2 [d2 ~ db2]') + .synth('sawtooth') + .filter(500) + .gain(.6), + m('[C^7 A7] [Dm7 G7]') + .groove(m('[x@2 x] [~@2 x] [~ x@2]@2 [x ~@2] ~ [~@2 x@4]@2')) + .voicings(['G3','A4']) + .synth('square') + .filter(1000) + .adsr(.1,.1,.2) + .gain(0.25) +).slow(4.5)`; export default swimming;