diff --git a/website/src/pages/learn/mondo-notation.mdx b/website/src/pages/learn/mondo-notation.mdx new file mode 100644 index 00000000..caf9f67f --- /dev/null +++ b/website/src/pages/learn/mondo-notation.mdx @@ -0,0 +1,145 @@ +--- +title: Mondo Notation +layout: ../../layouts/MainLayout.astro +--- + +import { MiniRepl } from '../../docs/MiniRepl'; +import { JsDoc } from '../../docs/JsDoc'; + +# Mondo Notation + +"Mondo Notation" is a new kind of notation that is similar to [Mini Notation](/learn/mini-notation/), but with enough abilities to make it work as a standalone pattern language. +Here's an example: + +/2 +.jux /2 +.rarely (12.note.add) .delay .4 .vib 1:.3 +.fm (sine/4.range .5 4).fmh 2.02 +.lpf (sine/2.range 200 2000).lpq 4 +.s piano .clip 2 +.add (perlin.range 0 .2 .note)`} +/> + +## Calling Functions + +Compared to Mini Notation, the most notable feature of Mondo Notation is the ability to call functions using round brackets: + + + +The first element inside the brackets is the function name. In JS, this would look like: + + + +The outermost parens are not needed, so we can drop them: + + + +## Mini Notation Features + +Besides function calling with round parens, Mondo Notation has a lot in common with Mini Notation: + +- `[]` for 1-cycle sequences +- `<>` for multi-cycle sequences +- `{}` for stepped sequences (more on that later) +- \* => [fast](/learn/time-modifiers/#fast) +- / => [slow](/learn/time-modifiers/#slow) +- , => [stack](/learn/factories/#stack) +- ! => [extend](/learn/stepwise/#extend) +- @ => [expand](/learn/stepwise/#expand) +- % => [pace](/learn/stepwise/#pace) +- ? => [degradeBy](/learn/random-modifiers/#degradeby) (currently requires right operand) +- : => tail (creates a list) +- .. => range (between numbers) +- | => [chooseIn](/learn/random-modifiers/#choose) + +Example: + +`} +/> + +## Chaining Functions + +Similar to how it works in JS, we can chain functions calls with the "." operator: + +*4 +.scale C4:minor +.jux rev +.dec .2 +.delay .5`} +/> + +Here's the same written in JS: + +*4") +.scale("C4:minor") +.jux(rev) +.dec(.2) +.delay(.5)`} +/> + +### Chaining Functions Locally + +A function can be applied "locally" by wrapping it in round parens: + + + +in this case, `delay .6` will only be applied to `cp`. compare this with the JS version: + + + +here we can see much we can save when there's no boundary between mini notation and function calls! + +### Lambda Functions + +Some functions in strudel expect a function as input, for example: + +x.dec(.1))`} /> + +in mondo, the `x=>x.` can be shortened to: + + + +chaining works as expected: + + + +## Strings + +You can use "double quotes" and 'single quotes' to get a string: + + + +## Multiple Patterns + +The `$` sign can be used to separate multiple patterns: + +.voicing +.struct[x - - x - x - -].delay.5`} +/> + +The `$` sign is an alias for `,` so it will create a stack behind the scenes.