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-16 17:24:37 +00:00
2022-11-06 19:36:01 +01:00
2024-03-10 14:35:43 -04:00
2024-03-07 12:01:08 +01:00
2022-11-03 14:47:27 +01:00
2024-02-29 04:54:03 +01:00
2024-02-29 22:14:53 +01:00
2024-02-29 04:25:00 +01:00
2024-03-10 14:35:43 -04:00
2024-02-08 13:04:25 +01:00
2024-03-16 17:24:37 +00:00
2024-03-07 23:04:46 -05:00
2024-02-29 15:25:31 +01:00
2022-12-10 22:56:08 +01:00
2022-04-28 14:38:41 +01:00
2022-12-13 21:32:03 +01:00
2023-10-27 21:29:31 +02:00
2024-03-16 17:24:37 +00:00
2024-02-08 12:19:11 +01:00
2024-03-07 12:35:39 +01:00

@strudel/core

This package contains the bare essence of strudel.

Install

npm i @strudel/core --save

Example

import { sequence } from '@strudel/core';

const pattern = sequence('a', ['b', 'c']);

const events = pattern.queryArc(0, 1);

const spans = events.map(
  (event) => `${event.value}: ${event.whole.begin.toFraction()} - ${event.whole.end.toFraction()} `,
);

yields:

a: 0 - 1/2
b: 1/2 - 3/4
c: 3/4 - 1
a: 1 - 3/2
b: 3/2 - 7/4
c: 7/4 - 2