User:Frostburn/SonicWeave: Difference between revisions

From Xenharmonic Wiki
Jump to navigation Jump to search
Frostburn (talk | contribs)
Sketch up to real logarithmic types.
Frostburn (talk | contribs)
Expand type hierarchy but leave TODOs for obscure types.
Line 60: Line 60:
\mathrm{xfjs} &\supset \{\mathrm{n3}, \mathrm{m4.5}\} \\
\mathrm{xfjs} &\supset \{\mathrm{n3}, \mathrm{m4.5}\} \\
\mathrm{pitch} &= \mathrm{ji} \cup \mathrm{nedo} \cup \mathrm{nedji} \cup \mathrm{cents} \cup \mathrm{monzo} \cup \mathrm{xfjs}
\mathrm{pitch} &= \mathrm{ji} \cup \mathrm{nedo} \cup \mathrm{nedji} \cup \mathrm{cents} \cup \mathrm{monzo} \cup \mathrm{xfjs}
\end{align}
</math>
=== Radical co-logarithmic types ===
<math>
\begin{align}
\mathrm{jorp} &= \{€\} \\
\mathrm{warts} &\supset \{5@, 17c@, [email protected]/5, b13@\} \\
\mathrm{val} &\supset \{<12, 19, 28]\} \\
\mathrm{copitch} &= \mathrm{jorp} \cup \mathrm{warts} \cup \mathrm{val}
\end{align}
\end{align}
</math>
</math>
Line 71: Line 80:


Similarly, the free pitch type is unlikely to be relevant in day-to-day use of SW3.
Similarly, the free pitch type is unlikely to be relevant in day-to-day use of SW3.
=== Real co-logarithmic types ===
<math>
\begin{align}
\mathrm{jorp!} &= \{€!\} \\
\mathrm{freeCopitch} &= \{x * €!, x \in \mathbb{R}\}
\end{align}
</math>
Note: Completionism is an illness.
=== Linear unit quantities ===
<math>
\begin{align}
\mathrm{second} &= \{s\} \\
\mathrm{hertz} &= \{Hz\}
\end{align}
</math>
=== Rational linear quantities ===
<math>
\mathrm{rationalTime} = \{p * s^q, p \in \mathbb{Q}, q \in \mathbb{Q} \}
</math>
Note: Decimal numbers do not require parenthesis when implicitly multiplying unit quantities e.g. "261.6 Hz" is a valid expression.
=== Radical linear quantities ===
<math>
\mathrm{radicalTime} = \{p * s^q, p \in \mathrm{radical}, q \in \mathbb{Q} \}
</math>
=== Real linear quantities ===
<math>
\mathrm{realTime} = \{p * s^q, p \in \mathbb{R}, q \in \mathbb{Q} \}
</math>
=== Rational logarithmic quantities ===
<math>
\begin{align}
\mathrm{afjs} &\supset \{\mathrm{C4}, \mathrm{E5}^5\} \\
\mathrm{aji} &= \mathrm{afjs}
\end{align}
</math>
=== Rational co-logarithmic quantities ===
TODO
=== Radical logarithmic quantities ===
<math>
\begin{align}
\mathrm{axfjs} &\supset \{\mathrm{C½♭4}, \mathrm{\alpha 3}\} \\
\mathrm{acents} &= \{ac\} \\
\mathrm{apitch} &= \mathrm{aji} \cup \mathrm{axfjs} \cup \mathrm{acents}
\end{align}
</math>
=== Radical co-logarithmic quantities ===
TODO
=== Real logarithmic quantities ===
TODO
=== Real co-logarithmic quantities ===
TODO
Note: Make it stop.
=== Domain types ===
<math>
\begin{align}
\mathrm{linear} &= \ldots \\
\mathrm{logarithmic} &= \ldots \\
\end{align}
</math>

Revision as of 14:04, 10 December 2023

This is my second attempt at creating a a Domain Specific Language (DSL) called SonicWeave for manipulating frequencies, ratios and pitches in Scale Workshop 3.

Still very much a work in progress. Expect things to shift around as I design a parseable grammar.

Values

Values consist of strings, functions and extended time monzos which combine a rational time exponent, rational prime exponents, a multiplicative rational residual and a catch-all real cents offset.

Domains

Theres a linear domain where 3/2 + 3/2 means 3 (as a ratio of two frequencies) and a logarithmic domain where 3\2 + 3\2 means 8 (as a ratio of two frequencies).

Tiers

Types are organized into tiers consisting of booleans, integers, rationals, radicals (i.e. rationals raised to rational powers) and reals.

[math]\displaystyle{ \mathbb{B} \subset \mathbb{Z} \subset \mathbb{Q} \subset \mathrm{radical} \subset \mathbb{R} }[/math]

Type system

Values are dressed into types to implement domain-specific operator overloading and type-aware function overloading.

Rational linear types

[math]\displaystyle{ \begin{align} \mathrm{boolean} &= \mathbb{B} = \{0, 1\} \\ \mathrm{integer} &= \mathbb{Z} \supset \{1, 2, 3, 4\} \\ \mathrm{fraction} &\supset \{3/2, 5/3\} \\ \mathrm{decimal} &\supset \{(1.2), (1.4), (1,5)\} \\ \mathrm{rational} &= \mathbb{Q} = \mathrm{integer} \cup \mathrm{fraction} \cup \mathrm{decimal} \end{align} }[/math]

