Alex McLean 398533877c
Beat-oriented functionality (#976)
* 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.
2024-03-16 17:24:37 +00:00
..
2024-03-06 11:14:48 +00:00
2022-05-17 00:22:50 +02:00
2024-03-16 17:24:37 +00:00
2024-02-08 13:04:25 +01:00
2024-02-08 12:19:11 +01:00

@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