Compare commits

...

1 Commits

Author SHA1 Message Date
Felix Roos f46cf02819 poc: fraction shorthands 2023-11-07 08:40:21 +01:00
2 changed files with 22 additions and 1 deletions
+2 -1
View File
@@ -9,7 +9,7 @@ import Fraction from './fraction.mjs';
import Hap from './hap.mjs'; import Hap from './hap.mjs';
import State from './state.mjs'; import State from './state.mjs';
import { unionWithObj } from './value.mjs'; import { unionWithObj } from './value.mjs';
import { char2fraction } from './util.mjs';
import { compose, removeUndefineds, flatten, id, listRange, curry, _mod, numeralArgs, parseNumeral } from './util.mjs'; import { compose, removeUndefineds, flatten, id, listRange, curry, _mod, numeralArgs, parseNumeral } from './util.mjs';
import drawLine from './drawLine.mjs'; import drawLine from './drawLine.mjs';
import { logger } from './logger.mjs'; import { logger } from './logger.mjs';
@@ -1903,6 +1903,7 @@ export const when = register('when', function (on, func, pat) {
* "c3 eb3 g3".off(1/8, x=>x.add(7)).note() * "c3 eb3 g3".off(1/8, x=>x.add(7)).note()
*/ */
export const off = register('off', function (time_pat, func, pat) { export const off = register('off', function (time_pat, func, pat) {
time_pat = char2fraction(time_pat);
return stack(pat, func(pat.late(time_pat))); return stack(pat, func(pat.late(time_pat)));
}); });
+20
View File
@@ -1,3 +1,5 @@
import Fraction from './fraction.mjs';
/* /*
util.mjs - <short description TODO> util.mjs - <short description TODO>
Copyright (C) 2022 Strudel contributors - see <https://github.com/tidalcycles/strudel/blob/main/packages/core/util.mjs> Copyright (C) 2022 Strudel contributors - see <https://github.com/tidalcycles/strudel/blob/main/packages/core/util.mjs>
@@ -274,3 +276,21 @@ export const sol2note = (n, notation = 'letters') => {
const oct = Math.floor(n / 12) - 1; const oct = Math.floor(n / 12) - 1;
return note + oct; return note + oct;
}; };
const fractionCharacters = {
w: Fraction(1),
h: Fraction(0.5),
q: Fraction(0.25),
e: Fraction(0.125),
s: Fraction(0.0625),
t: Fraction(1 / 3),
f: Fraction(0.2),
x: Fraction(1 / 6),
};
const validFractionCharacters = Object.keys(fractionCharacters);
export const char2fraction = (maybeChar) => {
if (typeof maybeChar === 'string' && validFractionCharacters.includes(maybeChar)) {
return fractionCharacters[maybeChar];
}
return maybeChar;
};