mirror of
https://github.com/eliasstepanik/strudel.git
synced 2026-01-11 13:48:40 +00:00
* annotate pure values with their value, allowing single mininotation values to maintain their labels as pure * Don't use any 'patternified' arguments if they're all 'pure' * allow pattern weights (roughly, beats-per-cycle) to be inferred where possible, including from mininotation and across many transformations (e.g. `fast` with a 'pure' factor) * Add `beatCat`, similar to `timeCat` but funkier * `silence` has a weight of 1, add alternative `nothing` with a weight of 0, and `gap` function with weight argument * preserve weight across applicative operations (weight comes with the structure) * add `stack` alternatives that take advantage of pattern weights to align patterns differently - `stackLeft`, `stackRight`, `stackCentre`, `stackExpand`, with `stackBy` with an argument for patterning the alignment.
@strudel/mini
This package contains the mini notation parser and pattern generator.
Install
npm i @strudel/mini --save
Example
import { mini } from '@strudel/mini';
const pattern = mini('a [b c*2]');
const events = pattern.firstCycle().map((e) => e.show());
console.log(events);
yields:
(0/1 -> 1/2, 0/1 -> 1/2, a)
(1/2 -> 3/4, 1/2 -> 3/4, b)
(3/4 -> 7/8, 3/4 -> 7/8, c)
(7/8 -> 1/1, 7/8 -> 1/1, c)
Play with @strudel/mini codesandbox
Mini Notation API
See "Mini Notation" in the Strudel Tutorial
Building the Parser
The parser [krill-parser.js] is generated from krill.pegjs using peggy. To generate the parser, run
npm run build:parser