Note: Decimals require surrounding parenthesis when using a decimal dot but may be entered plain when using a decimal comma.

Radical linear types

[math]\displaystyle{ \begin{align} \mathrm{radicalExpression} &\supset \{\sqrt{3}, 2^\frac{5}{3}\} \\ \mathrm{radical} &= \mathrm{rational} \cup \mathrm{radicalExpression} \end{align} }[/math]

Real linear types

[math]\displaystyle{ \begin{align} \mathrm{integer!} &\supset \{69!, 420!\} \\ \mathrm{decimal!} &\supset \{(3.14159!), (2.718!)\} \\ \mathrm{real} &= \mathbb{R} = \mathrm{radical} \cup \mathrm{integer!} \cup \mathrm{decimal!} \end{align} }[/math]

Note: Real linear types are mostly an artifact of the catch-all property extended time monzos. Not recommended for everyday use.

Rational logarithmic types

[math]\displaystyle{ \begin{align} \mathrm{fjs} &\supset \{ \mathrm{P5}, \mathrm{M3}^5 \} \\ \mathrm{ji} &= \mathrm{fjs} \end{align} }[/math]

Radical logarithmic types

[math]\displaystyle{ \begin{align} \mathrm{nedo} &\supset \{ 5\backslash 7, 7\backslash 12 \} \\ \mathrm{nedji} &\supset \{ 7\backslash 13<3>, 1\backslash 3<5/3> \} \\ \mathrm{cents} &\supset \{.5, 1.955, 100., c \} \\ \mathrm{monzo} &\supset \{[-4, 4, -1>, [1/2, 1/3> \} \\ \mathrm{xfjs} &\supset \{\mathrm{n3}, \mathrm{m4.5}\} \\ \mathrm{pitch} &= \mathrm{ji} \cup \mathrm{nedo} \cup \mathrm{nedji} \cup \mathrm{cents} \cup \mathrm{monzo} \cup \mathrm{xfjs} \end{align} }[/math]

Radical co-logarithmic types

[math]\displaystyle{ \begin{align} \mathrm{jorp} &= \{€\} \\ \mathrm{warts} &\supset \{5@, 17c@, [email protected]/5, b13@\} \\ \mathrm{val} &\supset \{<12, 19, 28]\} \\ \mathrm{copitch} &= \mathrm{jorp} \cup \mathrm{warts} \cup \mathrm{val} \end{align} }[/math]

Real logarithmic types

[math]\displaystyle{ \begin{align} \mathrm{cents!} &\supset \{.777!, 1901.955!, 69.!, c!\} \\ \mathrm{freePitch} &= \mathrm{pitch} \cup \mathrm{cents!} \end{align} }[/math]

Similarly, the free pitch type is unlikely to be relevant in day-to-day use of SW3.

Real co-logarithmic types

[math]\displaystyle{ \begin{align} \mathrm{jorp!} &= \{€!\} \\ \mathrm{freeCopitch} &= \{x * €!, x \in \mathbb{R}\} \end{align} }[/math]

Note: Completionism is an illness.

Linear unit quantities

[math]\displaystyle{ \begin{align} \mathrm{second} &= \{s\} \\ \mathrm{hertz} &= \{Hz\} \end{align} }[/math]

Rational linear quantities

[math]\displaystyle{ \mathrm{rationalTime} = \{p * s^q, p \in \mathbb{Q}, q \in \mathbb{Q} \} }[/math]

Note: Decimal numbers do not require parenthesis when implicitly multiplying unit quantities e.g. "261.6 Hz" is a valid expression.

Radical linear quantities

[math]\displaystyle{ \mathrm{radicalTime} = \{p * s^q, p \in \mathrm{radical}, q \in \mathbb{Q} \} }[/math]

Real linear quantities

[math]\displaystyle{ \mathrm{realTime} = \{p * s^q, p \in \mathbb{R}, q \in \mathbb{Q} \} }[/math]

Rational logarithmic quantities

[math]\displaystyle{ \begin{align} \mathrm{afjs} &\supset \{\mathrm{C4}, \mathrm{E5}^5\} \\ \mathrm{aji} &= \mathrm{afjs} \end{align} }[/math]

Rational co-logarithmic quantities

TODO

Radical logarithmic quantities

[math]\displaystyle{ \begin{align} \mathrm{axfjs} &\supset \{\mathrm{C½♭4}, \mathrm{\alpha 3}\} \\ \mathrm{acents} &= \{ac\} \\ \mathrm{apitch} &= \mathrm{aji} \cup \mathrm{axfjs} \cup \mathrm{acents} \end{align} }[/math]

Radical co-logarithmic quantities

TODO

Real logarithmic quantities

TODO

Real co-logarithmic quantities

TODO

Note: Make it stop.

Domain types

[math]\displaystyle{ \begin{align} \mathrm{linear} &= \ldots \\ \mathrm{logarithmic} &= \ldots \\ \end{align} }[/math]