diff --git a/harmonic-entropy/assets/search.js b/harmonic-entropy/assets/search.js index cc57493..f46a6ee 100644 --- a/harmonic-entropy/assets/search.js +++ b/harmonic-entropy/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA7VZTY+bSBD9Lz1XhnFVAza+RrtKcphIu9JKK8sasQxWyGKwgJkka/m/b/PZXbjbgO1cMmLmvarX9bq6C3Jkefa9YOvNkf0bp69s7TkWS4N9xNbsa5DvszQOf0vLPDv8ZBZ7yxPx+91bGpZxlhZPA4T9tdwnAhYmQVFEIipjJ0sT+JBHYZCEb0lQRn8EIlShiX0OuhgeF/4SXOxzfKTSvhzqqH2e8uchKp70oMvLcF3u9VleXqpA06M+9AQluMUOQR6lpVm1TA8LlHV8np3Yfp6Z2m4FGxTMKGinoLivgmC+guDONYjyOLqmEB3vjlr2cfpB0K9QozDvqSf4ca0eybyjnvwao/J7u5Rm+T5I4v/mHxy2Sr1REa56QS32Q3veZnkvrM3xdIYYOYydlVLz9/g9mhryQcL16zvXKvO6IC+AUKy6zN/C6at5oJT56YnJ2eDGGckt4TJvWbw+xsXjIY/fxSV4lYqcXq9jte/Qd9VQBv8k0VQJHXh+9cmmK7PPf355npy0Q8/PenEemJTWbn48gj0yHJxHIQGM5b9ZkX2LrJGzcGabGAS2UR7hF6msd+Xft1axC3InhYNTtp+Wp5+0KuXWlkcPwdHNpiMqrmu7QbbJ+8d8k8/IFkzNZp4056yNzpdjC7w8Vc7IezZLjmQenSDn5B7OjWO5x6bFGbnz6cW+NBnOyHg+D47kHZ8CJ1+U2e73PKhfuSdPKirj5uyzbJbwyXm3FhNpox9sfWRirCwq2WuGNrd9wdzFUfJaff5oBIm42X5fxdq2f/srqqbBCtFAnhbM2iwsDrbj+9uttekY9R/qX9QwcRFtQAcDAkPxhDoYEhgXT9xCz+Y+EBgnMEc8OTqYQ2CueHJ1MJfAPPHk6WAegS3F01IHWxLYSjytdLAVgQlTNr4O5tPyVtWGhQ4IAyNqJ0CLpF5AVXPQugHUDqjKDlyLpI5AVXlwtEhqClTFB60tQH2Bqv7gaWNSa6CyAJZaJHUHKhdgpUVSg8A37UWgFmFtka/d3NQiBOPScdAudb9o2w+pRVj5gNoORGoRGrsGqUNo7BukBqGxc5D6g8beQWoPGrsHqTto7B+k7nBzA3HqDjc3EKfu8NodbQPxwXlWu6NtIN64Ux/b4rwuo9dPzfEtDuDu/ejIXtoznXc3yZFx8c/JYmIXip8neZJXT1WCQOV5kuc1PPQMPPJRQEYAR4YQraznRs19FMr7SI2ASgQ0ROi+sEfdN3jJX0j6Yhq7f9eSQRQNJglitgqbW1fSfEnz2/qZ6i7GwjP6StJXLX1loKcqT6m50/JMpVdGJKXkoJQcmggcDBGy3ZluVPcbN/J2/XykUJVKc1OpNQaJc1FKdttFmySr/2fSfctRQimRDAE0JKVVwNQj5E1SWbOSEU3lqmdoJZ+yrWHRWmTa3/23QoWvWASmnCSjUuCuvq6J175cSfJSkpcteWkgt1+2FKkKGS6ySN+jUiE07aQy+1bQDQhK04Gp24bnKyiNjloXxEF9iA9REqcCtNmeTv8D+2SJ0FIcAAA="; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAA7VZXW+jVhD9LzevhHjm8mW/rlq1fchKrVSpsqKIOljL1gYLSLpby/+9FwzcGfteA7b3JRHJOTPnzmGGMd6LIv+3FIvlXvyTZm9iEXiOyOJtIhbiS1xs8yxd/ZRVRb77LhzxXmzU39fv2apK86x8OkG4X6rtRsFWm7gsExVViINjCLwrklW8Wb1v4ir5PVahSkPsc9DF8Dibh+Bjn+MXLu3zrona56m+75LyyQy6fAzfl0Gf5fW1DjQ+6kNPIMEdsYuLJKvsqnV6mKGu4/PkxO7zxNRuK9iiYEJBOwXlfRXE0xXEd65BUqTJNYXoeHfUsk2zT4p+hRrCvKee+Nu1ejTzjnqKa4wq7u1SlhfbeJP+N31wuJR6oyKMekEt9lM7b/OiF9bmeDpDDAxjLyI1/0g/krEhHzTcfL5zrTqvD/oBsFKnror31fjTPHDK9PTM5PxY+NexyQleZ67Kt8e0fNwV6Yd6DF6lo+AP2KHqd+i7aqjivzfJWAkdeHr92W1X5b/98fl5dNIOPT3rxY1gVFr3+OsR3IH14DwKC2At/82K3FtkDUzD/GQ1u05gG+VR/iCVzV35161V7ILcSeHJnO335fGzllJubXkMELyrfdXwKxqfZx7d9dc1/Em20Se8y9nisdnsW+6Us/HdduiAlzfaCXnP9tiBzIPb65TcpzvrUO6hTXVC7mJ8sS9tpRMynu+iA3mHN9DRj+h8/XMRNx/3Rw8Jyrg5+ySbNXx03hdHqLTJN7HYC7XSlrXshUBXunPFXKfJ5q1+9XIUpOLm220d66X9359JvYnWiCPkaSac5cyR4IYRvLw4y47R/KP5QwMDdQUmGDAYqis0wZDB1AN1KR0M3CBEBpMM5qkrzwTzGMxXV74J5jNYoK4CEyxgsFBdhSZYyGCRuopMsIjBlCnLuQk25+Wtqw0zExBOjGicACOSewF1zcHoBnA7oC47SCOSOwJ15cEzIrkpUBcffCOS+wJ1/SEwIrk1UFsAoRHJ3YHaBYiMSG4QzG33InCLsLFobry5uUVY+4BGM/GkXZp+MfYVcouw9gHNrcUtQs+enVuEvq2/kDuEga3DkBuEoa3HkPuDka3LkNuDc1ufIbdHzmydJrk7EqytJrk7Eq2tJk/mWeOOsYEkd0c27hgbSB7daQa8muxV8vbrcdCrUd19htuL13b6y+6ZsxdS/Tg4Qt2v6vdBz/z6qk4QU16gecGRp6wx89irCx0BPB1CNb2ZmxyfXCv95KIRkERAS4Tue4Ck+6ZA82eaPhvH7j8I6CBEg02C2sJWx+ezps01bX6sn7RpUAvkGT3S9Kgtv822jPJIzb2W59t4epkiJQdScmiF286dr890IxEgbabn63W/SREqvVWljWowiNiMrWS0pu7fdJEz++TMtmrRr4S6F1UkBIlgCWAgkR6DwEajH5PJoeltaStWs6aTfKRQMGu9tcrtXoUSPjEIbDlZRlJYvzXGds7u85smh5octuTIQm5f2xGphAy2udWw2MBA4iPa7voq/1ryOxdIt4JV48lgBjIh0Dga1ITfpbtkk2YKtHw5HP4H5xAVxDEdAAA="; \ No newline at end of file diff --git a/harmonic-entropy/classes/EntropyCalculator.html b/harmonic-entropy/classes/EntropyCalculator.html index b77bafb..7b75284 100644 --- a/harmonic-entropy/classes/EntropyCalculator.html +++ b/harmonic-entropy/classes/EntropyCalculator.html @@ -1,6 +1,6 @@ EntropyCalculator | harmonic-entropy

Class EntropyCalculator

Construct a harmonic entropy calculator for individual musical intervals.

-

Constructors

Properties

Constructors

Properties

Accessors

N @@ -8,6 +8,7 @@ maxCents minCents normalize +options res s series @@ -16,29 +17,30 @@ recalculate toJSON reviver -

Constructors

Properties

ratios?: [number, number][]
table: [number, number][]

Accessors

  • get N(): number
  • Max height of rationals (Benedetti or Wilson depending on series)

    -

    Returns number

  • set N(value): void
  • Parameters

    • value: number

    Returns void

  • get a(): number
  • Rényi order

    -

    Returns number

  • set a(value): void
  • Parameters

    • value: number

    Returns void

  • get maxCents(): number
  • Upper bound of tabulation

    -

    Returns number

  • set maxCents(value): void
  • Parameters

    • value: number

    Returns void

  • get minCents(): number
  • Lower bound of tabulation

    -

    Returns number

  • set minCents(value): void
  • Parameters

    • value: number

    Returns void

  • get normalize(): boolean
  • Boolean flag to normalize the result by Hartley entropy

    -

    Returns boolean

  • set normalize(value): void
  • Parameters

    • value: boolean

    Returns void

  • get res(): number
  • Tabulation delta in cents

    -

    Returns number

  • set res(value): void
  • Parameters

    • value: number

    Returns void

  • get s(): number
  • Gaussian frequency deviation (default 0.01)

    -

    Returns number

  • set s(value): void
  • Parameters

    • value: number

    Returns void

  • get series(): "tenney" | "farey"
  • Series of rationals to use

    -

    Returns "tenney" | "farey"

  • set series(value): void
  • Parameters

    • value: "tenney" | "farey"

    Returns void

Methods

  • Calculate the harmonic entropy of a musical interval measured in cents.

    +

Constructors

Properties

ratios?: [number, number][]
table: [number, number][]

Accessors

  • get N(): number
  • Max height of rationals (Benedetti or Wilson depending on series)

    +

    Returns number

  • set N(value): void
  • Parameters

    • value: number

    Returns void

  • get a(): number
  • Rényi order

    +

    Returns number

  • set a(value): void
  • Parameters

    • value: number

    Returns void

  • get maxCents(): number
  • Upper bound of tabulation

    +

    Returns number

  • set maxCents(value): void
  • Parameters

    • value: number

    Returns void

  • get minCents(): number
  • Lower bound of tabulation

    +

    Returns number

  • set minCents(value): void
  • Parameters

    • value: number

    Returns void

  • get normalize(): boolean
  • Boolean flag to normalize the result by Hartley entropy

    +

    Returns boolean

  • set normalize(value): void
  • Parameters

    • value: boolean

    Returns void

  • get res(): number
  • Tabulation delta in cents

    +

    Returns number

  • set res(value): void
  • Parameters

    • value: number

    Returns void

  • get s(): number
  • Gaussian frequency deviation (default 0.01)

    +

    Returns number

  • set s(value): void
  • Parameters

    • value: number

    Returns void

  • get series(): "tenney" | "farey"
  • Series of rationals to use

    +

    Returns "tenney" | "farey"

  • set series(value): void
  • Parameters

    • value: "tenney" | "farey"

    Returns void

Methods

  • Calculate the harmonic entropy of a musical interval measured in cents.

    Parameters

    • cents: number

      Width of the interval.

    Returns number

    The harmonic entropy of the input in natural units.

    Throws

    An error if the input is outside the range of .minCents and .maxCents.

    -
  • Calculate the harmonic entropy of a rational number.

    +
  • Calculate the harmonic entropy of a rational number.

    Parameters

    • value: FractionValue

      Fractional value.

    Returns number

    The harmonic entropy of the input in natural units.

    Throws

    An error if the input is outside of the tablated range.

    -
  • Serialize the entropy calculator to a JSON compatible object.

    +
  • Serialize the entropy calculator to a JSON compatible object.

    Returns {
        options: HarmonicEntropyOptions;
        tableY: number[];
        type: string;
    }

    The serialized object with property type set to 'EntropyCalculator'.

    -
  • Revive a EntropyCalculator instance produced by EntropyCalculator.toJSON(). Return everything else as is.

    Intended usage:

    const data = JSON.parse(serializedData, EntropyCalculator.reviver);
     

    Parameters

    • key: string

      Property name.

    • value: any

      Property value.

    Returns any

    Deserialized EntropyCalculator instance or other data without modifications.

    -
\ No newline at end of file +
\ No newline at end of file diff --git a/harmonic-entropy/functions/harmonicEntropy.html b/harmonic-entropy/functions/harmonicEntropy.html index a94a1d2..b6c19f6 100644 --- a/harmonic-entropy/functions/harmonicEntropy.html +++ b/harmonic-entropy/functions/harmonicEntropy.html @@ -2,4 +2,4 @@

Parameters

Returns [number, number][]

Array of [cents, entropy (in natural units)].

-
\ No newline at end of file +
\ No newline at end of file diff --git a/harmonic-entropy/functions/precalculateRatios.html b/harmonic-entropy/functions/precalculateRatios.html index cf59a62..e1e664c 100644 --- a/harmonic-entropy/functions/precalculateRatios.html +++ b/harmonic-entropy/functions/precalculateRatios.html @@ -1,4 +1,4 @@ precalculateRatios | harmonic-entropy

Function precalculateRatios

  • Precalculate the set of ratios considered when calculating harmonicEntropy.

    Parameters

    Returns [number, number][]

    Array of [numerator, denominator] pairs.

    -
\ No newline at end of file +
\ No newline at end of file diff --git a/harmonic-entropy/index.html b/harmonic-entropy/index.html index 6d876bf..6a16ac1 100644 --- a/harmonic-entropy/index.html +++ b/harmonic-entropy/index.html @@ -7,7 +7,7 @@

Other resources

You can read about how harmonic entropy relates to musical concodrance in the XenWiki article.

Examples

Compute the entropy graph for the range from 0 cents to 2400 cents (two octaves).

-
import {type HarmonicEntropyOptions, precalculateRatios, harmonicEntropy} from 'harmonic-entropy';

const options: HarmonicEntropyOptions = {
N: 10000, // Maximum Benedetti height of rationals to consider (default)
s: 0.01, // Gaussian frequency deviation (default)
a: 1, // Rényi order (defaults to Shanon entropy)
series: 'tenney', // Series of rationals to use (default)
minCents: 0, // Lower bound of tabulation (default)
maxCents: 2400, // Upper bound of tabulation (default)
res: 1, // Tabulation delta in cents (default)
normalize: false, // Boolean flag to normalize the result by Hartley entropy (no normalization by default)
};

// Compute the set of rational numbers to consider.
const ratios = precalculateRatios(options);

// Compute the table of [cents, entropy] pairs. Entropy is measured in natural units.
const table = harmonicEntropy(options, ratios);

// This would be replaced by passing the table your favorite plotting library.
console.log(table);

/*
[
[0, 2.465367706139234],
[1, 2.4695232705775982],
[2, 2.481975530994572],
[3, 2.5026079139822173],
[4, 2.5312627678840913],
[5, 2.5676902925403278],
...
[2399, 3.900196510219676],
[2400, 3.898697709259859],
]
*/ +
import {
type HarmonicEntropyOptions,
precalculateRatios,
harmonicEntropy
} from 'harmonic-entropy';

const options: HarmonicEntropyOptions = {
N: 10000, // Maximum Benedetti height of rationals to consider (default)
s: 0.01, // Gaussian frequency deviation (default)
a: 1, // Rényi order (defaults to Shanon entropy)
series: 'tenney', // Series of rationals to use (default)
minCents: 0, // Lower bound of tabulation (default)
maxCents: 2400, // Upper bound of tabulation (default)
res: 1, // Tabulation delta in cents (default)
normalize: false, // Boolean flag to normalize the result by Hartley entropy (no normalization by default)
};

// Compute the set of rational numbers to consider.
const ratios = precalculateRatios(options);

// Compute the table of [cents, entropy] pairs. Entropy is measured in natural units.
const table = harmonicEntropy(options, ratios);

// This would be replaced by passing the table your favorite plotting library.
console.log(table);

/*
[
[0, 2.465367706139234],
[1, 2.4695232705775982],
[2, 2.481975530994572],
[3, 2.5026079139822173],
[4, 2.5312627678840913],
[5, 2.5676902925403278],
...
[2399, 3.900196510219676],
[2400, 3.898697709259859],
]
*/

Compute harmonic entropy of individual musical intervals.

import {EntropyCalculator} from 'harmonic-entropy';

const options = {maxCents: 1200};

// Preparing the internal tables takes some time.
const entropy = new EntropyCalculator(options);

// Evaluating entropy is fast.
const pureFifthEntropy = entropy.ofFraction(3/2);
console.log(pureFifthEntropy); // 4.121900707092091

// Tablulated values are linearly interpolated
const majorSixthEntropy = entropy.ofFraction('5/3');
console.log(majorSixthEntropy); // 4.42017406844399

// Intervals measured in cents are also supported in addition to frequency ratios.
const perfectFifthEntropy = entropy.ofCents(700);
console.log(perfectFifthEntropy); // 4.126342260377048

// Store internal tables for later.
const SERIALIZED = JSON.stringify(entropy); diff --git a/harmonic-entropy/types/HarmonicEntropyOptions.html b/harmonic-entropy/types/HarmonicEntropyOptions.html index 6848de2..d8d65fb 100644 --- a/harmonic-entropy/types/HarmonicEntropyOptions.html +++ b/harmonic-entropy/types/HarmonicEntropyOptions.html @@ -7,4 +7,4 @@
  • Optional res?: number

    Tabulation delta in cents (default 1)

  • Optional s?: number

    Gaussian frequency deviation (default 0.01)

  • Optional series?: "tenney" | "farey"

    Series of rationals to use (default 'tenney')

    -
  • \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/assets/icons.js b/ji-lattice/assets/icons.js new file mode 100644 index 0000000..b79c9e8 --- /dev/null +++ b/ji-lattice/assets/icons.js @@ -0,0 +1,15 @@ +(function(svg) { + svg.innerHTML = ``; + svg.style.display = 'none'; + if (location.protocol === 'file:') { + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateUseElements); + else updateUseElements() + function updateUseElements() { + document.querySelectorAll('use').forEach(el => { + if (el.getAttribute('href').includes('#icon-')) { + el.setAttribute('href', el.getAttribute('href').replace(/.*#/, '#')); + } + }); + } + } +})(document.body.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))) \ No newline at end of file diff --git a/ji-lattice/assets/icons.svg b/ji-lattice/assets/icons.svg new file mode 100644 index 0000000..7dead61 --- /dev/null +++ b/ji-lattice/assets/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ji-lattice/assets/main.js b/ji-lattice/assets/main.js index 3092fea..d6f1388 100644 --- a/ji-lattice/assets/main.js +++ b/ji-lattice/assets/main.js @@ -1,8 +1,8 @@ "use strict"; -"use strict";(()=>{var Ie=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ie(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",H="mouseup",J={x:0,y:0},fe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",pe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`,this.updateIndexHeadingVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.updateIndexHeadingVisibility()}updateIndexHeadingVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}};var Z=class extends C{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +"use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(console.log("Show page"),document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){console.log("Scorlling");let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ve(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ne(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ve(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ne(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/ji-lattice/assets/navigation.js b/ji-lattice/assets/navigation.js index dda4e66..513b2f4 100644 --- a/ji-lattice/assets/navigation.js +++ b/ji-lattice/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA42TQWvDIBSA/4vnsm6hW2nPG720DMroZezwiM48kqjoK7SM/feZEKhm1uSon9+H4PPzh5G4ENuyNy4FWzADVPkVXY1wy27voaK28aBGxdm2eNysn56L30XkffjTKbfbn/J3FvkelXg3hFq5cWaE59QypZmVPRBhee9KMZ1qHc4N4UlYvxyHAjRVSQfmudCgVDf1+6zK/ubLHsT2yyoQawsodxb4dZPSA5yJtMJK0Q2DSzVuNJfQ/ARNUu9JRjUWW3FEJddFyg9wJuJKTfQKtSYoVqlMdCAXqrR/MEfxXws6Ac9lDKhumpOJgU3owwzfKwz4X+TrD9Zc4bowBAAA" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WUQU+DMBhA/0vPi1M2XbYzhsuMRs08GA8NVGiA0rTfEhfjfxcQs7Z8tOzYvr4HbQrv3wTYF5Aduc9yRhZEUijaEZwk08tu7qqAumpByUVGdtH1dnNzG/0sLG8VY+YqnuO+tusxu5sP+Yni2Z4L9iiBN0K7GQfPqXlKMyt7CsDTqVey6WWt8Sm7PNR7OFbAD0y1QzdloFAFD1zijnfyPx/y35Kn7dn9PIq03/qym7fdu7Wh0YrnAvN64BFLRXmeKJqd0Mca2BOpmcpZd6c11jjTWQnz7LCIe4Z2pskOtEIDPfGoUvGaPXORbyLMN3Ao8iILpthk5A97IjptAGJaNkCjNZaxFvhCRdPeOg32r8/oGNyXkVR0Pwg0MbCAPnzIU4UBz4vgF8RaMAp9/AKOg+reCAYAAA==" \ No newline at end of file diff --git a/ji-lattice/assets/search.js b/ji-lattice/assets/search.js index 362eb6b..4ecd7fe 100644 --- a/ji-lattice/assets/search.js +++ b/ji-lattice/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/ji-lattice/assets/style.css b/ji-lattice/assets/style.css index 98a4377..778b949 100644 --- a/ji-lattice/assets/style.css +++ b/ji-lattice/assets/style.css @@ -327,17 +327,14 @@ dd { } /* Footer */ -.tsd-generator { +footer { border-top: 1px solid var(--color-accent); padding-top: 1rem; padding-bottom: 1rem; max-height: 3.5rem; } - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; +.tsd-generator { + margin: 0 1em; } .container-main { @@ -405,7 +402,8 @@ dd { } body { background: var(--color-background); - font-family: "Segoe UI", sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; color: var(--color-text); } diff --git a/ji-lattice/functions/WGP9.html b/ji-lattice/functions/WGP9.html new file mode 100644 index 0000000..8193355 --- /dev/null +++ b/ji-lattice/functions/WGP9.html @@ -0,0 +1,4 @@ +WGP9 | ji-lattice

    Function WGP9

    • Get Wilson-Grady-Pakkanen coordinates for the first 9 primes.

      +

      Parameters

      • equaveIndex: number = 0

        Index of the prime to use as the interval of equivalence.

        +

      Returns LatticeOptions3D

      An array of horizontal coordinates for each prime and the same for vertical and depthwise coordinates.

      +
    \ No newline at end of file diff --git a/ji-lattice/functions/align.html b/ji-lattice/functions/align.html index 78efe9a..eb488ab 100644 --- a/ji-lattice/functions/align.html +++ b/ji-lattice/functions/align.html @@ -1,5 +1,5 @@ -align | ji-lattice

    Function align

    • Rotate coordinates to make one of the primes horizontal.

      +align | ji-lattice

      Function align

      • Rotate coordinates to make one of the primes horizontal.

        Parameters

        • options: LatticeOptions

          Lattice options with coordinates to modify in-place.

        • horizontalIndex: number

          Index of prime to make horizontal.

        • Optional tonnetzIndex: number

          Index of another prime to align with the up-left direction of a triangular lattice. Coordinates are sheared as necessary.

          -

        Returns void

      Generated using TypeDoc

      \ No newline at end of file +

    Returns void

    \ No newline at end of file diff --git a/ji-lattice/functions/kraigGrady9.html b/ji-lattice/functions/kraigGrady9.html index 66ebc47..15872e1 100644 --- a/ji-lattice/functions/kraigGrady9.html +++ b/ji-lattice/functions/kraigGrady9.html @@ -1,4 +1,4 @@ -kraigGrady9 | ji-lattice

    Function kraigGrady9

    \ No newline at end of file diff --git a/ji-lattice/functions/mergeEdges.html b/ji-lattice/functions/mergeEdges.html index a3204c7..6f7a97b 100644 --- a/ji-lattice/functions/mergeEdges.html +++ b/ji-lattice/functions/mergeEdges.html @@ -1,4 +1,4 @@ -mergeEdges | ji-lattice

    Function mergeEdges

    \ No newline at end of file diff --git a/ji-lattice/functions/mergeEdges3D.html b/ji-lattice/functions/mergeEdges3D.html new file mode 100644 index 0000000..236bac5 --- /dev/null +++ b/ji-lattice/functions/mergeEdges3D.html @@ -0,0 +1,4 @@ +mergeEdges3D | ji-lattice

    Function mergeEdges3D

    • Combine edges that share an endpoint and slope into longer ones.

      +

      Parameters

      • edges: Edge3D[]

        Large number of short edges to merge.

        +

      Returns Edge3D[]

      Smaller number of long edges.

      +
    \ No newline at end of file diff --git a/ji-lattice/functions/modVal.html b/ji-lattice/functions/modVal.html index 74a1cd3..02ee5c3 100644 --- a/ji-lattice/functions/modVal.html +++ b/ji-lattice/functions/modVal.html @@ -1,6 +1,7 @@ -modVal | ji-lattice

    Function modVal

    • Calculate rounded logarithms modulo divisions. All forced to be unique.

      -

      Parameters

      • logs: number[]

        Logarithms of primes.

        +modVal | ji-lattice

        Function modVal

        • Calculate rounded logarithms modulo divisions. All forced to be unique.

          +

          Parameters

          • equaveIndex: number

            Index of the prime of equivalence.

            +
          • logs: number[]

            Logarithms of primes.

          • divisions: number

            Number of divisions of the first prime.

          • searchResolution: number = 0

            Resolution for GPV search. Set to 0 to disable (default).

          Returns number[]

          Array of steps for each prime modulo the number of divisions.

          -

        Generated using TypeDoc

        \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/functions/primeRing72.html b/ji-lattice/functions/primeRing72.html index 247a120..c82c8c5 100644 --- a/ji-lattice/functions/primeRing72.html +++ b/ji-lattice/functions/primeRing72.html @@ -1,5 +1,6 @@ -primeRing72 | ji-lattice

    Function primeRing72

    • Compute prime ring 72 coordinates.

      -

      Parameters

    \ No newline at end of file diff --git a/ji-lattice/functions/primeSphere.html b/ji-lattice/functions/primeSphere.html new file mode 100644 index 0000000..b2e7a9d --- /dev/null +++ b/ji-lattice/functions/primeSphere.html @@ -0,0 +1,6 @@ +primeSphere | ji-lattice

    Function primeSphere

    • Compute coordinates based on sizes of primes that lie on the surface of a sphere offset on the x-axis.

      +

      Parameters

      • equaveIndex: number = 0

        Index of the prime to use as the interval of equivalence.

        +
      • Optional logs: number[]

        Logarithms of (formal) primes with the prime of equivalence first. Defaults to the first 24 actual primes.

        +
      • searchResolution: number = 1024

        Search resolution for optimizing orthogonality of the resulting set.

        +

      Returns {
          depthwiseCoordinates: number[];
          horizontalCoordinates: number[];
          verticalCoordinates: number[];
      }

      An array of horizontal coordinates for each prime and the same for vertical and depthwise coordinates.

      +
      • depthwiseCoordinates: number[]
      • horizontalCoordinates: number[]
      • verticalCoordinates: number[]
    \ No newline at end of file diff --git a/ji-lattice/functions/scottDakota24.html b/ji-lattice/functions/scottDakota24.html index f42161d..38596f4 100644 --- a/ji-lattice/functions/scottDakota24.html +++ b/ji-lattice/functions/scottDakota24.html @@ -1,4 +1,5 @@ -scottDakota24 | ji-lattice

    Function scottDakota24

    • Compute prime ring 24 coordinates based on Scott Dakota's conventions.

      -

      Parameters

    \ No newline at end of file diff --git a/ji-lattice/functions/shortestEdge.html b/ji-lattice/functions/shortestEdge.html index a7aa950..dc9f6c3 100644 --- a/ji-lattice/functions/shortestEdge.html +++ b/ji-lattice/functions/shortestEdge.html @@ -1,5 +1,5 @@ -shortestEdge | ji-lattice

    Function shortestEdge

    \ No newline at end of file diff --git a/ji-lattice/functions/spanGrid.html b/ji-lattice/functions/spanGrid.html index 46f1422..c2e47bf 100644 --- a/ji-lattice/functions/spanGrid.html +++ b/ji-lattice/functions/spanGrid.html @@ -1,5 +1,5 @@ -spanGrid | ji-lattice

    Function spanGrid

    \ No newline at end of file diff --git a/ji-lattice/functions/spanLattice.html b/ji-lattice/functions/spanLattice.html index 6bf91a6..c1b13eb 100644 --- a/ji-lattice/functions/spanLattice.html +++ b/ji-lattice/functions/spanLattice.html @@ -1,5 +1,5 @@ -spanLattice | ji-lattice

    Function spanLattice

    \ No newline at end of file diff --git a/ji-lattice/functions/spanLattice3D.html b/ji-lattice/functions/spanLattice3D.html new file mode 100644 index 0000000..2704081 --- /dev/null +++ b/ji-lattice/functions/spanLattice3D.html @@ -0,0 +1,5 @@ +spanLattice3D | ji-lattice

    Function spanLattice3D

    • Compute vertices and edges for a 2D graph representing the lattice of a musical scale in just intonation.

      +

      Parameters

      • monzos: number[][]

        Prime exponents of the musical intervals in the scale.

        +
      • options: LatticeOptions3D

        Options for connecting vertices in the graph.

        +

      Returns {
          edges: Edge3D[];
          vertices: Vertex3D[];
      }

      Vertices and edges of the graph.

      +
    \ No newline at end of file diff --git a/ji-lattice/index.html b/ji-lattice/index.html index 7daa2a4..91f48b0 100644 --- a/ji-lattice/index.html +++ b/ji-lattice/index.html @@ -1,4 +1,4 @@ -ji-lattice

    ji-lattice

    ji-lattice

    Algorithms for projecting just intonation and equally tempered scales onto the screen.

    +ji-lattice

    ji-lattice

    ji-lattice

    Algorithms for projecting just intonation and equally tempered scales onto the screen.

    Installation

    npm i ji-lattice
     

    Documentation

    Below are some examples. The main API documentation is hosted on the project Github pages.

    @@ -9,4 +9,4 @@

    Equal temperament

    import {spanGrid} from 'ji-lattice';

    const numberOfNotesPerOctave = 12;
    const pentatonicMajor = [0, 2, 4, 7, 9];
    const perfectFifth = 7;
    const majorThird = 4;

    const options = {
    modulus: numberOfNotesPerOctave,
    delta1: perfectFifth,
    delta1X: 1,
    delta1Y: 0,
    delta2: majorThird,
    delta2X: 0,
    delta2Y: -1,
    minX: -2,
    maxX: 2,
    minY: -2,
    maxY: 2,
    edgeVectors: [
    [1, 0],
    [0, -1],
    ],
    };

    const {vertices, edges} = spanGrid(pentatonicMajor, options);

    /*
    const vertices = [
    {x: -2, y: 2, indices: [1]},
    {x: -2, y: -1, indices: [1]},
    {x: -1, y: 2, indices: [4]},
    {x: -1, y: -1, indices: [4]},
    {x: 0, y: 2, indices: [2]},
    {x: 0, y: 0, indices: [0]},
    {x: 0, y: -1, indices: [2]},
    {x: 1, y: 0, indices: [3]},
    {x: 2, y: 0, indices: [1]},
    ];

    const edges = [
    {x1: -2, y1: 2, x2: -1, y2: 2, type: 'custom'},
    {x1: -2, y1: -1, x2: -1, y2: -1, type: 'custom'},
    {x1: -1, y1: 2, x2: 0, y2: 2, type: 'custom'},
    {x1: -1, y1: -1, x2: 0, y2: -1, type: 'custom'},
    {x1: 0, y1: 0, x2: 0, y2: -1, type: 'custom'},
    {x1: 0, y1: 0, x2: 1, y2: 0, type: 'custom'},
    {x1: 1, y1: 0, x2: 2, y2: 0, type: 'custom'},
    ];
    */
    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/modules.html b/ji-lattice/modules.html index 0f5708d..5c49863 100644 --- a/ji-lattice/modules.html +++ b/ji-lattice/modules.html @@ -1,17 +1,24 @@ -ji-lattice

    Generated using TypeDoc

    \ No newline at end of file +ji-lattice
    \ No newline at end of file diff --git a/ji-lattice/types/Edge.html b/ji-lattice/types/Edge.html index 4e0abaa..3360c6f 100644 --- a/ji-lattice/types/Edge.html +++ b/ji-lattice/types/Edge.html @@ -1,7 +1,7 @@ -Edge | ji-lattice

    Type alias Edge

    Edge: {
        type: EdgeType;
        x1: number;
        x2: number;
        y1: number;
        y2: number;
    }

    An edge connecting two vertices of a 2D graph.

    +Edge | ji-lattice

    Type alias Edge

    Edge: {
        type: EdgeType;
        x1: number;
        x2: number;
        y1: number;
        y2: number;
    }

    An edge connecting two vertices of a 2D graph.

    Type declaration

    • type: EdgeType

      Type of connection.

    • x1: number

      First horizontal coordinate.

    • x2: number

      Second horizontal coordinate.

    • y1: number

      First vertical coordinate.

    • y2: number

      Second vertical coordinate.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/types/Edge3D.html b/ji-lattice/types/Edge3D.html new file mode 100644 index 0000000..81e31c4 --- /dev/null +++ b/ji-lattice/types/Edge3D.html @@ -0,0 +1,9 @@ +Edge3D | ji-lattice

    Type alias Edge3D

    Edge3D: {
        type: EdgeType;
        x1: number;
        x2: number;
        y1: number;
        y2: number;
        z1: number;
        z2: number;
    }

    An edge connecting two vertices of a 3D graph.

    +

    Type declaration

    • type: EdgeType

      Type of connection.

      +
    • x1: number

      First horizontal coordinate.

      +
    • x2: number

      Second horizontal coordinate.

      +
    • y1: number

      First vertical coordinate.

      +
    • y2: number

      Second vertical coordinate.

      +
    • z1: number

      First depthwise coordinate.

      +
    • z2: number

      Second depthwise coordinate.

      +
    \ No newline at end of file diff --git a/ji-lattice/types/EdgeType.html b/ji-lattice/types/EdgeType.html index 4480f23..65cc016 100644 --- a/ji-lattice/types/EdgeType.html +++ b/ji-lattice/types/EdgeType.html @@ -1,6 +1,6 @@ -EdgeType | ji-lattice

    Type alias EdgeType

    EdgeType: "primary" | "custom" | "auxiliary" | "gridline"

    The type of an edge connecting two vertices or a gridline.

    +EdgeType | ji-lattice

    Type alias EdgeType

    EdgeType: "primary" | "custom" | "auxiliary" | "gridline"

    The type of an edge connecting two vertices or a gridline.

    "primary": Prime-wise connection between two vertices.

    "custom": User-defined connection between two vertices.

    "auxiliary": Connection where at least one vertex is auxiliary.

    "gridline": Line extending across the screen.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/types/GridLineOptions.html b/ji-lattice/types/GridLineOptions.html index 277a665..eb59172 100644 --- a/ji-lattice/types/GridLineOptions.html +++ b/ji-lattice/types/GridLineOptions.html @@ -1,6 +1,6 @@ -GridLineOptions | ji-lattice

    Type alias GridLineOptions

    GridLineOptions: {
        delta1?: boolean;
        delta2?: boolean;
        diagonal1?: boolean;
        diagonal2?: boolean;
    }

    Options for gridlines of spanGrid.

    +GridLineOptions | ji-lattice

    Type alias GridLineOptions

    GridLineOptions: {
        delta1?: boolean;
        delta2?: boolean;
        diagonal1?: boolean;
        diagonal2?: boolean;
    }

    Options for gridlines of spanGrid.

    Type declaration

    • Optional delta1?: boolean

      Span gridlines in the first direction.

    • Optional delta2?: boolean

      Span gridlines in the second direction.

    • Optional diagonal1?: boolean

      Span gridlines in the difference of the primary directions.

    • Optional diagonal2?: boolean

      Span gridlines in the sum of the primary directions.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/types/GridOptions.html b/ji-lattice/types/GridOptions.html index 3264c7c..eacf8f9 100644 --- a/ji-lattice/types/GridOptions.html +++ b/ji-lattice/types/GridOptions.html @@ -1,4 +1,4 @@ -GridOptions | ji-lattice

    Type alias GridOptions

    GridOptions: {
        delta1: number;
        delta1X: number;
        delta1Y: number;
        delta2: number;
        delta2X: number;
        delta2Y: number;
        edgeVectors?: number[][];
        gridLines?: GridLineOptions;
        maxEdges?: number;
        maxVertices?: number;
        maxX: number;
        maxY: number;
        mergeEdges?: boolean;
        minX: number;
        minY: number;
        modulus: number;
        range?: number;
    }

    Options for spanGrid.

    +GridOptions | ji-lattice

    Type alias GridOptions

    GridOptions: {
        delta1: number;
        delta1X: number;
        delta1Y: number;
        delta2: number;
        delta2X: number;
        delta2Y: number;
        edgeVectors?: number[][];
        gridLines?: GridLineOptions;
        maxEdges?: number;
        maxVertices?: number;
        maxX: number;
        maxY: number;
        mergeEdges?: boolean;
        minX: number;
        minY: number;
        modulus: number;
        range?: number;
    }

    Options for spanGrid.

    Type declaration

    • delta1: number

      Number of scale steps to take in the first direction.

    • delta1X: number

      Number of horizontal screen units to advance in the first direction.

    • delta1Y: number

      Number of vertical screen units to advance in the first direction.

      @@ -16,4 +16,4 @@
    • minY: number

      Low vertical extent of view in screen units.

    • modulus: number

      Number of scale steps in the interval of equivalence.

    • Optional range?: number

      Search range for discovering vertices and edges in view.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/types/LatticeOptions.html b/ji-lattice/types/LatticeOptions.html index 695c750..956722b 100644 --- a/ji-lattice/types/LatticeOptions.html +++ b/ji-lattice/types/LatticeOptions.html @@ -1,7 +1,7 @@ -LatticeOptions | ji-lattice

    Type alias LatticeOptions

    LatticeOptions: {
        edgeMonzos?: number[][];
        horizontalCoordinates: number[];
        maxDistance?: number;
        mergeEdges?: boolean;
        verticalCoordinates: number[];
    }

    Options for spanLattice.

    +LatticeOptions | ji-lattice

    Type alias LatticeOptions

    LatticeOptions: {
        edgeMonzos?: number[][];
        horizontalCoordinates: number[];
        maxDistance?: number;
        mergeEdges?: boolean;
        verticalCoordinates: number[];
    }

    Options for spanLattice.

    Type declaration

    • Optional edgeMonzos?: number[][]

      Prime-count vectors of connections in addition the the primes.

    • horizontalCoordinates: number[]

      Mapping for prime x-coordinates.

    • Optional maxDistance?: number

      Maximum prime-wise distance for connecting two inputs.

    • Optional mergeEdges?: boolean

      Flag to merge short edges into a long ones wherever possible.

    • verticalCoordinates: number[]

      Mapping for prime y-coordinates.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/types/LatticeOptions3D.html b/ji-lattice/types/LatticeOptions3D.html new file mode 100644 index 0000000..988e081 --- /dev/null +++ b/ji-lattice/types/LatticeOptions3D.html @@ -0,0 +1,8 @@ +LatticeOptions3D | ji-lattice

    Type alias LatticeOptions3D

    LatticeOptions3D: {
        depthwiseCoordinates: number[];
        edgeMonzos?: number[][];
        horizontalCoordinates: number[];
        maxDistance?: number;
        mergeEdges?: boolean;
        verticalCoordinates: number[];
    }

    Options for spanLattice3D.

    +

    Type declaration

    • depthwiseCoordinates: number[]

      Mapping for prime z-coordinates.

      +
    • Optional edgeMonzos?: number[][]

      Prime-count vectors of connections in addition the the primes.

      +
    • horizontalCoordinates: number[]

      Mapping for prime x-coordinates.

      +
    • Optional maxDistance?: number

      Maximum prime-wise distance for connecting two inputs.

      +
    • Optional mergeEdges?: boolean

      Flag to merge short edges into a long ones wherever possible.

      +
    • verticalCoordinates: number[]

      Mapping for prime y-coordinates.

      +
    \ No newline at end of file diff --git a/ji-lattice/types/MultiVertex.html b/ji-lattice/types/MultiVertex.html index ccc354d..acf9b34 100644 --- a/ji-lattice/types/MultiVertex.html +++ b/ji-lattice/types/MultiVertex.html @@ -1,5 +1,5 @@ -MultiVertex | ji-lattice

    Type alias MultiVertex

    MultiVertex: {
        indices: number[];
        x: number;
        y: number;
    }

    A vertex of a 2D graph.

    +MultiVertex | ji-lattice

    Type alias MultiVertex

    MultiVertex: {
        indices: number[];
        x: number;
        y: number;
    }

    A vertex of a 2D graph.

    Type declaration

    • indices: number[]

      Indices to input array.

    • x: number

      Horizontal coordinate.

    • y: number

      Vertical coordinate.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/types/Vertex.html b/ji-lattice/types/Vertex.html index c0128b1..49b6c1c 100644 --- a/ji-lattice/types/Vertex.html +++ b/ji-lattice/types/Vertex.html @@ -1,5 +1,5 @@ -Vertex | ji-lattice

    Type alias Vertex

    Vertex: {
        index?: number;
        x: number;
        y: number;
    }

    A vertex of a 2D graph.

    +Vertex | ji-lattice

    Type alias Vertex

    Vertex: {
        index?: number;
        x: number;
        y: number;
    }

    A vertex of a 2D graph.

    Type declaration

    • Optional index?: number

      Index to input array.

    • x: number

      Horizontal coordinate.

    • y: number

      Vertical coordinate.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/ji-lattice/types/Vertex3D.html b/ji-lattice/types/Vertex3D.html new file mode 100644 index 0000000..2a5e8bd --- /dev/null +++ b/ji-lattice/types/Vertex3D.html @@ -0,0 +1,6 @@ +Vertex3D | ji-lattice

    Type alias Vertex3D

    Vertex3D: {
        index?: number;
        x: number;
        y: number;
        z: number;
    }

    A vertex of a 3D graph.

    +

    Type declaration

    • Optional index?: number

      Index to input array.

      +
    • x: number

      Horizontal coordinate.

      +
    • y: number

      Vertical coordinate.

      +
    • z: number

      Depthwise coordinate.

      +
    \ No newline at end of file diff --git a/moment-of-symmetry/assets/navigation.js b/moment-of-symmetry/assets/navigation.js index 6e47b02..53db4f3 100644 --- a/moment-of-symmetry/assets/navigation.js +++ b/moment-of-symmetry/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WWy07DMBBF/yVrnhUUwbIqr0VLBUgsEIuhmbYWsR3ZrsRD/DtO0iRuYo+D1FXuvcfjeDzp609i8NMkV8lMpngvVvIhN0wKnRwkOZiNFZgwqFawRH3c8RxtDM+s8YOJNLkanY9/Dxycpkl6GOSFmc0UtuuNjUaAHusA+AIUCjMAvWekwBPQ2OOZr9yiHKlDOLm8OD0fOZQpAy5Fahef4lohdlFdfThvLjkTkIWBO8N/iAaKTVHIyhFj1h3WJdXP43ntj+uB6ZkU3754+XxA/mkJWWAHrRbjPIJYeyGNECMEyxhcwzNwAdz7Nh0pRoEsu5HqOnUYq61YljfguBH3KeMzFyC+CEAtEoB3xexEuEWBCoxUnfNtWT4fgU13g8Yeq4/myAQEt8uMpb58pRDRdVUo9q9eC+l64jipyg7zbqljIWHmDlQqUAdAjUxAmJ6UJ+Ij1BoR5/CBtjFmkPsArUoherPIAey0w9MIYA4cQ4BCI+Pe18fJlrKqvRI8lCw1Ol6M2lC81Oj4AoztexEi1DINeWLfwRpKjY67/wQCFNcSh1XffgJVGQhQXhoC06IRCYDuT/QW0IhkP+o8Y8UquzPwgvYtBMz4vg8tyJHJmoyc7A/eBRY/Jr1jMezuLfH2B5EdWbLbCgAA" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA43WXW+bMBQG4P/Cdbeu3dppvUuUfknLh5ZKvZim6iScgFWwke1Ma6f99xkIYMA+RsoV7zkPGA4OP/9GGv/o6CZaihgf+UGsC80EV9FZVIBOTcC4RnmAParzQc3HVOeZKXxlPI5uLq+u/51ZnKIlNQ15ZjpdwDFJTWsAdJROwDcgkesJdK+QguegcOTpt8JQVjQQPn37enF1aSkLBrngsTn5LCtS2KEeYuOK6eYCE4noF+t8urcSGspl+cWmImQ2MzaUmuPhfuVuVxO7l4K/u9qr4xP6t3vIPCvospDzA3jiRNogJHgvY/I1PEHOIXfeTSsKzsjjbLleLV6W6+3L7PvmYTa/feq43yAZ7LJyUhx1ffuzzUKW3Ql5G1uXdjjyffVqnbdhH7j+YgP8jQCakAB2kpmt5h45StBCDsams1x1BBufdjAzLS7NigkEj/uMxa7+OiFak/pCcfxGd8iwJswJWQ2uc0mDEhLTDyBjjsoDtTGBMDWvnohLaDKiPYdXNIOxhMIFdClFjLY4CzhlHy4CwApy9AFlRrY7b19OjpRJzSuR+zqrjG4vd3Bfe5XR7RvQZu65T2hiGnHsij2lzQP3X23Zu3cxVUa3298qHsUuCWP11wlB1QUExHW6EjnjkLmULiWIojqHZ+dqQwJQ1ONRk56NKjJWnuU0D06oX0JhGoutlownTqdNCUK7/kU7w4rJZWkx7/+PbLD8MeHc5f3Vo1P8+g/bOx73AwwAAA==" \ No newline at end of file diff --git a/moment-of-symmetry/assets/search.js b/moment-of-symmetry/assets/search.js index 2f23eec..aa259e4 100644 --- a/moment-of-symmetry/assets/search.js +++ b/moment-of-symmetry/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/moment-of-symmetry/functions/allForEdo.html b/moment-of-symmetry/functions/allForEdo.html index dbb3431..ef26643 100644 --- a/moment-of-symmetry/functions/allForEdo.html +++ b/moment-of-symmetry/functions/allForEdo.html @@ -4,4 +4,4 @@
  • Optional maxSize: number

    Maximum size of a MOS scale in the result.

  • Optional maxHardness: number

    Maximum hardness of the step ratio L/s.

  • Returns MosScaleInfo[]

    Array of information about the supported MOS scales.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/anyForEdo.html b/moment-of-symmetry/functions/anyForEdo.html index 5c57319..43d7c4c 100644 --- a/moment-of-symmetry/functions/anyForEdo.html +++ b/moment-of-symmetry/functions/anyForEdo.html @@ -1,4 +1,4 @@ anyForEdo | moment-of-symmetry

    Function anyForEdo

    • Find a MOS scale supported by the given EDO.

      Parameters

      • edo: number

        Size of the EDO.

      Returns MosScaleInfo

      Information about the supported MOS scale.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/brightGeneratorMonzo.html b/moment-of-symmetry/functions/brightGeneratorMonzo.html index 83c5fb1..fa3a98b 100644 --- a/moment-of-symmetry/functions/brightGeneratorMonzo.html +++ b/moment-of-symmetry/functions/brightGeneratorMonzo.html @@ -2,4 +2,4 @@

    Parameters

    • numberOfLargeSteps: number

      Number of large steps in the MOS pattern.

    • numberOfSmallSteps: number

      Number of small steps in the MOS pattern.

    Returns [number, number]

    An array of [number of large steps in the bright generator, number of small steps in the bright generator].

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/daughterMos.html b/moment-of-symmetry/functions/daughterMos.html index d0757eb..989201c 100644 --- a/moment-of-symmetry/functions/daughterMos.html +++ b/moment-of-symmetry/functions/daughterMos.html @@ -1 +1 @@ -daughterMos | moment-of-symmetry

    Function daughterMos

    • Parameters

      • numberOfLargeSteps: number
      • numberOfSmallSteps: number
      • sizeOfLargeStep: number
      • sizeOfSmallStep: number

      Returns MosScaleInfo

    \ No newline at end of file +daughterMos | moment-of-symmetry

    Function daughterMos

    • Parameters

      • numberOfLargeSteps: number
      • numberOfSmallSteps: number
      • sizeOfLargeStep: number
      • sizeOfSmallStep: number

      Returns MosScaleInfo

    \ No newline at end of file diff --git a/moment-of-symmetry/functions/euclid.html b/moment-of-symmetry/functions/euclid.html index 5451591..4071d92 100644 --- a/moment-of-symmetry/functions/euclid.html +++ b/moment-of-symmetry/functions/euclid.html @@ -2,4 +2,4 @@

    Parameters

    • numberOfTrue: number

      Number of true elements

    • numberOfFalse: number

      Number of false elements

    Returns boolean[]

    The array of evenly mixed booleans

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/generateNotation.html b/moment-of-symmetry/functions/generateNotation.html index 49726b9..8d334d1 100644 --- a/moment-of-symmetry/functions/generateNotation.html +++ b/moment-of-symmetry/functions/generateNotation.html @@ -2,4 +2,4 @@

    Always based on J and 0-indexed even if scale is diatonic.

    Parameters

    • mode: string

      Mode of a MOS scale such as 'LLsLLLs'.

    Returns DiamondMosNotation

    Configuration for notation software.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/generatorRanges.html b/moment-of-symmetry/functions/generatorRanges.html index 052aedb..41fad3d 100644 --- a/moment-of-symmetry/functions/generatorRanges.html +++ b/moment-of-symmetry/functions/generatorRanges.html @@ -2,4 +2,4 @@

    Parameters

    • size: number

      Size of the scales to consider.

    • includeMultiPeriods: boolean = false

      Include scales that split the equave into multiple periods.

    Returns RangeInfo[]

    Information about the ranges of generator that span MOS. Ranges are grouped by period and otherwise sorted in ascending order.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/getHardness.html b/moment-of-symmetry/functions/getHardness.html index 6276ee8..aca19fd 100644 --- a/moment-of-symmetry/functions/getHardness.html +++ b/moment-of-symmetry/functions/getHardness.html @@ -2,4 +2,4 @@

    Parameters

    • sizeOfLargeStep: number

      Size of the large step.

    • sizeOfSmallStep: number

      Size of the small step.

    Returns string

    Name of the step ratio or the name of the hardness range it belongs to.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/isBright.html b/moment-of-symmetry/functions/isBright.html index 701310e..7c21d32 100644 --- a/moment-of-symmetry/functions/isBright.html +++ b/moment-of-symmetry/functions/isBright.html @@ -2,4 +2,4 @@

    Parameters

    • generatorPerPeriod: number | Fraction

      Generator divided by period.

    • size: number

      Size of the scale.

    Returns boolean

    true if the generator creates large intervals when stacked.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/makeEdoMap.html b/moment-of-symmetry/functions/makeEdoMap.html index acc8538..554cec5 100644 --- a/moment-of-symmetry/functions/makeEdoMap.html +++ b/moment-of-symmetry/functions/makeEdoMap.html @@ -1,4 +1,4 @@ makeEdoMap | moment-of-symmetry

    Function makeEdoMap

    • Construct a mapping from EDO size to supported MOS scales.

      Parameters

      • maxSize: number = 12

        Maximum size of the MOS patterns to include.

      Returns Map<number, MosScaleInfo[]>

      A mapping from EDO size to an array of information about the supported MOS scales.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/modeInfo-1.html b/moment-of-symmetry/functions/modeInfo-1.html index a7166ad..7be75b2 100644 --- a/moment-of-symmetry/functions/modeInfo-1.html +++ b/moment-of-symmetry/functions/modeInfo-1.html @@ -3,4 +3,4 @@
  • numberOfSmallSteps: number

    Number of small steps in the MOS pattern.

  • Optional options: ModeInfoOptions

    Options for brightness of the scale and for adding extra names like Ionian (Major).

  • Returns ModeInfo

    An array of mode information.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/modeName.html b/moment-of-symmetry/functions/modeName.html index 5dc16a9..b9d9a29 100644 --- a/moment-of-symmetry/functions/modeName.html +++ b/moment-of-symmetry/functions/modeName.html @@ -2,4 +2,4 @@

    Parameters

    • mode: string

      Mode in step pattern format such as "LLsLLLs".

    • extra: boolean = false

      If true adds extra mode names in parenthesis such as Ionian (Major).

    Returns string | undefined

    Name of the mode.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/mos.html b/moment-of-symmetry/functions/mos.html index 3d243c3..0e7da5a 100644 --- a/moment-of-symmetry/functions/mos.html +++ b/moment-of-symmetry/functions/mos.html @@ -3,4 +3,4 @@
  • numberOfSmallSteps: number

    Number of small steps in the MOS pattern.

  • Optional options: MosOptions

    Options for sizes of the steps and brightness of the scale.

  • Returns number[]

    An array of integers representing the EDO subset. The 0 degree is not included, but the final degree representing the size of the EDO is.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/mosForms.html b/moment-of-symmetry/functions/mosForms.html index 6dacb7c..d419f72 100644 --- a/moment-of-symmetry/functions/mosForms.html +++ b/moment-of-symmetry/functions/mosForms.html @@ -3,4 +3,4 @@
  • Optional maxSize: number

    Maximum size of a MOS pattern.

  • Optional maxLength: number

    Maximum length of the result.

  • Returns Fraction[]

    An array of MOS forms.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/mosModes.html b/moment-of-symmetry/functions/mosModes.html index 092b367..5fee2e8 100644 --- a/moment-of-symmetry/functions/mosModes.html +++ b/moment-of-symmetry/functions/mosModes.html @@ -3,4 +3,4 @@
  • numberOfSmallSteps: number

    Number of small steps in the MOS pattern.

  • extraNames: boolean = false

    If true adds extra mode names in parenthesis such as Ionian (Major).

  • Returns ModeInfo[]

    An array of mode information.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/mosPatterns.html b/moment-of-symmetry/functions/mosPatterns.html index 532753b..1d04a4d 100644 --- a/moment-of-symmetry/functions/mosPatterns.html +++ b/moment-of-symmetry/functions/mosPatterns.html @@ -4,4 +4,4 @@
  • Optional maxSize: number

    Maximum size of a MOS pattern.

  • Optional maxLength: number

    Maximum length of the result.

  • Returns MosInfo[]

    An array of MOS information.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/mosScaleInfo-1.html b/moment-of-symmetry/functions/mosScaleInfo-1.html new file mode 100644 index 0000000..2c807c0 --- /dev/null +++ b/moment-of-symmetry/functions/mosScaleInfo-1.html @@ -0,0 +1 @@ +mosScaleInfo | moment-of-symmetry

    Function mosScaleInfo

    • Parameters

      • numberOfLargeSteps: number
      • numberOfSmallSteps: number
      • sizeOfLargeStep: number = 2
      • sizeOfSmallStep: number = 1

      Returns MosScaleInfo

    \ No newline at end of file diff --git a/moment-of-symmetry/functions/mosSizes.html b/moment-of-symmetry/functions/mosSizes.html index fa2b2d6..5e7fc5c 100644 --- a/moment-of-symmetry/functions/mosSizes.html +++ b/moment-of-symmetry/functions/mosSizes.html @@ -3,4 +3,4 @@
  • Optional maxSize: number

    Maximum size of a MOS pattern.

  • Optional maxLength: number

    Maximum length of the result.

  • Returns number[]

    An array of MOS sizes.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/mosWithDaughter.html b/moment-of-symmetry/functions/mosWithDaughter.html index a35ade5..51f4848 100644 --- a/moment-of-symmetry/functions/mosWithDaughter.html +++ b/moment-of-symmetry/functions/mosWithDaughter.html @@ -4,4 +4,4 @@
  • Optional options: MosWithDaughterOptions

    Options for sizes of the steps, brightness of the scale and flat/sharp relationship.

  • Returns Map<number, "flat" | "sharp" | "both" | "parent">

    A map of integers representing the EDO subset to booleans indicating if the scale degree belongs to the parent MOS or not. The 0 degree is not included, but the final degree representing the size of the EDO is.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/mosWithParent.html b/moment-of-symmetry/functions/mosWithParent.html index fdb5d0a..ae166e3 100644 --- a/moment-of-symmetry/functions/mosWithParent.html +++ b/moment-of-symmetry/functions/mosWithParent.html @@ -4,4 +4,4 @@
  • Optional options: MosWithParentOptions

    Options for sizes of the steps, brightness of the scale and flat/sharp relationship.

  • Returns Map<number, boolean>

    A map of integers representing the EDO subset to booleans indicating if the scale degree belongs to the parent MOS or not. The 0 degree is not included, but the final degree representing the size of the EDO is.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/nthNominal.html b/moment-of-symmetry/functions/nthNominal.html new file mode 100644 index 0000000..fc1b0e7 --- /dev/null +++ b/moment-of-symmetry/functions/nthNominal.html @@ -0,0 +1,4 @@ +nthNominal | moment-of-symmetry

    Function nthNominal

    • Obtain the 0-indexed nth generalized Diamond-mos nominal.

      +

      Parameters

      • n: number

        Index of the nominal.

        +

      Returns string

      A single character from J through Z or a multi-character string like 'JJ' starting from n = 17.

      +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/parentMos.html b/moment-of-symmetry/functions/parentMos.html index 1a8bdfe..ec694cf 100644 --- a/moment-of-symmetry/functions/parentMos.html +++ b/moment-of-symmetry/functions/parentMos.html @@ -1,8 +1,8 @@ parentMos | moment-of-symmetry

    Function parentMos

    • Calculate the parent MOS of a given MOS pattern.

      Parameters

      • mosPattern: string

        MOS pattern such as "5L 2s".

      Returns MosInfo

      Information about the parent MOS.

      -
    • Calculate the parent MOS of a given MOS pattern.

      +
    • Calculate the parent MOS of a given MOS pattern.

      Parameters

      • numberOfLargeSteps: number

        Number of large steps in the MOS pattern.

      • numberOfSmallSteps: number

        Number of small steps in the MOS pattern.

      Returns MosInfo

      Information about the parent MOS.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/scaleInfo-1.html b/moment-of-symmetry/functions/scaleInfo-1.html index 5e4062c..eae33db 100644 --- a/moment-of-symmetry/functions/scaleInfo-1.html +++ b/moment-of-symmetry/functions/scaleInfo-1.html @@ -4,4 +4,4 @@
  • generatorsDown: number

    How many generators to go downwards.

  • numberOfPeriods: number = 1

    Number of periods per octave.

  • Returns ScaleInfo

    Information about the scale.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/splitMosPattern.html b/moment-of-symmetry/functions/splitMosPattern.html index 9bfa7f9..dd11b8d 100644 --- a/moment-of-symmetry/functions/splitMosPattern.html +++ b/moment-of-symmetry/functions/splitMosPattern.html @@ -1,4 +1,4 @@ splitMosPattern | moment-of-symmetry

    Function splitMosPattern

    • Split a string like "5L 2s" into [5, 2].

      Parameters

      • mosPattern: string

        MOS pattern such as "5L 2s".

      Returns [number, number]

      A pair of intergers representing the number of large and small steps.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/stepString.html b/moment-of-symmetry/functions/stepString.html new file mode 100644 index 0000000..c67f995 --- /dev/null +++ b/moment-of-symmetry/functions/stepString.html @@ -0,0 +1,6 @@ +stepString | moment-of-symmetry

    Function stepString

    • Obtain an abstract string like 'LLsLLLs' corresponding to the mode specified.

      +

      Parameters

      • numberOfLargeSteps: number

        Number of large steps in the MOS pattern.

        +
      • numberOfSmallSteps: number

        Number of small steps in the MOS pattern.

        +
      • Optional options: BaseOptions

        Options for brightness of the scale.

        +

      Returns string

      String with the given number of 'L' and 's' characters in the specified mode.

      +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/tamnamsInfo-1.html b/moment-of-symmetry/functions/tamnamsInfo-1.html index 97173f6..074b61c 100644 --- a/moment-of-symmetry/functions/tamnamsInfo-1.html +++ b/moment-of-symmetry/functions/tamnamsInfo-1.html @@ -1,8 +1,8 @@ tamnamsInfo | moment-of-symmetry

    Function tamnamsInfo

    • Retreive TAMNAMS information about a MOS pattern.

      Parameters

      • mosPattern: string

        MOS pattern such as "5L 2s".

      Returns TamnamsInfo | undefined

      Information about the MOS pattern.

      -
    • Retreive TAMNAMS information about a MOS pattern.

      +
    • Retreive TAMNAMS information about a MOS pattern.

      Parameters

      • numberOfLargeSteps: number

        Number of large steps in the MOS pattern.

      • numberOfSmallSteps: number

        Number of small steps in the MOS pattern.

      Returns TamnamsInfo | undefined

      Information about the MOS pattern.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/functions/toBrightGeneratorPerPeriod.html b/moment-of-symmetry/functions/toBrightGeneratorPerPeriod.html index 7a97956..6d2b51d 100644 --- a/moment-of-symmetry/functions/toBrightGeneratorPerPeriod.html +++ b/moment-of-symmetry/functions/toBrightGeneratorPerPeriod.html @@ -2,4 +2,4 @@

    Parameters

    • generatorPerPeriod: number

      Generator divided by period.

    • size: number

      Size of the scale.

    Returns number

    The first parameter. Flipped if it was dark.

    -
  • Parameters

    • generatorPerPeriod: Fraction
    • size: number

    Returns Fraction

  • \ No newline at end of file +
  • Parameters

    • generatorPerPeriod: Fraction
    • size: number

    Returns Fraction

  • \ No newline at end of file diff --git a/moment-of-symmetry/interfaces/ModeInfoOptions.html b/moment-of-symmetry/interfaces/ModeInfoOptions.html index 353089e..59e3502 100644 --- a/moment-of-symmetry/interfaces/ModeInfoOptions.html +++ b/moment-of-symmetry/interfaces/ModeInfoOptions.html @@ -1,8 +1,8 @@ ModeInfoOptions | moment-of-symmetry

    Interface ModeInfoOptions

    Parameters for the modeInfo function.

    -
    interface ModeInfoOptions {
        down?: number;
        extraNames?: boolean;
        up?: number;
    }

    Hierarchy (view full)

    Properties

    interface ModeInfoOptions {
        down?: number;
        extraNames?: boolean;
        up?: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    down?: number

    How many bright generators to go downwards. Also the number of small/minor intervals in the resulting scale. Default = 0.

    -
    extraNames?: boolean

    If true adds extra mode names in parenthesis such as Ionian (Major).

    -
    up?: number

    How many bright generators to go upwards. Also the number of large/major intervals in the resulting scale. Defaults to the maximum possible.

    -
    \ No newline at end of file +
    extraNames?: boolean

    If true adds extra mode names in parenthesis such as Ionian (Major).

    +
    up?: number

    How many bright generators to go upwards. Also the number of large/major intervals in the resulting scale. Defaults to the maximum possible.

    +
    \ No newline at end of file diff --git a/moment-of-symmetry/interfaces/MosOptions.html b/moment-of-symmetry/interfaces/MosOptions.html index 866f369..0a9346a 100644 --- a/moment-of-symmetry/interfaces/MosOptions.html +++ b/moment-of-symmetry/interfaces/MosOptions.html @@ -1,10 +1,10 @@ MosOptions | moment-of-symmetry

    Interface MosOptions

    Parameters for the mos function.

    -
    interface MosOptions {
        down?: number;
        sizeOfLargeStep?: number;
        sizeOfSmallStep?: number;
        up?: number;
    }

    Hierarchy (view full)

    Properties

    interface MosOptions {
        down?: number;
        sizeOfLargeStep?: number;
        sizeOfSmallStep?: number;
        up?: number;
    }

    Hierarchy (view full)

    Properties

    down?: number

    How many bright generators to go downwards. Also the number of small/minor intervals in the resulting scale. Default = 0.

    -
    sizeOfLargeStep?: number

    Size of the large step. Default = 2.

    -
    sizeOfSmallStep?: number

    Size of small step. Default = 1.

    -
    up?: number

    How many bright generators to go upwards. Also the number of large/major intervals in the resulting scale. Defaults to the maximum possible.

    -
    \ No newline at end of file +
    sizeOfLargeStep?: number

    Size of the large step. Default = 2.

    +
    sizeOfSmallStep?: number

    Size of small step. Default = 1.

    +
    up?: number

    How many bright generators to go upwards. Also the number of large/major intervals in the resulting scale. Defaults to the maximum possible.

    +
    \ No newline at end of file diff --git a/moment-of-symmetry/interfaces/MosWithDaughterOptions.html b/moment-of-symmetry/interfaces/MosWithDaughterOptions.html index 6c86e3a..d3498b9 100644 --- a/moment-of-symmetry/interfaces/MosWithDaughterOptions.html +++ b/moment-of-symmetry/interfaces/MosWithDaughterOptions.html @@ -1,12 +1,12 @@ MosWithDaughterOptions | moment-of-symmetry

    Interface MosWithDaughterOptions

    Parameters for the mosWithDaughter function.

    -
    interface MosWithDaughterOptions {
        accidentals?: "flat" | "sharp" | "both";
        down?: number;
        sizeOfLargeStep?: number;
        sizeOfSmallStep?: number;
        up?: number;
    }

    Hierarchy (view full)

    Properties

    interface MosWithDaughterOptions {
        accidentals?: "flat" | "sharp" | "both";
        down?: number;
        sizeOfLargeStep?: number;
        sizeOfSmallStep?: number;
        up?: number;
    }

    Hierarchy (view full)

    Properties

    accidentals?: "flat" | "sharp" | "both"

    How the daughter scale(s) relates to the main scale. Defaults to 'sharp'.

    -
    down?: number

    How many bright generators to go downwards. Also the number of small/minor intervals in the resulting scale. Default = 0.

    -
    sizeOfLargeStep?: number

    Size of the large step. Default = 2.

    -
    sizeOfSmallStep?: number

    Size of small step. Default = 1.

    -
    up?: number

    How many bright generators to go upwards. Also the number of large/major intervals in the resulting scale. Defaults to the maximum possible.

    -
    \ No newline at end of file +
    down?: number

    How many bright generators to go downwards. Also the number of small/minor intervals in the resulting scale. Default = 0.

    +
    sizeOfLargeStep?: number

    Size of the large step. Default = 2.

    +
    sizeOfSmallStep?: number

    Size of small step. Default = 1.

    +
    up?: number

    How many bright generators to go upwards. Also the number of large/major intervals in the resulting scale. Defaults to the maximum possible.

    +
    \ No newline at end of file diff --git a/moment-of-symmetry/interfaces/MosWithParentOptions.html b/moment-of-symmetry/interfaces/MosWithParentOptions.html index 1b6b1c4..132c8e0 100644 --- a/moment-of-symmetry/interfaces/MosWithParentOptions.html +++ b/moment-of-symmetry/interfaces/MosWithParentOptions.html @@ -1,12 +1,12 @@ MosWithParentOptions | moment-of-symmetry

    Interface MosWithParentOptions

    Parameters for the mosWithParent function.

    -
    interface MosWithParentOptions {
        accidentals?: "flat" | "sharp";
        down?: number;
        sizeOfLargeStep?: number;
        sizeOfSmallStep?: number;
        up?: number;
    }

    Hierarchy (view full)

    Properties

    interface MosWithParentOptions {
        accidentals?: "flat" | "sharp";
        down?: number;
        sizeOfLargeStep?: number;
        sizeOfSmallStep?: number;
        up?: number;
    }

    Hierarchy (view full)

    Properties

    accidentals?: "flat" | "sharp"

    How the main scale relates to the parent. Defaults to 'sharp'.

    -
    down?: number

    How many bright generators to go downwards. Also the number of small/minor intervals in the resulting scale. Default = 0.

    -
    sizeOfLargeStep?: number

    Size of the large step. Default = 2.

    -
    sizeOfSmallStep?: number

    Size of small step. Default = 1.

    -
    up?: number

    How many bright generators to go upwards. Also the number of large/major intervals in the resulting scale. Defaults to the maximum possible.

    -
    \ No newline at end of file +
    down?: number

    How many bright generators to go downwards. Also the number of small/minor intervals in the resulting scale. Default = 0.

    +
    sizeOfLargeStep?: number

    Size of the large step. Default = 2.

    +
    sizeOfSmallStep?: number

    Size of small step. Default = 1.

    +
    up?: number

    How many bright generators to go upwards. Also the number of large/major intervals in the resulting scale. Defaults to the maximum possible.

    +
    \ No newline at end of file diff --git a/moment-of-symmetry/modules.html b/moment-of-symmetry/modules.html index a201aec..166f897 100644 --- a/moment-of-symmetry/modules.html +++ b/moment-of-symmetry/modules.html @@ -3,8 +3,8 @@ MosWithDaughterOptions MosWithParentOptions

    Type Aliases

    Variables

    Functions

    \ No newline at end of file diff --git a/moment-of-symmetry/types/BaseOptions.html b/moment-of-symmetry/types/BaseOptions.html index ed73a89..f20acac 100644 --- a/moment-of-symmetry/types/BaseOptions.html +++ b/moment-of-symmetry/types/BaseOptions.html @@ -1,4 +1,4 @@ BaseOptions | moment-of-symmetry

    Type alias BaseOptions

    BaseOptions: {
        down?: number;
        up?: number;
    }

    Parameters for various function.

    Type declaration

    • Optional down?: number

      How many bright generators to go downwards. Also the number of small/minor intervals in the resulting scale. Default = 0.

    • Optional up?: number

      How many bright generators to go upwards. Also the number of large/major intervals in the resulting scale. Defaults to the maximum possible.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/types/DiamondMosAlphabet.html b/moment-of-symmetry/types/DiamondMosAlphabet.html new file mode 100644 index 0000000..902baf4 --- /dev/null +++ b/moment-of-symmetry/types/DiamondMosAlphabet.html @@ -0,0 +1,2 @@ +DiamondMosAlphabet | moment-of-symmetry

    Type alias DiamondMosAlphabet

    DiamondMosAlphabet: "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"

    Valid nominals for absolute pitches in Diamond mos notation.

    +
    \ No newline at end of file diff --git a/moment-of-symmetry/types/DiamondMosDegree.html b/moment-of-symmetry/types/DiamondMosDegree.html index 321edf1..8836e94 100644 --- a/moment-of-symmetry/types/DiamondMosDegree.html +++ b/moment-of-symmetry/types/DiamondMosDegree.html @@ -2,4 +2,4 @@

    Type declaration

    • center: MosMonzo

      Center of this degree. A perfect or a neutral interval.

    • Optional mid?: MosMonzo

      The neutral interval for perfect intervals where it makes sense.

    • perfect: boolean

      Quality of this degree. Imperfect has a neutral center and must be further processed to obtain the minor and major variants.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/types/DiamondMosNominal.html b/moment-of-symmetry/types/DiamondMosNominal.html deleted file mode 100644 index 9bb7038..0000000 --- a/moment-of-symmetry/types/DiamondMosNominal.html +++ /dev/null @@ -1,2 +0,0 @@ -DiamondMosNominal | moment-of-symmetry

    Type alias DiamondMosNominal

    DiamondMosNominal: "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"

    Valid nominals for absolute pitches in Diamond mos notation.

    -
    \ No newline at end of file diff --git a/moment-of-symmetry/types/DiamondMosNotation.html b/moment-of-symmetry/types/DiamondMosNotation.html index 2105120..cbfd005 100644 --- a/moment-of-symmetry/types/DiamondMosNotation.html +++ b/moment-of-symmetry/types/DiamondMosNotation.html @@ -1,7 +1,7 @@ -DiamondMosNotation | moment-of-symmetry

    Type alias DiamondMosNotation

    DiamondMosNotation: {
        brightGenerator: MosMonzo;
        degrees: DiamondMosDegree[];
        equave: MosMonzo;
        period: MosMonzo;
        scale: Map<DiamondMosNominal, MosMonzo>;
    }

    Diamond mos notation configuration.

    +DiamondMosNotation | moment-of-symmetry

    Type alias DiamondMosNotation

    DiamondMosNotation: {
        brightGenerator: MosMonzo;
        degrees: DiamondMosDegree[];
        equave: MosMonzo;
        period: MosMonzo;
        scale: Map<string, MosMonzo>;
    }

    Diamond mos notation configuration.

    Type declaration

    • brightGenerator: MosMonzo

      Bright generator of the scale.

    • degrees: DiamondMosDegree[]

      0-indexed degree of the scale for one period. Add periods to reach further.

    • equave: MosMonzo

      Interval of equivalence / octave.

    • period: MosMonzo

      Interval of repetition.

      -
    • scale: Map<DiamondMosNominal, MosMonzo>

      Counts of [L, s] steps for every available nominal with J at unison. Add equaves to reach other octaves.

      -
    \ No newline at end of file +
  • scale: Map<string, MosMonzo>

    Counts of [L, s] steps for every available nominal with J at unison. Add equaves to reach other octaves.

    +
  • \ No newline at end of file diff --git a/moment-of-symmetry/types/ModeInfo.html b/moment-of-symmetry/types/ModeInfo.html index ce2082e..aa182a3 100644 --- a/moment-of-symmetry/types/ModeInfo.html +++ b/moment-of-symmetry/types/ModeInfo.html @@ -4,4 +4,4 @@
  • numberOfPeriods: number

    Number of periods in an octave.

  • period: number

    Number of steps in a period.

  • udp: string

    UDP notation: U|D(P) where U = bright generators going up, D = bright generators going down, P = numberOfPeriods if not 1.

    -
  • \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/types/MosInfo.html b/moment-of-symmetry/types/MosInfo.html index a438659..a8c1781 100644 --- a/moment-of-symmetry/types/MosInfo.html +++ b/moment-of-symmetry/types/MosInfo.html @@ -7,4 +7,4 @@
  • Optional prefix?: string

    Interval prefix.

  • size: number

    Size of the pattern.

  • Optional subset?: boolean

    True if the pattern is a subset of a larger MOS pattern.

    -
  • \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/types/MosMonzo.html b/moment-of-symmetry/types/MosMonzo.html index fb5f70e..4af1791 100644 --- a/moment-of-symmetry/types/MosMonzo.html +++ b/moment-of-symmetry/types/MosMonzo.html @@ -1,2 +1,2 @@ MosMonzo | moment-of-symmetry

    Type alias MosMonzo

    MosMonzo: [number, number]

    Count of L steps followed by count of s steps.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/types/MosScaleInfo.html b/moment-of-symmetry/types/MosScaleInfo.html index 9ed787e..8572e36 100644 --- a/moment-of-symmetry/types/MosScaleInfo.html +++ b/moment-of-symmetry/types/MosScaleInfo.html @@ -1,12 +1,19 @@ -MosScaleInfo | moment-of-symmetry

    Type alias MosScaleInfo

    MosScaleInfo: {
        abbreviation?: string;
        hardness: string;
        mosPattern: string;
        name?: string;
        numberOfLargeSteps: number;
        numberOfSmallSteps: number;
        prefix?: string;
        sizeOfLargeStep: number;
        sizeOfSmallStep: number;
        subset?: boolean;
    }

    Information about a MOS scale.

    +MosScaleInfo | moment-of-symmetry

    Type alias MosScaleInfo

    MosScaleInfo: {
        abbreviation?: string;
        brightGenerator: number;
        brightGeneratorMonzo: [number, number];
        darkGenerator: number;
        edo: number;
        hardness: string;
        mosPattern: string;
        name?: string;
        numberOfLargeSteps: number;
        numberOfPeriods: number;
        numberOfSmallSteps: number;
        period: number;
        periodMonzo: [number, number];
        prefix?: string;
        sizeOfLargeStep: number;
        sizeOfSmallStep: number;
        subset?: boolean;
    }

    Information about a MOS scale.

    Type declaration

    • Optional abbreviation?: string

      TAMNAMS name abbreviation.

      +
    • brightGenerator: number

      Bright generator of the scale in EDO steps.

      +
    • brightGeneratorMonzo: [number, number]

      Number of large and small steps in the bright generator.

      +
    • darkGenerator: number

      Dark generator of the scale in EDO steps.

      +
    • edo: number

      Octave/equave of the scale in EDO steps.

    • hardness: string

      Name of the step size ratio or the name of the hardness range it belongs to.

    • mosPattern: string

      MOS pattern such as "5L 2s".

    • Optional name?: string

      TAMNAMS name of the pattern.

    • numberOfLargeSteps: number

      Number of large steps in the pattern.

      +
    • numberOfPeriods: number

      Numper of periods per octave.

    • numberOfSmallSteps: number

      Number of small steps in the pattern.

      +
    • period: number

      Period of the scale in EDO steps.

      +
    • periodMonzo: [number, number]

      Number of large and small steps in the period.

    • Optional prefix?: string

      Interval prefix.

    • sizeOfLargeStep: number

      Size of the large step in EDO steps.

    • sizeOfSmallStep: number

      Size of the small step in EDO steps.

    • Optional subset?: boolean

      True if the pattern is a subset of a larger MOS pattern.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/types/RangeInfo.html b/moment-of-symmetry/types/RangeInfo.html index 408083f..8c216a0 100644 --- a/moment-of-symmetry/types/RangeInfo.html +++ b/moment-of-symmetry/types/RangeInfo.html @@ -5,4 +5,4 @@
  • numberOfSmallSteps: number

    Number of small steps in the pattern.

  • period: Fraction

    Size of the period as a fraction of the equave.

  • upperBound: Fraction

    Upper bound of the generator range as a fraction of the equave.

    -
  • \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/types/ScaleInfo.html b/moment-of-symmetry/types/ScaleInfo.html index bd97c03..3ae5d41 100644 --- a/moment-of-symmetry/types/ScaleInfo.html +++ b/moment-of-symmetry/types/ScaleInfo.html @@ -6,4 +6,4 @@
  • Optional prefix?: string

    Interval prefix.

  • stepPattern: string

    Steps of the scale L = large, M = medium, s = small

  • Optional subset?: boolean

    True if the pattern is a subset of a larger MOS pattern.

    -
  • \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/types/TamnamsInfo.html b/moment-of-symmetry/types/TamnamsInfo.html index 858c620..188c77d 100644 --- a/moment-of-symmetry/types/TamnamsInfo.html +++ b/moment-of-symmetry/types/TamnamsInfo.html @@ -4,4 +4,4 @@
  • name: string

    TAMNAMS name of the MOS pattern.

  • Optional nickname?: string

    Nickname.

  • Optional prefix?: string

    Interval prefix.

    -
  • \ No newline at end of file +
    \ No newline at end of file diff --git a/moment-of-symmetry/variables/DIAMOND_MOS_ALPHABET.html b/moment-of-symmetry/variables/DIAMOND_MOS_ALPHABET.html new file mode 100644 index 0000000..b91c0ce --- /dev/null +++ b/moment-of-symmetry/variables/DIAMOND_MOS_ALPHABET.html @@ -0,0 +1,2 @@ +DIAMOND_MOS_ALPHABET | moment-of-symmetry

    Variable DIAMOND_MOS_ALPHABETConst

    DIAMOND_MOS_ALPHABET: DiamondMosAlphabet[] = ...

    Single characters of valid nominals.

    +
    \ No newline at end of file diff --git a/sonic-weave/assets/highlight.css b/sonic-weave/assets/highlight.css index 393cb23..0e266c4 100644 --- a/sonic-weave/assets/highlight.css +++ b/sonic-weave/assets/highlight.css @@ -1,28 +1,24 @@ :root { - --light-hl-0: #098658; - --dark-hl-0: #B5CEA8; - --light-hl-1: #000000; - --dark-hl-1: #D4D4D4; - --light-hl-2: #795E26; - --dark-hl-2: #DCDCAA; - --light-hl-3: #CD3131; - --dark-hl-3: #F44747; - --light-hl-4: #A31515; - --dark-hl-4: #CE9178; - --light-hl-5: #0000FF; - --dark-hl-5: #569CD6; - --light-hl-6: #0070C1; - --dark-hl-6: #4FC1FF; - --light-hl-7: #001080; - --dark-hl-7: #9CDCFE; - --light-hl-8: #EE0000; - --dark-hl-8: #D7BA7D; - --light-hl-9: #AF00DB; - --dark-hl-9: #C586C0; - --light-hl-10: #267F99; - --dark-hl-10: #4EC9B0; - --light-hl-11: #008000; - --dark-hl-11: #6A9955; + --light-hl-0: #000000; + --dark-hl-0: #D4D4D4; + --light-hl-1: #0000FF; + --dark-hl-1: #569CD6; + --light-hl-2: #0070C1; + --dark-hl-2: #4FC1FF; + --light-hl-3: #795E26; + --dark-hl-3: #DCDCAA; + --light-hl-4: #001080; + --dark-hl-4: #9CDCFE; + --light-hl-5: #A31515; + --dark-hl-5: #CE9178; + --light-hl-6: #EE0000; + --dark-hl-6: #D7BA7D; + --light-hl-7: #AF00DB; + --dark-hl-7: #C586C0; + --light-hl-8: #267F99; + --dark-hl-8: #4EC9B0; + --light-hl-9: #008000; + --dark-hl-9: #6A9955; --light-code-background: #FFFFFF; --dark-code-background: #1E1E1E; } @@ -38,8 +34,6 @@ --hl-7: var(--light-hl-7); --hl-8: var(--light-hl-8); --hl-9: var(--light-hl-9); - --hl-10: var(--light-hl-10); - --hl-11: var(--light-hl-11); --code-background: var(--light-code-background); } } @@ -54,8 +48,6 @@ --hl-7: var(--dark-hl-7); --hl-8: var(--dark-hl-8); --hl-9: var(--dark-hl-9); - --hl-10: var(--dark-hl-10); - --hl-11: var(--dark-hl-11); --code-background: var(--dark-code-background); } } @@ -70,8 +62,6 @@ --hl-7: var(--light-hl-7); --hl-8: var(--light-hl-8); --hl-9: var(--light-hl-9); - --hl-10: var(--light-hl-10); - --hl-11: var(--light-hl-11); --code-background: var(--light-code-background); } @@ -86,8 +76,6 @@ --hl-7: var(--dark-hl-7); --hl-8: var(--dark-hl-8); --hl-9: var(--dark-hl-9); - --hl-10: var(--dark-hl-10); - --hl-11: var(--dark-hl-11); --code-background: var(--dark-code-background); } @@ -101,6 +89,4 @@ .hl-7 { color: var(--hl-7); } .hl-8 { color: var(--hl-8); } .hl-9 { color: var(--hl-9); } -.hl-10 { color: var(--hl-10); } -.hl-11 { color: var(--hl-11); } pre, code { background: var(--code-background); } diff --git a/sonic-weave/assets/main.js b/sonic-weave/assets/main.js index 1daeb69..d6f1388 100644 --- a/sonic-weave/assets/main.js +++ b/sonic-weave/assets/main.js @@ -1,7 +1,7 @@ "use strict"; "use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.scrollToHash(),this.updateIndexVisibility())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.scrollToHash(),this.updateIndexVisibility())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(console.log("Show page"),document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){console.log("Scorlling");let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ve(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ne(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ve(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ne(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } `,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); /*! Bundled license information: diff --git a/sonic-weave/assets/navigation.js b/sonic-weave/assets/navigation.js index ee18baf..30fd741 100644 --- a/sonic-weave/assets/navigation.js +++ b/sonic-weave/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file diff --git a/sonic-weave/assets/search.js b/sonic-weave/assets/search.js index 5f4b1e2..5cc21a2 100644 --- a/sonic-weave/assets/search.js +++ b/sonic-weave/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/sonic-weave/assets/style.css b/sonic-weave/assets/style.css index 072daed..778b949 100644 --- a/sonic-weave/assets/style.css +++ b/sonic-weave/assets/style.css @@ -327,17 +327,14 @@ dd { } /* Footer */ -.tsd-generator { +footer { border-top: 1px solid var(--color-accent); padding-top: 1rem; padding-bottom: 1rem; max-height: 3.5rem; } - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; +.tsd-generator { + margin: 0 1em; } .container-main { diff --git a/sonic-weave/classes/Color.html b/sonic-weave/classes/Color.html index 7a2b38f..1083fc5 100644 --- a/sonic-weave/classes/Color.html +++ b/sonic-weave/classes/Color.html @@ -1,7 +1,11 @@ Color | sonic-weave

    Class Color

    CSS color value.

    -

    Constructors

    Constructors

    Properties

    Methods

    Constructors

    Properties

    value: string

    Methods

    • SonicWeave representation of the CSS color.

      +

    Methods

    Constructors

    Properties

    value: string

    Methods

    • Check if this color is strictly the same as another.

      +

      Parameters

      • other: Color

        Another Color instance.

        +

      Returns boolean

      true if the colors have the same value.

      +
    • SonicWeave representation of the CSS color.

      Returns string

      The color value as a string.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/classes/ExpressionVisitor.html b/sonic-weave/classes/ExpressionVisitor.html index 0550d43..21c1b58 100644 --- a/sonic-weave/classes/ExpressionVisitor.html +++ b/sonic-weave/classes/ExpressionVisitor.html @@ -1,5 +1,5 @@ ExpressionVisitor | sonic-weave

    Class ExpressionVisitor

    Abstract syntax tree visitor for SonicWeave expressions.

    -

    Constructors

    Constructors

    Properties

    mutables: VisitorContext

    Local context inside arrow functions and array comprehensions.

    -

    Parent context containing a particular expression statement.

    -

    Accessors

    Returns ExpressionVisitor

    Properties

    mutables: VisitorContext

    Local context inside arrow functions and array comprehensions.

    +

    Parent context containing a particular expression statement.

    +

    Accessors

    Methods

    Methods

    • Assign arguments to their corresponding parameter(s) in the current context.

      +
    • Assign arguments to their corresponding parameter(s) in the current context.

      Parameters

      Returns void

    • Set the value of a variable in the current context.

      +

    Returns void

    • Set the value of a variable in the current context.

      Parameters

      • name: string

        Name of the variable.

      • value: SonicWeaveValue

        Value for the variable.

      Returns void

      Throws

      An error if there is no variable declared under the given name or the given variable is declared constant.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/classes/Interrupt.html b/sonic-weave/classes/Interrupt.html index 7be055e..6db0d99 100644 --- a/sonic-weave/classes/Interrupt.html +++ b/sonic-weave/classes/Interrupt.html @@ -1,12 +1,12 @@ Interrupt | sonic-weave

    Class Interrupt

    An interrupt representing a return, break or continue statement.

    -

    Constructors

    Constructors

    Properties

    Accessors

    Constructors

    Properties

    The abstract syntax tree node that triggered the break in code flow.

    -

    Value of a return statement if present.

    -

    Accessors

    • get type(): "ReturnStatement" | "BreakStatement" | "ContinueStatement"
    • Get the type of the interrupt.

      -

      Returns "ReturnStatement" | "BreakStatement" | "ContinueStatement"

    Generated using TypeDoc

    \ No newline at end of file +

    Returns Interrupt

    Properties

    The abstract syntax tree node that triggered the break in code flow.

    +

    Value of a return statement if present.

    +

    Accessors

    • get type(): "ReturnStatement" | "BreakStatement" | "ContinueStatement"
    • Get the type of the interrupt.

      +

      Returns "ReturnStatement" | "BreakStatement" | "ContinueStatement"

    \ No newline at end of file diff --git a/sonic-weave/classes/Interval.html b/sonic-weave/classes/Interval.html index 8c5c49e..0c58843 100644 --- a/sonic-weave/classes/Interval.html +++ b/sonic-weave/classes/Interval.html @@ -1,5 +1,5 @@ Interval | sonic-weave

    Class Interval

    A musical interval associated with a domain, an AST node, CSS color, note label and tracking identifiers.

    -

    Constructors

    Constructors

    Properties

    color? domain label @@ -63,146 +63,146 @@
  • steps: number = 0

    A steps offset used in tempering.

  • Optional node: IntervalLiteral

    Node in the abstract syntax tree used for string representation.

  • Optional convert: Interval

    Another Interval instance to obtain CSS color, note label and tracking information from.

    -
  • Returns Interval

    Properties

    color?: Color
    label: string
    steps: number
    trackingIds: Set<number>

    Methods

    • Calculate the absolute value of a linear interval or obtain a logarithmic intervals distance to unison.

      +

    Returns Interval

    Properties

    color?: Color
    label: string
    steps: number
    trackingIds: Set<number>

    Methods

    • Calculate the absolute value of a linear interval or obtain a logarithmic intervals distance to unison.

      Returns Interval

      Absolute value of this interval.

      -
    • Add two linear intervals or multiply the underlying values of two logarithmic intervals.

      +
    • Add two linear intervals or multiply the underlying values of two logarithmic intervals.

      Parameters

      Returns Interval

      Sum of the intervals.

      -
    • Convert the interval to a virtual AST node representing the universal type.

      +
    • Convert the interval to a virtual AST node representing the universal type.

      Parameters

      • interchange: boolean = false

        Boolean flag to format everything explicitly.

        -

      Returns undefined | MonzoLiteral

      A virtual monzo literal.

      -
    • Calculate this many steps of the octave equally divided into other parts.

      +

    Returns MonzoLiteral

    A virtual monzo literal.

    +
    • Calculate this many steps of the octave equally divided into other parts.

      Parameters

      • other: Interval

        Another interval (the edo).

      Returns Interval

      A logarithmic quantity representing two to the power of the ratio of the intervals.

      -
    • Remove stored context-dependent formatting information. (Triggered by a context shift.)

      -

      Parameters

      • force: boolean = false

      Returns void

    • Remove stored context-dependent formatting information. (Triggered by a context shift.)

      +

      Parameters

      • force: boolean = false

      Returns void

    • Return a number suitable for Array.sort() to indicate the size of this interval w.r.t. the other.

      +
    • Return a number suitable for Array.sort() to indicate the size of this interval w.r.t. the other.

      Parameters

      Returns number

      A number that's less than zero if this is less than other, zero if equal and greater than zero otherwise.

      -
    • Divide two linear intervals or take the root of the underlying value of a logarithmic interval with respect to a linear one. +

    • Divide two linear intervals or take the root of the underlying value of a logarithmic interval with respect to a linear one. The ratio of two logarithmic intervals is a linear scalar equal to the logdivision of the underlying values.

      Parameters

      Returns Interval

      The ratio of the intervals.

      -
    • Compute the dot product of the prime count vectors (monzos) associated with two intervals or an interval and a val.

      +
    • Compute the dot product of the prime count vectors (monzos) associated with two intervals or an interval and a val.

      Parameters

      Returns Interval

      Linear domain interval representing the cosine of the unweighted angle between the prime counts.

      -
    • Apply a down arrow to this interval.

      Parameters

      • context: RootContext

        Current root context with the value of "down" to apply.

      • count: number = 1

        How many down arrows to apply.

      Returns Interval

      A new interval with size decreased by the current "up" value.

      -
    • Apply a drop to this interval.

      Parameters

      • context: RootContext

        Current root context with the value of "drop" to apply.

      Returns Interval

      A new interval with size decreased by the current "lift" value.

      -
    • Check if this interval has the same size as another.

      +
    • Check if this interval has the same size as another.

      Parameters

      Returns boolean

      true if this has the same size as the other.

      -
    • Invert the value of a linear interval or convert a logarithmic interval to a val that maps it to unity.

      +
    • Invert the value of a linear interval or convert a logarithmic interval to a val that maps it to unity.

      Returns Interval | Val

      Inverse of this interval.

      -
    • Calculate the recipropower between two linear intervals.

      Parameters

      Returns Interval

      The root of this interval with respect to the other.

      -
    • Return true if the interval could be interpreted as a frequency.

      -

      Returns boolean

    • Return true if this interval is only composed of abstract edosteps.

      +
    • Return true if the interval could be interpreted as a frequency.

      +

      Returns boolean

    • Return true if this interval is only composed of abstract edosteps.

      Returns boolean

      true if the interval is a unit scalar, possibly with edosteps, false otherwise.

      -
    • Return true if the interval represents a ratio of frequencies.

      -

      Returns boolean

    • Return true if the interval represents a ratio of frequencies.

      +

      Returns boolean

    • Apply a lift to this interval.

      Parameters

      • context: RootContext

        Current root context with the value of "lift" to apply.

      Returns Interval

      A new interval with size increased by the current "lift" value.

      -
    • Calculate the modulus of a linear interval with respect to another or reduce (repeatedly divide) the underlying value of a logarithmic interval by another.

      +
    • Calculate the modulus of a linear interval with respect to another or reduce (repeatedly divide) the underlying value of a logarithmic interval by another.

      Parameters

      • other: Interval

        Another interval.

      • ceiling: boolean = false

        If true x.mmod(x) evaluates to x.

      Returns Interval

      This interval modulo other.

      -
    • Multiply two linear intervals or raise the underlying value of a logarithmic interval to the power of a linear one.

      +
    • Negate the frequency/value of a linear interval or reflect a logarithmic interval about the unison.

      Returns Interval

      Negative counterpart of this interval.

      -
    • Project the exponent of two to the given base.

      Parameters

      • base: Interval

        New base to replace prime two.

      Returns Interval

      N steps of equal divisions of the new base assuming this interval was N steps of an equally divided octave.

      -
    • (This method is an optimization detail.) Convert aspiring nodes to true AST nodes for formatting.

      +
    • (This method is an optimization detail.) Convert aspiring nodes to true AST nodes for formatting.

      Parameters

      • context: RootContext

        Current root context with information about root pitch and size of ups and lifts.

      Returns undefined | IntervalLiteral

      A true AST node suitable for string conversion or undefined realization is impossible in the given context.

      -
    • Equave-reduce a linear interval by another other.

      Parameters

      • other: Interval

        Another interval (the equave).

      • ceiling: boolean = false

        If true x.reduce(x) evaluates to x.

      Returns Interval

      This interval divided by the other until it's between it and unison.

      -
    • Round a linear interval to a multiple of another or a logarithmic interval to a power of the underlying value of another.

      +
    • Round a linear interval to a multiple of another or a logarithmic interval to a power of the underlying value of another.

      Parameters

      Returns Interval

      Closest multiple of the other to this one.

      -
    • Clone this Interval instance without deeply copying any of the parts.

      Returns Interval

      An interval like this one but replacing any of the parts won't change the original.

      -
    • Convert this interval to a string that faithfully represents it ignoring formatting, colors and labels. +

    • Convert this interval to a string that faithfully represents it ignoring formatting, colors and labels. Doesn't depend on the current root context.

      Returns string

      String that has the same value and domain as this interval if evaluated as a SonicWeave expression.

      -
    • Convert this interval to a string that faithfully represents it ignoring colors and labels.

      +
    • Convert this interval to a string that faithfully represents it ignoring colors and labels.

      Parameters

      • Optional context: RootContext

        Current root context with information about root pitch and size of ups and lifts.

      Returns string

      String that has the same value and domain as this interval if evaluated as a SonicWeave expression.

      -
    • Check for strict equality between this and another interval.

      +
    • Check for strict equality between this and another interval.

      Parameters

      Returns boolean

      true if the values share the same time exponent, prime exponents, residual and cents offset and the domains match.

      -
    • Subtract two linear intervals or divide the underlying values of two logarithmic intervals.

      +
    • Subtract two linear intervals or divide the underlying values of two logarithmic intervals.

      Parameters

      Returns Interval

      Difference of the intervals.

      -
    • Convert the interval to a fraction in linear space.

      -

      Returns Fraction

    • Convert the interval to an integer.

      -

      Returns number

    • Serialize the time monzo to a JSON compatible object.

      +
    • Convert the interval to a fraction in linear space.

      +

      Returns Fraction

    • Convert the interval to an integer.

      +

      Returns number

    • Serialize the time monzo to a JSON compatible object.

      Returns any

      The serialized object with property type set to 'Interval'.

      -
    • Convert this interval to a string that faithfully represents it including color and label.

      +
    • Convert this interval to a string that faithfully represents it including color and label.

      Parameters

      • Optional context: RootContext

        Current root context with information about root pitch and size of ups and lifts.

      • interchange: boolean = false

        Boolean flag to always include label and color.

      Returns string

      String that has the same value and domain as this interval if evaluated as a SonicWeave expression.

      -
    • Return the size of the interval in cents.

      +
    • Return the size of the interval in cents.

      Parameters

      • ignoreSign: boolean = false

        Compute the size of the absolute value.

        -

      Returns number

    • Apply an up arrow to this interval.

      +

    Returns number

    • Apply an up arrow to this interval.

      Parameters

      • context: RootContext

        Current root context with the value of "up" to apply.

      Returns Interval

      A new interval with size increased by the current "up" value.

      -
    • Convert a relative interval to a real number representing a ratio of frequencies. +

    • Convert a relative interval to a real number representing a ratio of frequencies. Convert an absolute interval to the scalar of its time unit.

      Returns number

      A real number.

      -
    • Construct a linear domain interval from a fraction.

      Parameters

      • value: FractionValue

        Rational number to convert.

      • Optional convert: Interval

        Another Interval instance to obtain CSS color, note label and tracking information from.

      Returns Interval

      Musical interval representing a frequency ratio.

      -
    • Construct a linear domain interval from an integer.

      Parameters

      • value: number | bigint

        Integer to convert.

      • Optional convert: Interval

        Another Interval instance to obtain CSS color, note label and tracking information from.

      Returns Interval

      Musical interval representing a harmonic.

      -
    • Construct a linear domain interval from a real number.

      Parameters

      • value: number

        Real number to convert.

      • Optional convert: Interval

        Another Interval instance to obtain CSS color, note label and tracking information from.

      Returns Interval

      Musical interval representing a (possibly irrational) frequency ratio.

      -
    • Revive an Interval instance produced by Interval.toJSON(). Return everything else as is.

      +
    • Revive an Interval instance produced by Interval.toJSON(). Return everything else as is.

      Intended usage:

      -
      const data = JSON.parse(serializedData, Interval.reviver);
      +
      const data = JSON.parse(serializedData, Interval.reviver);
       

      Parameters

      • key: string

        Property name.

      • value: any

        Property value.

      Returns any

      Deserialized Interval instance or other data without modifications.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/classes/RootContext.html b/sonic-weave/classes/RootContext.html index d5e6de9..be77661 100644 --- a/sonic-weave/classes/RootContext.html +++ b/sonic-weave/classes/RootContext.html @@ -1,5 +1,5 @@ RootContext | sonic-weave

    Class RootContext

    Root context of a SonicWeave runtime containing the scale title, root pitch, value of the 'up' inflection etc.

    -

    Constructors

    Constructors

    Properties

    C4_ fragiles gas @@ -21,24 +21,24 @@ spendGas

    Constructors

    Properties

    fragiles: Interval[]

    Values that depend on the current root pitch or up/lift inflections.

    -
    gas: number

    The remaining computational budget.

    -
    lift_: Interval
    mosConfig_?: MosConfig
    templateArguments: SonicWeaveValue[]

    Values passed to a tagged template literal converted to types understood by the SonicWeave runtime.

    -
    title: string

    Title of the scale.

    -
    trackingIndex: number

    Current tracking ID.

    -
    unisonFrequency?: TimeMonzo

    Absolute frequency associated with 1/1 (linear) or P1 (logarithmic perfect unison).

    -

    Accessors

    Methods

    • Create an independent clone of the context useable as a cache of runtime state.

      +

    Returns RootContext

    Properties

    fragiles: Interval[]

    Values that depend on the current root pitch or up/lift inflections.

    +
    gas: number

    The remaining computational budget.

    +
    lift_: Interval
    mosConfig_?: MosConfig
    templateArguments: SonicWeaveValue[]

    Values passed to a tagged template literal converted to types understood by the SonicWeave runtime.

    +
    title: string

    Title of the scale.

    +
    trackingIndex: number

    Current tracking ID.

    +
    unisonFrequency?: TimeMonzo

    Absolute frequency associated with 1/1 (linear) or P1 (logarithmic perfect unison).

    +

    Accessors

    Methods

    • Convert the state of this context into a block of text in the SonicWeave DSL.

      +
    • Convert the state of this context into a block of text in the SonicWeave DSL.

      Parameters

      • defaults: RootContext

        Root context for determining if the root pitch etc. has changed.

      Returns string

      A string that when evaluated should recreate the same runtime context.

      -
    • Obtain the next free tracking ID and advance the counter.

      +
    • Obtain the next free tracking ID and advance the counter.

      Returns number

      An identifier for tracking the evolution of a Interval instance.

      -
    • Update the internal counter when spending computational resources.

      +
    • Update the internal counter when spending computational resources.

      Parameters

      • amount: number = 1

        How many ticks to spend.

      Returns void

      Throws

      An error if the context runs out of gas.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/classes/StatementVisitor.html b/sonic-weave/classes/StatementVisitor.html index ce90fef..0fed5a1 100644 --- a/sonic-weave/classes/StatementVisitor.html +++ b/sonic-weave/classes/StatementVisitor.html @@ -1,5 +1,5 @@ StatementVisitor | sonic-weave

    Class StatementVisitor

    Abstract syntax tree visitor for statements in a SonicWeave program.

    -

    Constructors

    Constructors

    Properties

    deferred: Statement[]

    Deferred statement to be executed at the end of the current block.

    -

    Exported constants and functions usually from a module declaration.

    -
    immutables: VisitorContext

    Local context for immutable (const) variables.

    -
    imported: Set<string>

    Imported names.

    -
    isUserRoot: boolean

    Whether or not the state of the visitor can be represented as text and that state represents the runtime from a user's perspective. The global context doesn't have a representation because the builtins are not written in the SonicWeave DSL.

    -
    modules: Map<string, SonicWeaveModule>

    Declared modules.

    -
    mutables: VisitorContext

    Local context for mutable (let) variables.

    -

    Parent context of the surrounding code block.

    -
    rootContext_?: RootContext

    Accessors

    Properties

    deferred: Statement[]

    Deferred statement to be executed at the end of the current block.

    +

    Exported constants and functions usually from a module declaration.

    +
    immutables: VisitorContext

    Local context for immutable (const) variables.

    +
    imported: Set<string>

    Imported names.

    +
    isUserRoot: boolean

    Whether or not the state of the visitor can be represented as text and that state represents the runtime from a user's perspective. The global context doesn't have a representation because the builtins are not written in the SonicWeave DSL.

    +
    modules: Map<string, SonicWeaveModule>

    Declared modules.

    +
    mutables: VisitorContext

    Local context for mutable (let) variables.

    +

    Parent context of the surrounding code block.

    +
    rootContext_?: RootContext

    Accessors

    Methods

    Methods

    • Execute the abstract syntax tree of a SonicWeave program.

      Parameters

      • program: Program

        Program containing the AST to be executed.

        -

      Returns void

    • Execute an array of SonicWeave statements from an abstract syntax tree.

      +

    Returns void

    • Execute an array of SonicWeave statements from an abstract syntax tree.

      Parameters

      • body: Statement[]

        The AST nodes to be executed.

      Returns undefined | Interrupt

      An interrupt or undefined if none encountered.

      -
    • Convert the state of this statement visitor into a block of text in the SonicWeave DSL. Only intended for the user scope just above the global scope.

      +
    • Convert the state of this statement visitor into a block of text in the SonicWeave DSL. Only intended for the user scope just above the global scope.

      Parameters

      • defaultRootContext: RootContext

        Root context for determining if root pitch declaration must be included.

      Returns string

      A string that when evaluated should recreate the same runtime state.

      -
    • Handle a value by pushing it to the current scale or taking some other action depending on the type of the value.

      +
    • Handle a value by pushing it to the current scale or taking some other action depending on the type of the value.

      Parameters

      Returns void

    • Set the value of a variable in the current context.

      +

    Returns void

    • Set the value of a variable in the current context.

      Parameters

      • name: string

        Name of the variable.

      • value: SonicWeaveValue

        Value for the variable.

        -

      Returns undefined

      Throws

      An error if there is no variable declared under the given name or the given variable is declared constant.

      -
    • Visit a node in the abstract syntax tree.

      +

    Returns void

    Throws

    An error if there is no variable declared under the given name or the given variable is declared constant.

    +

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/classes/Temperament.html b/sonic-weave/classes/Temperament.html new file mode 100644 index 0000000..2fd0a6c --- /dev/null +++ b/sonic-weave/classes/Temperament.html @@ -0,0 +1,66 @@ +Temperament | sonic-weave

    Class Temperament

    Regular temperament combining multiple vals to a more optimal tuning.

    +

    Constructors

    • Construct a new temperament from an array of svals.

      +

      Parameters

      • mapping: number[][]

        A matrix where the rows are linearly independent subgroup vals.

        +
      • Optional basis: ValBasis

        Basis of the svals.

        +
      • Optional weights: number[]

        Additional weights on top of Tenney weights to tweak what is considered optimal.

        +
      • pureEquaves: boolean = false

        Boolean flag to force the tuning of the first basis element to remain pure.

        +
      • metric: FormalPrimeMetric = 'subgroup'

      Returns Temperament

    Properties

    basis: ValBasis
    canonicalMapping: number[][]
    commaBasis: ValBasis
    preimage: ValBasis
    pureEquaves: boolean
    sgens: number[][]
    subgroupMapping_?: number[]
    weights: number[]

    Accessors

    • get generators(): number[]
    • Obtain the generators of this temperament in cents.

      +

      Returns number[]

      An array of cents values.

      +
    • get numberOfPeriods(): number
    • Obtain the number of periods per first basis element (octave or equave).

      +

      Returns number

    • get rank(): number
    • Obtain the number of independent generators of this temperament.

      +

      Returns number

    • get subgroupMapping(): number[]
    • Tuning in cents of this temperament's subgroup basis.

      +

      Returns number[]

    Methods

    • Produce an array of generator coefficients.

      +

      Parameters

      Returns Interval[]

      An array representing the number of generators adding up to the value.

      +
    • Check if this temperament is the same as another.

      +

      Parameters

      Returns boolean

      true if this temperament is the same as the other.

      +
    • Compute the root mean squared error against the just intonation point.

      +

      Returns number

      The TE error.

      +
    • Simplify a rational value based on equivalences available in this temperament.

      +

      Parameters

      • monzo: TimeMonzo

        A rational value to simplify.

        +

      Returns TimeMonzo

      A rational value with reduced tenney height if found. The result is tuned the same as the original by this temperament.

      +
    • Check if this temperament is strictly the same as another.

      +

      Parameters

      Returns boolean

      true if this temperament is strictly the same as the other.

      +
    • Produce a faithful string representation of this temperament.

      +

      Returns string

      A string that when evaluated reproduces a value equal to this temperament.

      +
    • Constuct a temperament that tempers out the given commas.

      +

      Parameters

      • commas: TimeMonzo[]

        Commas to temper out. The number of commas decides the co-rank of the temperament.

        +
      • Optional basis: ValBasis

        Optional basis. Leave undefined to automatically infer from commas.

        +
      • Optional weights: number[]

        Additional weights on top of Tenney weights to tweak what is considered optimal.

        +
      • pureEquaves: boolean = false

        Boolean flag to force the tuning of the first basis element to remain pure.

        +
      • metric: FormalPrimeMetric = 'subgroup'
      • fullPrimeLimit: boolean = false

        If no basis is given, use the full prime limit instead of a minimal prime subgroup.

        +

      Returns Temperament

      A higher rank temperament. Lower co-rank than just intonation.

      +
    • Constuct a temperament that retains the properties shared by all of the given vals.

      +

      Parameters

      • vals: Val[]

        Vals to mix into a more optimal combination. The number of vals decides the rank of the temperament.

        +
      • Optional weights: number[]

        Additional weights on top of Tenney weights to tweak what is considered optimal.

        +
      • pureEquaves: boolean = false

        Boolean flag to force the tuning of the first basis element to remain pure.

        +
      • metric: FormalPrimeMetric = 'subgroup'

      Returns Temperament

      A higher rank temperament.

      +
    \ No newline at end of file diff --git a/sonic-weave/classes/TimeMonzo.html b/sonic-weave/classes/TimeMonzo.html index 94beff1..0e12d0a 100644 --- a/sonic-weave/classes/TimeMonzo.html +++ b/sonic-weave/classes/TimeMonzo.html @@ -1,6 +1,6 @@ TimeMonzo | sonic-weave

    Class TimeMonzo

    Fractional monzo with multiplicative residue measured in time-related units (usually Hz).

    Used to represent the value of musical objects like 432Hz, 5/3 or 7\12 (N-of-EDO).

    -

    Constructors

    Constructors

    • Construct a fractional monzo with multiplicative residue.

      Parameters

      • timeExponent: Fraction

        Exponent of the seconds unit.

        -
      • primeExponents: FractionalMonzo

        Fractional monzo part.

        +
      • primeExponents: FractionalMonzo

        Fractional monzo part.

      • Optional residual: Fraction

        Multiplicative residue that is too complex to fit in the vector part.

        -

      Returns TimeMonzo

    Properties

    primeExponents: FractionalMonzo
    residual: Fraction
    timeExponent: Fraction

    Accessors

    • get numberOfComponents(): number
    • Number of components in the monzo vector part.

      -

      Returns number

    • set numberOfComponents(value): void
    • Parameters

      • value: number

      Returns void

    • get octaves(): Fraction
    • The first monzo component. The exponent of 2.

      -

      Returns Fraction

    Methods

    • Linear space absolute value of the time monzo.

      +

    Returns TimeMonzo

    Properties

    primeExponents: FractionalMonzo
    residual: Fraction
    timeExponent: Fraction

    Accessors

    • get numberOfComponents(): number
    • Number of components in the monzo vector part.

      +

      Returns number

    • set numberOfComponents(value): void
    • Parameters

      • value: number

      Returns void

    • get octaves(): Fraction
    • The first monzo component. The exponent of 2.

      +

      Returns Fraction

    Methods

    • Find the closest approximation of the time monzo in a harmonic series.

      +
    • Find the closest approximation of the time monzo in a harmonic series.

      Parameters

      • denominator: number

        Denominator of the harmonic series.

      Returns TimeMonzo

      The closest approximant in the series.

      -
    • Simplify the time monzo using the given threshold.

      Parameters

      • Optional eps: number

        Error threshold. Defaults to 0.001.

      Returns TimeMonzo

      Simple approximation of the time monzo.

      -
    • Find the closest approximation of the time monzo in a subharmonic series.

      +
    • Find the closest approximation of the time monzo in a subharmonic series.

      Parameters

      • numerator: number

        Numerator of the subharmonic series.

      Returns TimeMonzo

      The closest approximant in the series.

      -
    • Obtain an AST node representing the time monzo as a cents literal.

      Returns undefined | CentsLiteral

      Cents literal or a hacky real cents literal if necessary.

      -
    • Obtain an AST node representing the time monzo as a decimal.

      Returns undefined | DecimalLiteral

      Decimal literal or a real decimal literal if necessary.

      -
    • Obtain an AST node representing the time monzo as a fraction literal.

      Parameters

      Returns undefined | FractionLiteral

      Fraction literal or undefined if representation fails.

      -
    • Obtain an AST node representing the time monzo as an integer literal.

      Returns undefined | IntegerLiteral

      Integer literal or undefined if representation fails.

      -
    • Obtain an AST node representing the time monzo as a monzo literal suitable for interchange between programs.

      +
    • Obtain an AST node representing the time monzo as a monzo literal suitable for interchange between programs.

      Returns MonzoLiteral

      Monzo literal.

      -
    • Obtain an AST node representing the time monzo as a NEDJI literal.

      Parameters

      • Optional node: NedjiLiteral

        Reference node to infer formatting from.

      Returns undefined | NedjiLiteral

      NEDJI literal or undefined if representation fails.

      -
    • Obtain a pseudo-AST node representing the time monzo as a radical.

      Returns undefined | RadicalLiteral

      Radical literal or undefined if representation fails.

      -
    • Compare this time monzo with another.

      +
    • Compare this time monzo with another.

      Parameters

      Returns number

      Result < 0 if other is larger than this. Result > 0 if other is smaller than this. Result == 0 if other is equal to this in size.

      -
    • Find all divisors of a natural number (ignoring units of time).

      +
    • Find all divisors of a natural number (ignoring units of time).

      Returns number[]

      All divisors including 1 and the number itself.

      Throws

      An error if this time monzo doesn't represent a positive integer.

      -
    • Calculate the dot product of the vector parts of two time monzos.

      +
    • Calculate the dot product of the vector parts of two time monzos.

      Parameters

      Returns Fraction

      The sum of the pairwise products of the vector parts.

      -
    • Check if this time monzo has the same size as another.

      +
    • Check if this time monzo has the same size as another.

      Parameters

      Returns boolean

      true if the time monzos are of equal size.

      -
    • Factorize the time monzo into a Map instace with prime numbers as keys and their multiplicity as values.

      +

      Returns Map<number, Fraction>

      A sparse monzo.

      +
    • Calculate the geometric inverse of the time monzo.

      Returns TimeMonzo

      A time monzo whose dot product with this one is unitary.

      -
    • Obtain a convergent of this time monzo.

      Parameters

      • depth: number

        How many continued fraction coefficients to use after the whole part.

      Returns TimeMonzo

      Approximation of the time monzo.

      -
    • Check if the time monzo represents a finite sum of powers of ten.

      +
    • Check if the time monzo represents a finite sum of powers of ten.

      Returns boolean

      true if the time monzo represents a decimal number ignoring units of time.

      -
    • Check if the time monzo represents a generic EDJI interval.

      +
    • Check if the time monzo represents a generic EDJI interval.

      Returns boolean

      true if the time monzo can be interpreted as pitch-space fraction of a frequency-space fraction.

      -
    • Check if the time monzo represents a musical fraction or fractional amount of time or frequency.

      +
    • Check if the time monzo represents a musical fraction or fractional amount of time or frequency.

      Returns boolean

      true if the time monzo can be interpreted as a ratio in frequency-space.

      -
    • Check if the time monzo represents a whole number.

      +
    • Check if the time monzo represents a whole number.

      Returns boolean

      true if the time monzo represents an integer ignoring units of time.

      -
    • Check if the time monzo is a power of two in frequency space.

      +
    • Check if the time monzo is a power of two in frequency space.

      Returns boolean | 0

      true if the time monzo is a power of two.

      -
    • Check if the time monzo lacks units of time/frequency.

      +
    • Check if the time monzo lacks units of time/frequency.

      Returns boolean

      true if the time monzo isn't expressed in units of time.

      -
    • Check if the time monzo represents the number one.

      +
    • Check if the time monzo represents a square root of a fraction or fractional amount of time or frequency.

      +

      Returns boolean

      true if the square of time monzo can be interpreted as a ratio in frequency-space.

      +
    • Check if the time monzo represents the number one.

      Returns boolean

      true if the time monzo represents musical unison ignoring units of time.

      -
    • Calculate the logarithm in the given base if it exists.

      +
    • Calculate the logarithm in the given base if it exists.

      Parameters

      Returns number | Fraction

      x such that this ** x === other.

      -
    • Pitch space absolute value of the time monzo.

      Returns TimeMonzo

      The time monzo unchanged or inverted if less than one originally.

      -
    • Check for strict equality between this and another time monzo.

      +
    • Check for strict equality between this and another time monzo.

      Parameters

      Returns boolean

      true if the time monzos share the same time exponent, prime exponents, residual and cents offset.

      -
    • Obtain a higher prime tail of this time monzo.

      Parameters

      • index: number

        Prime index with 2 at #0.

      Returns TimeMonzo

      Multiplicative tail above the given limit.

      -
    • Convert the time monzo to an integer in linear space.

      +
    • Calculate the Tenney height of this time monzo ignoring units of time.

      +

      Returns number

      The natural logarithm of the Benedetti height

      +
    • Convert the time monzo to an integer in linear space.

      Returns bigint

      Musical ratio as an integer in linear space corresponding to the unit of time of the time monzo.

      Throws

      An error if the time monzo cannot be represented as an integer.

      -
    • Convert the time monzo to a BigInt numerator and denominator in linear space.

      +
    • Convert the time monzo to a BigInt numerator and denominator in linear space.

      Returns {
          denominator: bigint;
          numerator: bigint;
      }

      Musical ratio as a fraction in linear space corresponding to the unit of time.

      • denominator: bigint
      • numerator: bigint

      Throws

      An error if the time monzo cannot be represented as a ratio.

      -
    • Convert the time monzo to cents.

      +
    • Convert the time monzo to cents.

      Parameters

      • ignoreSign: boolean = false

        Compute the size of the absolute value.

      Returns number

      Size of the time monzo in cents.

      -
    • Obtain an array of the time monzo representing a continued fraction. The first element always contains the whole part.

      +
    • Obtain an array of the time monzo representing a continued fraction. The first element always contains the whole part.

      Returns number[]

      Array of continued fraction coefficients.

      -
    • Convert the time monzo to pitch-space fraction of a frequency-space fraction.

      Parameters

      • preferPositive: boolean = false

        Prefer a positive fraction of the equave.

      Returns EqualTemperament

      Pair of the pitch-space fraction and the equave as a frequency-space fraction.

      Throws

      An error if the time monzo cannot be represented as an EDJI interval.

      -
    • Convert the time monzo to a fraction in linear space.

      +
    • Convert the time monzo to a fraction in linear space.

      Returns Fraction

      Musical ratio as a fraction in linear space corresponding to the unit of time of the original time monzo.

      Throws

      An error if the time monzo cannot be represented as a ratio.

      -
    • Convert the time monzo to a simple monzo with integer coefficients.

      +
    • Convert the time monzo to a simple monzo with integer coefficients.

      Parameters

      • Optional trim: boolean

        If true trim zero components from the tail.

      Returns number[]

      Array of prime exponents.

      Throws

      An error if the time monzo cannot be represented as sufficiently simple ratio in frequency-space.

      -
    • Serialize the time monzo to a JSON compatible object.

      -

      Returns {
          primeExponents: UnsignedFraction[];
          residual: UnsignedFraction;
          timeExponent: UnsignedFraction;
          type: string;
      }

      The serialized object with property type set to 'TimeMonzo'.

      -
      • primeExponents: UnsignedFraction[]
      • residual: UnsignedFraction
      • timeExponent: UnsignedFraction
      • type: string
    • Faithful string representation of the time monzo.

      +
    • Serialize the time monzo to a JSON compatible object.

      +

      Returns {
          p: number[];
          r: UnsignedFraction;
          t: UnsignedFraction;
          type: string;
      }

      The serialized object with property type set to 'TimeMonzo'.

      +
      • p: number[]
      • r: UnsignedFraction
      • t: UnsignedFraction
      • type: string
    • Convert the time monzo to a simple array of numbers.

      +

      Parameters

      • Optional trim: boolean

        If true trim zero components from the tail.

        +

      Returns number[]

      Array of prime exponents.

      +

      Throws

      An error if the time monzo cannot be represented as sufficiently simple ratio in frequency-space.

      +
    • Faithful string representation of the time monzo.

      Parameters

      • domain: Domain = 'linear'

        Domain of representation.

      Returns string

      String that evaluates to the same value as this time monzo.

      -
    • Convert a relative time monzo to cents. +

    • Convert a relative time monzo to cents. Conert an absosulte time monzo to the size in cents of the scalar of its time unit.

      Parameters

      • ignoreSign: boolean = false

        Compute the size of the absolute value.

      Returns number

      Size of the time monzo in cents.

      -
    • Convert a relative time monzo to a real number representing a ratio of frequencies. +

    • Convert a relative time monzo to a real number representing a ratio of frequencies. Convert an absolute time monzo to the scalar of its time unit.

      Returns number

      A real number.

      -
    • Create a scalar from an array of prime exponents.

      Parameters

      • monzo: FractionValue[]

        Exponents of prime numbers starting from prime 2. Possibly fractional.

      Returns TimeMonzo

      Scalar in the relative echelon.

      -
    • Construct a time monzo from a harmonic.

      Parameters

      • value: bigint

        Index of the harmonic with 1/1 starting from 1.

      • Optional numberOfComponents: number

        Number of components in the monzo vector part.

      Returns TimeMonzo

      Time monzo representing the harmonic.

      -
    • Construct a time monzo from a rational number.

      +
    • Construct a time monzo from a rational number.

      Parameters

      • numerator: bigint

        Numerator of the number.

      • denominator: bigint

        Denominator of the number.

      • Optional numberOfComponents: number

        Number of components in the monzo vector part.

      Returns TimeMonzo

      Time monzo representing the just intonation interval.

      -
    • Construct a time monzo from a pitch-space fraction of a frequency-space fraction.

      +
    • Construct a time monzo from a pitch-space fraction of a frequency-space fraction.

      Parameters

      • fractionOfEquave: FractionValue

        Fraction of the equave measured in pitch-space.

      • Optional equave: FractionValue

        Equave measured in frequency-space. Defaults to the octave (2/1).

      • Optional numberOfComponents: number

        Number of components in the monzo vector part.

      Returns TimeMonzo

      Time monzo representing N-of-EDO (default) or a generic EDJI interval.

      -
    • Construct a time monzo from a rational number.

      +
    • Construct a time monzo from a rational number.

      Parameters

      • fraction: FractionValue

        Rational number to convert.

      • Optional numberOfComponents: number

        Number of components in the monzo vector part.

      Returns TimeMonzo

      Time monzo representing the just intonation interval.

      -
    • Create a scalar from a rational number of cents (1 cent = 1 centisemitone or 1200th of an octave).

      +
    • Create a scalar from a rational number of cents (1 cent = 1 centisemitone or 1200th of an octave).

      Parameters

      • cents: FractionValue

        Width of a musical interval in cents i.e. logarithmic size.

      • Optional numberOfComponents: number

      Returns TimeMonzo

      Scalar in the relative echelon.

      -
    • Construct a time monzo from a value that's a rational multiple of 1 Hz.

      +
    • Construct a time monzo from a value that's a rational multiple of 1 Hz.

      Parameters

      • frequency: FractionValue

        Frequency measured in oscillations per second.

      • Optional numberOfComponents: number

        Number of components in the monzo vector part.

      Returns TimeMonzo

      Time monzo representing the frequency.

      -
    • Revive a TimeMonzo instance produced by TimeMonzo.toJSON(). Return everything else as is.

      +
    • Revive a TimeMonzo instance produced by TimeMonzo.toJSON(). Return everything else as is.

      Intended usage:

      -
      const data = JSON.parse(serializedData, TimeMonzo.reviver);
      +
      const data = JSON.parse(serializedData, TimeMonzo.reviver);
       

      Parameters

      • key: string

        Property name.

      • value: any

        Property value.

      Returns any

      Deserialized TimeMonzo instance or other data without modifications.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/classes/TimeReal.html b/sonic-weave/classes/TimeReal.html index ddfa50b..5d8817c 100644 --- a/sonic-weave/classes/TimeReal.html +++ b/sonic-weave/classes/TimeReal.html @@ -1,6 +1,6 @@ TimeReal | sonic-weave

    Class TimeReal

    Arbitrary (but inaccurate) value measured in time-related units (usually Hz).

    Used to represent irrational frequencies and values like pi.

    -

    Constructors

    Constructors

    Properties

    Methods

    abs @@ -48,121 +48,121 @@

    Constructors

    • Construct a time real.

      Parameters

      • timeExponent: number

        Exponent of the seconds unit.

      • value: number

        Multiplier of the time unit.

        -

      Returns TimeReal

    Properties

    timeExponent: number
    value: number

    Methods

    • Linear space absolute value of the time real.

      +

    Returns TimeReal

    Properties

    timeExponent: number
    value: number

    Methods

    • Linear space absolute value of the time real.

      Returns TimeReal

      The time real unchanged or negated if negative originally.

      -
    • Find the closest approximation of the time real in a harmonic series.

      +
    • Find the closest approximation of the time real in a harmonic series.

      Parameters

      • denominator: number

        Denominator of the harmonic series.

      Returns TimeMonzo

      The closest approximant in the series.

      -
    • Simplify the time real using the given threshold.

      Parameters

      • Optional eps: number

        Error threshold. Defaults to 0.001.

      Returns TimeMonzo

      Simple approximation of the time real.

      -
    • Find the closest approximation of the time real in a subharmonic series.

      +
    • Find the closest approximation of the time real in a subharmonic series.

      Parameters

      • numerator: number

        Numerator of the subharmonic series.

      Returns TimeMonzo

      The closest approximant in the series.

      -
    • Obtain an AST node representing the time real as a cents literal.

      Returns undefined | CentsLiteral

      Cents literal or a hacky real cents literal if necessary.

      -
    • Obtain an AST node representing the time monzo as a monzo literal suitable for interchange between programs.

      -

      Returns undefined | MonzoLiteral

      Monzo literal.

      -
    • Obtain an AST node representing the time real as a monzo literal.

      +
    • Obtain an AST node representing the time monzo as a monzo literal suitable for interchange between programs.

      +

      Returns MonzoLiteral

      Monzo literal.

      +
    • Obtain an AST node representing the time real as a monzo literal.

      Parameters

      • interchange: boolean = false

        Boolean flag to use Hz basis for the absolute echelon.

        -

      Returns undefined | MonzoLiteral

      Monzo literal.

      -

    Returns MonzoLiteral

    Monzo literal.

    +
    • Compare this time real with another.

      +
    • Compare this time real with another.

      Parameters

      Returns number

      Result < 0 if other is larger than this. Result > 0 if other is smaller than this. Result == 0 if other is equal to this in size.

      -
    • Divide the time real with another in linear space i.e. subtract in logarithmic space.

      +
    • Divide the time real with another in linear space i.e. subtract in logarithmic space.

      Parameters

      Returns TimeReal

      This real divided by the other in linear space.

      -
    • Calculate the product of this time real's time exponents with another's.

      +
    • Calculate the product of this time real's time exponents with another's.

      Parameters

      Returns Fraction

      Product of the time exponents as a fraction.

      -
    • Check if this time real has the same size as another.

      +
    • Check if this time real has the same size as another.

      Parameters

      Returns boolean

      true if the inputs are of equal size.

      -
    • Obtain a convergent of this time real.

      Parameters

      • depth: number

        How many continued fraction coefficients to use after the whole part.

      Returns TimeMonzo

      Approximation of the time real.

      -
    • Check if the time real lacks units of time/frequency.

      +
    • Check if the time real lacks units of time/frequency.

      Returns boolean

      true if the time real isn't expressed in units of time.

      -
    • Perform harmonic addition according to the thin lens equation f⁻¹ = u⁻¹ + v⁻¹.

      +
    • Perform harmonic addition according to the thin lens equation f⁻¹ = u⁻¹ + v⁻¹.

      Parameters

      Returns TimeReal

      The reciprocal of the sum of the reciprocals.

      -
    • Perform harmonic subtraction f⁻¹ = u⁻¹ - v⁻¹ (a variation of the thin lens equation).

      +
    • Perform harmonic subtraction f⁻¹ = u⁻¹ - v⁻¹ (a variation of the thin lens equation).

      Parameters

      Returns TimeReal

      The reciprocal of the difference of the reciprocals.

      -
    • Calculate the logarithm in the given base if it exists.

      +
    • Calculate the logarithm in the given base if it exists.

      Parameters

      Returns number

      x such that this ** x === other.

      -
    • Multiply the time real with another in linear space i.e. add in logarithmic space.

      +
    • Multiply the time real with another in linear space i.e. add in logarithmic space.

      Parameters

      Returns TimeReal

      The product of the time reals in linear space.

      -
    • Pitch space absolute value of the time real.

      Returns TimeReal

      The time real unchanged or inverted if less than one originally.

      -
    • Calculate modulus in pitch space with respect to another time real.

      +
    • Calculate modulus in pitch space with respect to another time real.

      Parameters

      • other: TimeReal | TimeMonzo

        Another time real.

      • ceiling: boolean = false

        If true x.reduce(x) evaluates to x.

      Returns TimeReal

      This reduced by the other.

      -
    • Check for strict equality between this and another time real.

      +
    • Check for strict equality between this and another time real.

      Parameters

      Returns boolean

      true if the time reals share the same time exponent, and value.

      -
    • Returns {
          denominator: bigint;
          numerator: bigint;
      }

      • denominator: bigint
      • numerator: bigint
    • Convert a relative scalar to cents.

      +
    • Returns {
          denominator: bigint;
          numerator: bigint;
      }

      • denominator: bigint
      • numerator: bigint
    • Convert a relative scalar to cents.

      Parameters

      • ignoreSign: boolean = false

        Ignore the linear sign of of the scalar.

      Returns number

      Size of this interval in cents.

      -
    • Obtain an array of the time real representing a continued fraction. The first element always contains the whole part.

      +
    • Obtain an array of the time real representing a continued fraction. The first element always contains the whole part.

      Returns number[]

      Array of continued fraction coefficients.

      -
    • Serialize the time real to a JSON compatible object.

      -

      Returns {
          timeExponent: number;
          type: string;
          value: string | number;
      }

      The serialized object with property type set to 'TimeReal'.

      -
      • timeExponent: number
      • type: string
      • value: string | number
    • Faithful string representation of the time real.

      +
    • Serialize the time real to a JSON compatible object.

      +

      Returns {
          t: number;
          type: string;
          v: string | number;
      }

      The serialized object with property type set to 'TimeReal'.

      +
      • t: number
      • type: string
      • v: string | number
    • Faithful string representation of the time real.

      Parameters

      • domain: Domain = 'linear'

        Domain of representation.

      Returns string

      String that evaluates to the same value as this time real.

      -
    • Convert value to cents ignoring the time exponent.

      +
    • Convert value to cents ignoring the time exponent.

      Parameters

      • ignoreSign: boolean = false

        Ignore the linear sign of of the scalar.

      Returns number

      Size of this interval in cents (only makes sense if relative).

      -
    • Convert a relative time real to a real number representing a ratio of frequencies. +

    • Convert a relative time real to a real number representing a ratio of frequencies. Convert an absolute time real to the scalar of its time unit.

      Returns number

      A real number.

      -
    • Create a real-valued scalar from cents (1 cent = 1 centisemitone or 1200th of an octave).

      +
    • Create a real-valued scalar from cents (1 cent = 1 centisemitone or 1200th of an octave).

      Parameters

      • cents: number

        Width of a musical interval in cents i.e. logarithmic size.

      Returns TimeReal

      Scalar in the relative echelon.

      -
    • Create a real-valued frequency.

      Parameters

      • frequency: number

        Frequency of a musical note measuder in hertz.

      Returns TimeReal

      Frequency value in the absolute echelon.

      -
    • Create a real-valued scalar.

      Parameters

      • value: number

        Linear value of the scalar.

      Returns TimeReal

      Scalar in the relative echelon.

      -
    • Revive a TimeReal instance produced by TimeReal.toJSON(). Return everything else as is.

      +
    • Revive a TimeReal instance produced by TimeReal.toJSON(). Return everything else as is.

      Intended usage:

      -
      const data = JSON.parse(serializedData, TimeReal.reviver);
      +
      const data = JSON.parse(serializedData, TimeReal.reviver);
       

      Parameters

      • key: string

        Property name.

      • value: any

        Property value.

      Returns any

      Deserialized TimeReal instance or other data without modifications.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/classes/Val.html b/sonic-weave/classes/Val.html index d805360..de80f7d 100644 --- a/sonic-weave/classes/Val.html +++ b/sonic-weave/classes/Val.html @@ -1,63 +1,80 @@ Val | sonic-weave

    A mappping vector commonly used to convert intervals in just intonation to steps of an equal temperament.

    -

    Constructors

    Properties

    Constructors

    • Construct a mapping vector.

      +fromBasisMap +

    Constructors

    • Construct a mapping vector.

      Parameters

      • value: TimeMonzo

        A TimeMonzo instance interpreted as a val. Usually a projective approximation to the Just Intonation Point with integer coefficients.

        -
      • equave: TimeMonzo

        The interval of equivalence of the equal temperament associated with this val.

        -
      • Optional node: IntervalLiteral

        Node in the abstract syntax tree used for string representation.

        -

      Returns Val

    Properties

    domain: "cologarithmic" = ...
    equave: TimeMonzo
    value: TimeMonzo

    Accessors

    • get divisions(): Fraction
    • The number of divisions in the equal temperament associated with this val.

      -

      Returns Fraction

    Methods

    • A meaningless operation.

      -

      Returns Val

      A new val obtained by pretending its value represents a logarithmic quantity.

      -
    • Add this this val to another.

      +
    • basis: ValBasis

      The subgroup basis associated with this val. The first basis element determines the equave that is equally divided by this val.

      +
    • Optional node: CoIntervalLiteral

      Node in the abstract syntax tree used for string representation.

      +

    Returns Val

    Properties

    basis: ValBasis
    domain: "cologarithmic" = ...
    value: TimeMonzo

    Accessors

    • get divisions(): Fraction
    • The number of divisions in the equal temperament associated with this val.

      +

      Returns Fraction

    • get sval(): FractionalMonzo
    • The value of this val within the associated basis.

      +

      Returns FractionalMonzo

    Methods

    • Normalize the leading coefficient to be positive.

      +

      Returns Val

      A new val with a positive division of its equave.

      +
    • Inversely scale this val by a linear interval.

      Parameters

      Returns Val

      A rescaled version of this val.

      -
    • Map an interval using this val or calculate the cosine of the unweighted angle between two vals.

      +
    • Map an interval using this val or calculate the cosine of the unweighted angle between two vals.

      Parameters

      • other: Interval | Val

        An interval to map or another val.

      Returns Interval

      The dot product between this and the other as a linear interval.

      -
    • Check if this val has the same size and equave as another.

      +
    • Check if this val has the same size and equave as another.

      Parameters

      • other: Val

        Another val.

      Returns boolean

      true if the vals have the same size and their equaves have the same size.

      -
    • Compute the root mean squared error against the just intonation point.

      +

      Parameters

      • weights: number[]

        Additional weights to apply on top of Tenney weights.

        +
      • unnormalized: boolean = false

        Return the unnormalized squared error instead.

        +

      Returns number

      The TE error.

      +
    • The geometric inverse of this val.

      Returns Interval

      An interval in the logarithmic domain whose dot product with the original val is unitary.

      -
    • Obtain the next val in the basis' generalized patent val sequence or approach it if this val is off-JIP.

      +

      Parameters

      • weights: number[]

        Additional weights to apply on top of Tenney weights.

        +

      Returns Val

      The val at unit distance that comes after this one (non-projective metric).

      +
    • A meaningless operation.

      Returns Val

      A new Val obtained by pretending its value represents a linear quantity.

      -
    • Check if this val has the same structure as another.

      +
    • Check if this val has the same structure as another.

      Parameters

      • other: Val

        Another val.

      Returns boolean

      true if the vals and their equaves have the same components.

      -
    • Subtract another val from this one.

      Parameters

      • other: Val

        Another val.

      Returns Val

      The difference of the vals.

      -
    • Obtain a faithful string representation of this val.

      +
    • Obtain a faithful string representation of this val.

      Returns string

      A string that evaluates to a val with the same value as this one when interpreted as a SonicWeave expression.

      -
    • Construct a val from an array of mapping entries representing equal divisions of an equave.

      +
    • Construct a val from an array of mapping entries representing equal divisions of an equave.

      Parameters

      • primeExponentMap: FractionValue[]

        Val components.

        -
      • Optional equave: FractionValue | TimeMonzo

        Equave of the equal temperament. Defaults to the octave.

        +
      • Optional basis: ValBasis

        Basis of the subgroup. Defaults to the primes.

        +
      • Optional node: CoIntervalLiteral

        Node in the abstract syntax tree used for string representation.

      Returns Val

      A cologarithmic mapping vector.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    • Convert an array of components in a subgroup basis to a val in the standard basis.

      +

      Parameters

      • basisExponentMap: FractionValue[]

        Components of the val.

        +
      • basis: ValBasis

        Basis of the val.

        +
      • Optional node: CoIntervalLiteral

        Node in the abstract syntax tree used for string representation.

        +

      Returns Val

    \ No newline at end of file diff --git a/sonic-weave/classes/ValBasis.html b/sonic-weave/classes/ValBasis.html new file mode 100644 index 0000000..417a928 --- /dev/null +++ b/sonic-weave/classes/ValBasis.html @@ -0,0 +1,88 @@ +ValBasis | sonic-weave

    Class ValBasis

    A basis of a fractional just intonation subgroup.

    +

    Constructors

    • Construct a basis for a fractional just intonation subgroup.

      +

      Parameters

      • basis: number | TimeMonzo[]

        Array of basis elements or number of primes starting from 2.

        +
      • Optional node: ValBasisLiteral

        Virtual AST node associated with this basis.

        +

      Returns ValBasis

    Properties

    dual_?: TimeMonzo[]
    ortho_?: TimeMonzo[]
    tenneyGram_?: GramResult
    tenneyValue_?: number[][]
    value: TimeMonzo[]

    Accessors

    • get numberOfComponents(): number
    • Prime limit of the basis as a 0-based ordinal.

      +

      Returns number

    • get size(): number
    • Number of basis elements / number of dimensions

      +

      Returns number

    • get tenneyGram(): GramResult
    • The unnormalized Gram-Schmidt process applied to tenney-weighted coordinates.

      +

      Returns GramResult

    • get tenneyValue(): number[][]
    • The value of this basis weighted with the logarithms of the primes.

      +

      Returns number[][]

    Methods

    • Convert a subgroup monzo in this basis to the standard basis.

      +

      Parameters

      • subgroupMonzo: ProtoFractionalMonzo

        Subgroup monzo in this basis.

        +

      Returns TimeMonzo

      Time monzo in the standard basis.

      +
    • Check if this basis is the same as another.

      +

      Parameters

      Returns boolean

      true if this basis is the same as the other.

      +
    • Create a (2*n + 1)^d hypercube.

      +

      Parameters

      • n: number

        Radius (max metric).

        +
      • puncture: boolean = false

        Remove center.

        +

      Returns TimeMonzo[]

    • Check if this basis is only "pointing" along prime axis.

      +

      Returns boolean

      true if all basis elements are powers of primes. false otherwise.

      +
    • Check if this basis is the standard prime basis.

      +

      Parameters

      • soft: boolean = false

        Only check for primality, not length of basis.

        +

      Returns boolean

      true if the basis consists of prime numbers in order.

      +
    • Perform Lenstra-Lenstra-Lovász basis reduction.

      +

      Parameters

      • weighting: "none" | "tenney"

        Weighting to use when judging basis angles and lengths.

        +

      Returns ValBasis

      A reduced ValBasis instance.

      +
    • Respell an interval to a simpler comma-equivalent one using a variant of Babai's nearest plane algorithm for approximate CVP.

      +

      Parameters

      • monzo: TimeMonzo

        The rational interval to reduce.

        +
      • weighting: "none" | "tenney"

      Returns TimeMonzo

      The reduced interval.

      +
    • Check if this basis is strictly the same as another.

      +

      Parameters

      Returns boolean

      true if this basis is strictly the same as the other.

      +
    • Convert a time monzo in the standard basis to this basis and leave a residual of the unconverted tail.

      +

      Parameters

      Returns [FractionalMonzo, TimeMonzo]

      Subgroup monzo and a standard residual outside of this basis.

      +
    • Convert this basis to a string that faithfully represents it.

      +

      Returns string

      String that has the same value as this basis if evaluated as a SonicWeave expression.

      +
    • Convert a time monzo in the standard basis to this basis.

      +

      Parameters

      Returns Monzo

      Subgroup monzo with integer coefficients.

      +

      Throws

      An error if the standard monzo is not integral in this basis.

      +
    \ No newline at end of file diff --git a/sonic-weave/functions/absolute.html b/sonic-weave/functions/absolute.html index a42507b..da6d833 100644 --- a/sonic-weave/functions/absolute.html +++ b/sonic-weave/functions/absolute.html @@ -2,4 +2,4 @@

    Parameters

    Returns Interval

    The interval as a frequency in its respective domain.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/absoluteMosMonzo.html b/sonic-weave/functions/absoluteMosMonzo.html index 230bffa..10c6c96 100644 --- a/sonic-weave/functions/absoluteMosMonzo.html +++ b/sonic-weave/functions/absoluteMosMonzo.html @@ -1,5 +1,5 @@ -absoluteMosMonzo | sonic-weave

    Function absoluteMosMonzo

    • Convert a Diamond-mos note to a time monzo relative to J4 = C4.

      +absoluteMosMonzo | sonic-weave

      Function absoluteMosMonzo

      Generated using TypeDoc

      \ No newline at end of file +

    Returns TimeMonzo | TimeReal

    A time monzo relative to J4.

    +
    \ No newline at end of file diff --git a/sonic-weave/functions/add.html b/sonic-weave/functions/add.html index c614ba6..682458c 100644 --- a/sonic-weave/functions/add.html +++ b/sonic-weave/functions/add.html @@ -2,4 +2,4 @@

    Parameters

    Returns StepVector

    The sum of the step vectors.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/binaryBroadcast.html b/sonic-weave/functions/binaryBroadcast.html index a9cee5a..2233eda 100644 --- a/sonic-weave/functions/binaryBroadcast.html +++ b/sonic-weave/functions/binaryBroadcast.html @@ -4,4 +4,4 @@
  • right: SonicWeaveValue

    Array or record. The right operand.

  • fn: ((x, y) => SonicWeaveValue)

    Binary function for evaluating subvalues.

  • Returns SonicWeaveValue

    The function mapped over the values of the containers.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/binaryExponent.html b/sonic-weave/functions/binaryExponent.html index ef23f2e..56705f7 100644 --- a/sonic-weave/functions/binaryExponent.html +++ b/sonic-weave/functions/binaryExponent.html @@ -1,4 +1,4 @@ binaryExponent | sonic-weave

    Function binaryExponent

    • Optain the exponent of 1024 associated with the given prefix.

      Parameters

      Returns number

      The exponent of 1024 associated with the prefix.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/bleach.html b/sonic-weave/functions/bleach.html index 6a25a51..3cd524f 100644 --- a/sonic-weave/functions/bleach.html +++ b/sonic-weave/functions/bleach.html @@ -1,4 +1,4 @@ bleach | sonic-weave

    Function bleach

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/builtinNode.html b/sonic-weave/functions/builtinNode.html index 2899e75..cc8096b 100644 --- a/sonic-weave/functions/builtinNode.html +++ b/sonic-weave/functions/builtinNode.html @@ -1,4 +1,4 @@ -builtinNode | sonic-weave

    Function builtinNode

    • Construct a virtual AST node for a function defined outside of the DSL but callable inside the DSL.

      +builtinNode | sonic-weave

      Function builtinNode

      Generated using TypeDoc

      \ No newline at end of file +
    • Optional defaults: Record<string, Expression>

    Returns FunctionDeclaration

    Virtual FunctionDeclaration to be attached to builtin.__node__.

    +
    \ No newline at end of file diff --git a/sonic-weave/functions/centsColor.html b/sonic-weave/functions/centsColor.html index acf9c6e..3f2ecd9 100644 --- a/sonic-weave/functions/centsColor.html +++ b/sonic-weave/functions/centsColor.html @@ -2,4 +2,4 @@

    Parameters

    Returns Color

    Color corresponding to the size of the interval.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/combineTuningMaps.html b/sonic-weave/functions/combineTuningMaps.html new file mode 100644 index 0000000..7f5f006 --- /dev/null +++ b/sonic-weave/functions/combineTuningMaps.html @@ -0,0 +1,5 @@ +combineTuningMaps | sonic-weave

    Function combineTuningMaps

    • Combine tuning maps to minimize the distance to the JIP.

      +

      Parameters

      • jip: TuningMap

        Just Intonation Point in (co-)weighted coordinates.

        +
      • maps: TuningMap[]

        Maps to combine in (co-)weighted coordinates.

        +

      Returns number[]

      The closest combination of the maps to the JIP in (co-)weighted coordinates.

      +
    \ No newline at end of file diff --git a/sonic-weave/functions/compare.html b/sonic-weave/functions/compare.html index f16b9e2..3a000f4 100644 --- a/sonic-weave/functions/compare.html +++ b/sonic-weave/functions/compare.html @@ -3,4 +3,4 @@
  • a: SonicWeavePrimitive

    Left value.

  • b: SonicWeavePrimitive

    Right value.

  • Returns number

    A negative number if a is less than b, a positive number if a is greater than b, zero if equal.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/createTag.html b/sonic-weave/functions/createTag.html index 42a2157..161c34e 100644 --- a/sonic-weave/functions/createTag.html +++ b/sonic-weave/functions/createTag.html @@ -4,4 +4,4 @@
  • Optional extraBuiltins: Record<string, SonicWeaveValue>

    Custom builtins callable inside the SonicWeave program.

  • escapeStrings: boolean = false

    If true all escape sequences are evaluated before interpreting the literal as a SonicWeave program.

  • Returns ((strings, ...args) => SonicWeaveValue)

    A tag that can be attached to template literals in order to evaluate them.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/evaluateExpression.html b/sonic-weave/functions/evaluateExpression.html index 3d25ee4..4beb9da 100644 --- a/sonic-weave/functions/evaluateExpression.html +++ b/sonic-weave/functions/evaluateExpression.html @@ -4,4 +4,4 @@
  • Optional extraBuiltins: Record<string, SonicWeaveValue>

    Custom builtins callable inside the SonicWeave program.

  • Returns SonicWeaveValue

    Value of the final expression in the program.

    Throws

    An error if the final statement in the program is not an expression.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/evaluateSource.html b/sonic-weave/functions/evaluateSource.html index b144f2a..f37ae55 100644 --- a/sonic-weave/functions/evaluateSource.html +++ b/sonic-weave/functions/evaluateSource.html @@ -3,4 +3,4 @@
  • includePrelude: boolean = true

    Whether or not to include the extended standard library. Passing in false results in a faster start-up time.

  • Optional extraBuiltins: Record<string, SonicWeaveValue>

    Custom builtins callable inside the SonicWeave program.

  • Returns StatementVisitor

    A SonicWeave statement visitor after evaluating all of the statements in the program.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/expressionToString.html b/sonic-weave/functions/expressionToString.html index 0f3092f..b9f6899 100644 --- a/sonic-weave/functions/expressionToString.html +++ b/sonic-weave/functions/expressionToString.html @@ -1,4 +1,4 @@ expressionToString | sonic-weave

    Function expressionToString

    • Convert an AST node to a string representation.

      Parameters

      Returns string

      Text representation of the expression.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/factorColor.html b/sonic-weave/functions/factorColor.html index 5cb49d3..d884682 100644 --- a/sonic-weave/functions/factorColor.html +++ b/sonic-weave/functions/factorColor.html @@ -1,4 +1,4 @@ factorColor | sonic-weave

    Function factorColor

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/fractionToVectorComponent.html b/sonic-weave/functions/fractionToVectorComponent.html index 4e29bf2..2a39786 100644 --- a/sonic-weave/functions/fractionToVectorComponent.html +++ b/sonic-weave/functions/fractionToVectorComponent.html @@ -1 +1 @@ -fractionToVectorComponent | sonic-weave

    Function fractionToVectorComponent

    Generated using TypeDoc

    \ No newline at end of file +fractionToVectorComponent | sonic-weave

    Function fractionToVectorComponent

    \ No newline at end of file diff --git a/sonic-weave/functions/fromInteger.html b/sonic-weave/functions/fromInteger.html index a9f5046..4eb56ad 100644 --- a/sonic-weave/functions/fromInteger.html +++ b/sonic-weave/functions/fromInteger.html @@ -1,4 +1,4 @@ fromInteger | sonic-weave

    Function fromInteger

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/getGlobalVisitor.html b/sonic-weave/functions/getGlobalVisitor.html index 13b5cec..a7afa34 100644 --- a/sonic-weave/functions/getGlobalVisitor.html +++ b/sonic-weave/functions/getGlobalVisitor.html @@ -3,4 +3,4 @@

    Parameters

    • includePrelude: boolean = true

      Whether or not to include the extended standard library. Passing in false results in a faster start-up time.

    • Optional extraBuiltins: Record<string, SonicWeaveValue>

      Custom builtins callable inside the SonicWeave program.

    Returns StatementVisitor

    A SonicWeave statement evaluator containing the built-in global scope.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/getNumberOfComponents.html b/sonic-weave/functions/getNumberOfComponents.html index b958dab..6f00697 100644 --- a/sonic-weave/functions/getNumberOfComponents.html +++ b/sonic-weave/functions/getNumberOfComponents.html @@ -1,3 +1,3 @@ getNumberOfComponents | sonic-weave

    Function getNumberOfComponents

    • Get the default number of components in the vector part of extended monzos.

      Returns number

      The default length of the vector part.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/getSourceVisitor.html b/sonic-weave/functions/getSourceVisitor.html index 56dcb78..085d56e 100644 --- a/sonic-weave/functions/getSourceVisitor.html +++ b/sonic-weave/functions/getSourceVisitor.html @@ -2,4 +2,4 @@

    Parameters

    • includePrelude: boolean = true

      Whether or not to include the extended standard library. Passing in false results in a faster start-up time.

    • Optional extraBuiltins: Record<string, SonicWeaveValue>

      Custom builtins callable inside the SonicWeave program.

    Returns StatementVisitor

    A SonicWeave statement evaluator.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/getStepVector.html b/sonic-weave/functions/getStepVector.html index 3afc59b..d52d2e7 100644 --- a/sonic-weave/functions/getStepVector.html +++ b/sonic-weave/functions/getStepVector.html @@ -2,4 +2,4 @@

    Parameters

    • word: string

      A mode of a (periodic) scale given as a string where each character represents a (geometric) step.

    • Optional intervalClass: number

      Which subtension from root position to calculate (defaults to the whole word).

    Returns StepVector

    A StepVector instance representing the interval class in terms of the word characters.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/hasConstantStructure.html b/sonic-weave/functions/hasConstantStructure.html index 9315e2d..d8040e4 100644 --- a/sonic-weave/functions/hasConstantStructure.html +++ b/sonic-weave/functions/hasConstantStructure.html @@ -1,4 +1,4 @@ hasConstantStructure | sonic-weave

    Function hasConstantStructure

    • Determine if a scale has constant structure i.e. you can tell the interval class from the size of an interval.

      Parameters

      • monzos: TimeMonzo[]

        Musical intervals given as relative monzos not including the implicit unison at the start, but including the interval of repetition at the end.

      Returns boolean

      true if the scale has constant structure.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/hasOwn.html b/sonic-weave/functions/hasOwn.html index 11c2a38..c1befef 100644 --- a/sonic-weave/functions/hasOwn.html +++ b/sonic-weave/functions/hasOwn.html @@ -2,4 +2,4 @@

    Parameters

    • object: Object

      The JavaScript object instance to test.

    • property: PropertyKey

      The String name or Symbol of the property to test.

    Returns any

    true if the specified object has directly defined the specified property. Otherwise false

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/infect.html b/sonic-weave/functions/infect.html index 8e4deb7..d20e3e9 100644 --- a/sonic-weave/functions/infect.html +++ b/sonic-weave/functions/infect.html @@ -2,4 +2,4 @@

    Parameters

    • left: Interval

      The preferred source of information.

    • right: Interval

      The secondary source of information.

    Returns Interval

    Dummy interval with the combined information.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/inferFJSFlavor.html b/sonic-weave/functions/inferFJSFlavor.html index e65a5e9..a8873d4 100644 --- a/sonic-weave/functions/inferFJSFlavor.html +++ b/sonic-weave/functions/inferFJSFlavor.html @@ -2,4 +2,4 @@

    Parameters

    Returns FJSFlavor

    The FJS flavor that best corresponds to the input(s).

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/intCombineTuningMaps.html b/sonic-weave/functions/intCombineTuningMaps.html new file mode 100644 index 0000000..72ec384 --- /dev/null +++ b/sonic-weave/functions/intCombineTuningMaps.html @@ -0,0 +1,6 @@ +intCombineTuningMaps | sonic-weave

    Function intCombineTuningMaps

    • Combine tuning maps to minimize the distance to the JIP.

      +

      Parameters

      • jip: TuningMap

        Just Intonation Point in (co-)weighted coordinates.

        +
      • vals: Monzo[]

        Vals to combine in (co-)weighted coordinates.

        +
      • searchRadius: number

        Width of the search space.

        +

      Returns number[]

      Integer coefficients of the linear combination closest to the JIP.

      +
    \ No newline at end of file diff --git a/sonic-weave/functions/integerToVectorComponent.html b/sonic-weave/functions/integerToVectorComponent.html index 770a0ea..f09455f 100644 --- a/sonic-weave/functions/integerToVectorComponent.html +++ b/sonic-weave/functions/integerToVectorComponent.html @@ -1 +1 @@ -integerToVectorComponent | sonic-weave

    Function integerToVectorComponent

    Generated using TypeDoc

    \ No newline at end of file +integerToVectorComponent | sonic-weave

    Function integerToVectorComponent

    \ No newline at end of file diff --git a/sonic-weave/functions/intervalLiteralFromJSON.html b/sonic-weave/functions/intervalLiteralFromJSON.html new file mode 100644 index 0000000..a73a0af --- /dev/null +++ b/sonic-weave/functions/intervalLiteralFromJSON.html @@ -0,0 +1 @@ +intervalLiteralFromJSON | sonic-weave

    Function intervalLiteralFromJSON

    \ No newline at end of file diff --git a/sonic-weave/functions/intervalValueAs.html b/sonic-weave/functions/intervalValueAs.html index 0f41a3e..b5bb1b9 100644 --- a/sonic-weave/functions/intervalValueAs.html +++ b/sonic-weave/functions/intervalValueAs.html @@ -3,4 +3,4 @@
  • node: undefined | IntervalLiteral

    Reference node to infer type and formatting information from.

  • simplify: boolean = false

    Ignore formatting information from the reference AST node.

  • Returns IntervalLiteral | undefined

    AST node representing the time monzo.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/isArrayOrRecord.html b/sonic-weave/functions/isArrayOrRecord.html index 2fc7199..f910ddf 100644 --- a/sonic-weave/functions/isArrayOrRecord.html +++ b/sonic-weave/functions/isArrayOrRecord.html @@ -1,4 +1,4 @@ isArrayOrRecord | sonic-weave

    Function isArrayOrRecord

    • Check if the value is an array or a SonicWeave record.

      Parameters

      Returns boolean

      true if the value is a container that supports broadcasting.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/letters.html b/sonic-weave/functions/letters.html index e98d3d5..27eaa3c 100644 --- a/sonic-weave/functions/letters.html +++ b/sonic-weave/functions/letters.html @@ -1,4 +1,4 @@ letters | sonic-weave

    Function letters

    • Return the set of letters representing scale steps, sorted in ASCII order.

      Parameters

      • sv: StepVector

        Step vector to extract letters from.

      Returns string[]

      Letters with non-zero count in the step vector.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/linear.html b/sonic-weave/functions/linear.html index b86944a..7d07908 100644 --- a/sonic-weave/functions/linear.html +++ b/sonic-weave/functions/linear.html @@ -1,4 +1,4 @@ linear | sonic-weave

    Function linear

    • Convert interval to linear representation.

      Parameters

      • interval: boolean | Interval

        Interval to convert.

      Returns Interval

      The interval in the linear domain with the underlying value unmodified.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/linearOne.html b/sonic-weave/functions/linearOne.html index 7651ed1..85f7344 100644 --- a/sonic-weave/functions/linearOne.html +++ b/sonic-weave/functions/linearOne.html @@ -1,3 +1,3 @@ linearOne | sonic-weave

    Function linearOne

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/literalFromJSON.html b/sonic-weave/functions/literalFromJSON.html deleted file mode 100644 index f58944d..0000000 --- a/sonic-weave/functions/literalFromJSON.html +++ /dev/null @@ -1 +0,0 @@ -literalFromJSON | sonic-weave

    Function literalFromJSON

    Generated using TypeDoc

    \ No newline at end of file diff --git a/sonic-weave/functions/literalToJSON.html b/sonic-weave/functions/literalToJSON.html index 8c9e80d..cf714b4 100644 --- a/sonic-weave/functions/literalToJSON.html +++ b/sonic-weave/functions/literalToJSON.html @@ -1 +1 @@ -literalToJSON | sonic-weave

    Function literalToJSON

    Generated using TypeDoc

    \ No newline at end of file +literalToJSON | sonic-weave

    Function literalToJSON

    \ No newline at end of file diff --git a/sonic-weave/functions/literalToString.html b/sonic-weave/functions/literalToString.html index f4350d9..edd2a2b 100644 --- a/sonic-weave/functions/literalToString.html +++ b/sonic-weave/functions/literalToString.html @@ -1,4 +1,4 @@ literalToString | sonic-weave

    Function literalToString

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/log.html b/sonic-weave/functions/log.html index fc5c572..ae2f413 100644 --- a/sonic-weave/functions/log.html +++ b/sonic-weave/functions/log.html @@ -2,4 +2,4 @@

    Parameters

    Returns TimeReal | TimeMonzo

    Left value divided by the right value as a TimeMonzo or TimeReal.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/logarithmic.html b/sonic-weave/functions/logarithmic.html index 4fce62b..8376f50 100644 --- a/sonic-weave/functions/logarithmic.html +++ b/sonic-weave/functions/logarithmic.html @@ -1,4 +1,4 @@ logarithmic | sonic-weave

    Function logarithmic

    • Convert interval to logarithmic representation.

      Parameters

      • this: any
      • interval: boolean | Interval

        Interval to convert.

      Returns Interval

      The interval in the logarithmic domain with the underlying value unmodified.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/lstr.html b/sonic-weave/functions/lstr.html new file mode 100644 index 0000000..42bd16a --- /dev/null +++ b/sonic-weave/functions/lstr.html @@ -0,0 +1,6 @@ +lstr | sonic-weave

    Function lstr

    • Obtain a "best effort" string representation of the value that's below the maximum length (w/o color or label).

      +

      Parameters

      Returns string

      Short string representation that's below the maximum length if possible.

      +
    \ No newline at end of file diff --git a/sonic-weave/functions/metricExponent.html b/sonic-weave/functions/metricExponent.html index 8d12cba..50a5b9a 100644 --- a/sonic-weave/functions/metricExponent.html +++ b/sonic-weave/functions/metricExponent.html @@ -1,4 +1,4 @@ metricExponent | sonic-weave

    Function metricExponent

    • Optain the ten's exponent associated with the given prefix.

      Parameters

      Returns number

      The ten's exponent associated with the prefix.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/mosMonzo.html b/sonic-weave/functions/mosMonzo.html index 96e381d..0c01098 100644 --- a/sonic-weave/functions/mosMonzo.html +++ b/sonic-weave/functions/mosMonzo.html @@ -1,5 +1,5 @@ -mosMonzo | sonic-weave

    Function mosMonzo

    • Convert a generic 0-indexed TAMNAMS mosstep to a relative time monzo.

      +mosMonzo | sonic-weave

      Function mosMonzo

      Generated using TypeDoc

      \ No newline at end of file +

    Returns TimeMonzo | TimeReal

    A relative time monzo.

    +
    \ No newline at end of file diff --git a/sonic-weave/functions/neg.html b/sonic-weave/functions/neg.html index e891fcc..10fde25 100644 --- a/sonic-weave/functions/neg.html +++ b/sonic-weave/functions/neg.html @@ -1,4 +1,4 @@ neg | sonic-weave

    Function neg

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/norm.html b/sonic-weave/functions/norm.html index f3e8a0e..5ed788e 100644 --- a/sonic-weave/functions/norm.html +++ b/sonic-weave/functions/norm.html @@ -1,4 +1,4 @@ norm | sonic-weave

    Function norm

    • Return the taxicab norm of a step vector, the sum of the absolute values of the components.

      Parameters

      Returns number

      Size of the step vector.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/numberToDecimalLiteral.html b/sonic-weave/functions/numberToDecimalLiteral.html index c266475..b7919f3 100644 --- a/sonic-weave/functions/numberToDecimalLiteral.html +++ b/sonic-weave/functions/numberToDecimalLiteral.html @@ -2,4 +2,4 @@

    Parameters

    • num: number | Fraction

      Number to convert. Fractions should have a power of ten denominator unless flavor is 'r'.

    • flavor: NumericFlavor

      Numeric flavor of the literal.

    Returns DecimalLiteral

    Virtual AST node representing a decimal literal.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/parseAST.html b/sonic-weave/functions/parseAST.html index e72d4c9..ceedbab 100644 --- a/sonic-weave/functions/parseAST.html +++ b/sonic-weave/functions/parseAST.html @@ -1,4 +1,4 @@ parseAST | sonic-weave

    Function parseAST

    • Parse a string of text written in the SonicWeave domain specific language into an abstract syntax tree.

      Parameters

      • source: string

        Source code for a SonicWeave program.

      Returns Program

      The program as the root node of the AST.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/parseBasis.html b/sonic-weave/functions/parseBasis.html new file mode 100644 index 0000000..7c249e2 --- /dev/null +++ b/sonic-weave/functions/parseBasis.html @@ -0,0 +1,4 @@ +parseBasis | sonic-weave

    Function parseBasis

    • Parse a string like "2.3.5" to a subgroup basis. A single number is interpreted as a prime limit.

      +

      Parameters

      • input: string

        User input in a context that expects a subgroup basis.

        +

      Returns ValBasis

      A ValBasis instance.

      +
    \ No newline at end of file diff --git a/sonic-weave/functions/parseChord.html b/sonic-weave/functions/parseChord.html index b590525..af37e56 100644 --- a/sonic-weave/functions/parseChord.html +++ b/sonic-weave/functions/parseChord.html @@ -2,4 +2,4 @@

    Parameters

    • input: string

      User input in a context that expects a chord.

    • includePrelude: boolean = true

      Whether or not to include the extended standard library. Passing in false results in a faster start-up time.

    Returns Interval[]

    An array of parsed Interval instances.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/parseScaleWorkshop2Line.html b/sonic-weave/functions/parseScaleWorkshop2Line.html index 78d85e2..cf7e988 100644 --- a/sonic-weave/functions/parseScaleWorkshop2Line.html +++ b/sonic-weave/functions/parseScaleWorkshop2Line.html @@ -5,4 +5,4 @@
  • universalMinus: boolean = true

    Allow unary minus operator in front of every line type.

  • Returns Interval

    Interval instance constructed from the input string.

    Throws

    An error if the input cannot be interpreted as an interval.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/parseVals.html b/sonic-weave/functions/parseVals.html index 73f8cbd..0ac9885 100644 --- a/sonic-weave/functions/parseVals.html +++ b/sonic-weave/functions/parseVals.html @@ -1,6 +1,6 @@ -parseVals | sonic-weave

    Function parseVals

    • Parse a list of vals separated by '|', '&', ':', ';', ',' or whitespace.

      +parseVals | sonic-weave

      Function parseVals

      • Parse a list of vals separated by '|', '&', ':', ';', ',' or whitespace.

        Parameters

        • input: string

          User input in a context that expects a sequance of vals.

          -
        • subgroup: string

          Dot-separated subgroup basis or the prime limit.

          +
        • basis: ValBasis

          Dot-separated subgroup basis or the prime limit parsed by parseBasis.

        • includePrelude: boolean = true

          Whether or not to include the extended standard library. Passing in false results in a faster start-up time.

          -

        Returns number[][]

        An array of number arrays representing vals in the subgroup basis.

        -

      Generated using TypeDoc

      \ No newline at end of file +

    Returns Val[]

    An array of number arrays representing vals in the subgroup basis.

    +
    \ No newline at end of file diff --git a/sonic-weave/functions/rank2FromCommas.html b/sonic-weave/functions/rank2FromCommas.html new file mode 100644 index 0000000..73fd3d6 --- /dev/null +++ b/sonic-weave/functions/rank2FromCommas.html @@ -0,0 +1,7 @@ +rank2FromCommas | sonic-weave

    Function rank2FromCommas

    • Obtain a rank-2 temperament from a comma list based on user input.

      +

      Parameters

      • commaInput: string

        User-provided comma list.

        +
      • subgroupInput: string

        Optional user-provided subgroup basis.

        +
      • optimizationScheme: OptimizationScheme

        Optimization scheme to use.

        +
      • Optional subgroupWeights: number[]

        Additional importance weights to apply on top of Tenney weights.

        +

      Returns Temperament

      A Temperament instance tempering out the given commas and featuring exactly two independent generators.

      +
    \ No newline at end of file diff --git a/sonic-weave/functions/relative.html b/sonic-weave/functions/relative.html index ef726c2..a158437 100644 --- a/sonic-weave/functions/relative.html +++ b/sonic-weave/functions/relative.html @@ -2,4 +2,4 @@

    Parameters

    Returns Interval

    The interval as a frequency ratio in its respective domain.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/repr.html b/sonic-weave/functions/repr.html index f41b681..850ddc7 100644 --- a/sonic-weave/functions/repr.html +++ b/sonic-weave/functions/repr.html @@ -2,4 +2,4 @@

    Parameters

    Returns string

    String that evaluates to the value.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/requireParameters.html b/sonic-weave/functions/requireParameters.html index f46a4d8..00237ca 100644 --- a/sonic-weave/functions/requireParameters.html +++ b/sonic-weave/functions/requireParameters.html @@ -1,3 +1,3 @@ requireParameters | sonic-weave

    Function requireParameters

    • Throw an error if any of the parameters passed in has an undefined value.

      Parameters

      • parameters: Record<string, any>

        A record of parameters to make mandatory.

        -

      Returns void

    Generated using TypeDoc

    \ No newline at end of file +

    Returns void

    \ No newline at end of file diff --git a/sonic-weave/functions/rotate.html b/sonic-weave/functions/rotate.html index 2b12622..851e596 100644 --- a/sonic-weave/functions/rotate.html +++ b/sonic-weave/functions/rotate.html @@ -2,4 +2,4 @@

    Parameters

    • str: string

      String to rotate.

    • offset: number

      Offset to rotate by.

    Returns string

    The rotated string.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/scalarMult.html b/sonic-weave/functions/scalarMult.html index 7cfb2b3..00d49b1 100644 --- a/sonic-weave/functions/scalarMult.html +++ b/sonic-weave/functions/scalarMult.html @@ -2,4 +2,4 @@

    Parameters

    • v: StepVector

      Step vector to scale.

    • scalar: number

      A scalar to scale by.

    Returns StepVector

    The vector multiplied by the given scalar.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/scaleMonzos.html b/sonic-weave/functions/scaleMonzos.html index 190002d..ec1353b 100644 --- a/sonic-weave/functions/scaleMonzos.html +++ b/sonic-weave/functions/scaleMonzos.html @@ -1,4 +1,4 @@ -scaleMonzos | sonic-weave

    Function scaleMonzos

    • Obtain relative values for one equave-run of the given config of a MOS declaration with implicit unison.

      +scaleMonzos | sonic-weave

      Function scaleMonzos

      • Obtain relative values for one equave-run of the given config of a MOS declaration with implicit unison.

        Parameters

        • config: MosConfig

          Result of a MOS declaration.

          -

        Returns TimeMonzo[]

        An array of relative time monzos.

        -

      Generated using TypeDoc

      \ No newline at end of file +

    Returns (TimeReal | TimeMonzo)[]

    An array of relative time monzos.

    +
    \ No newline at end of file diff --git a/sonic-weave/functions/setNumberOfComponents.html b/sonic-weave/functions/setNumberOfComponents.html index ad96788..54bca3e 100644 --- a/sonic-weave/functions/setNumberOfComponents.html +++ b/sonic-weave/functions/setNumberOfComponents.html @@ -1,3 +1,3 @@ setNumberOfComponents | sonic-weave

    Function setNumberOfComponents

    • Set the default number of components in the vector part of time monzos.

      Parameters

      • n: number

        New default length of the vector part.

        -

      Returns void

    Generated using TypeDoc

    \ No newline at end of file +

    Returns void

    \ No newline at end of file diff --git a/sonic-weave/functions/setUnion.html b/sonic-weave/functions/setUnion.html index 5bc5ae0..71588df 100644 --- a/sonic-weave/functions/setUnion.html +++ b/sonic-weave/functions/setUnion.html @@ -2,4 +2,4 @@

    Type Parameters

    • T

    Parameters

    • a: Set<T>

      First set.

    • b: Set<T>

      Second set.

    Returns Set<T>

    New set that contains elements of both sets (without duplicates).

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/simplify.html b/sonic-weave/functions/simplify.html index 4cc8ac9..94ef527 100644 --- a/sonic-weave/functions/simplify.html +++ b/sonic-weave/functions/simplify.html @@ -1,4 +1,4 @@ simplify | sonic-weave

    Function simplify

    Generated using TypeDoc

    \ No newline at end of file +
  • Parameters

    Returns Val

  • \ No newline at end of file diff --git a/sonic-weave/functions/sonicTruth.html b/sonic-weave/functions/sonicTruth.html index 50b7d8f..b2cb799 100644 --- a/sonic-weave/functions/sonicTruth.html +++ b/sonic-weave/functions/sonicTruth.html @@ -1,4 +1,4 @@ sonicTruth | sonic-weave

    Function sonicTruth

    • Obtain the truth value of a SonicWeave value.

      Parameters

      Returns boolean

      Boolean corresponding to the truthiness of the test value.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/sort.html b/sonic-weave/functions/sort.html deleted file mode 100644 index 85e870e..0000000 --- a/sonic-weave/functions/sort.html +++ /dev/null @@ -1,5 +0,0 @@ -sort | sonic-weave

    Function sort

    • Sort the current/given scale in ascending order (in place).

      -

      Parameters

      • this: ExpressionVisitor

        ExpressionVisitor instance providing the current scale and context for comparing across echelons.

        -
      • Optional scale: Interval[]

        Musical scale to sort (defaults to context scale).

        -
      • Optional compareFn: Function

        SonicWeave riff for comparing elements.

        -

      Returns void

    Generated using TypeDoc

    \ No newline at end of file diff --git a/sonic-weave/functions/sortInPlace.html b/sonic-weave/functions/sortInPlace.html new file mode 100644 index 0000000..3a029a6 --- /dev/null +++ b/sonic-weave/functions/sortInPlace.html @@ -0,0 +1,5 @@ +sortInPlace | sonic-weave

    Function sortInPlace

    • Sort the current/given scale in ascending order (in place).

      +

      Parameters

      • this: ExpressionVisitor

        ExpressionVisitor instance providing the current scale and context for comparing across echelons.

        +
      • Optional scale: Interval[]

        Musical scale to sort (defaults to context scale).

        +
      • Optional compareFn: Function

        SonicWeave riff for comparing elements.

        +

      Returns void

    \ No newline at end of file diff --git a/sonic-weave/functions/stepSignature.html b/sonic-weave/functions/stepSignature.html index d711b21..9e877fa 100644 --- a/sonic-weave/functions/stepSignature.html +++ b/sonic-weave/functions/stepSignature.html @@ -1,4 +1,4 @@ stepSignature | sonic-weave

    Function stepSignature

    • Calculate the step signature of an entire scale word.

      Parameters

      • word: string

        A (periodic) scale given as a string where each character represents a (geometric) step.

      Returns StepVector

      A StepVector instance representing the size of the entire scale.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/stepString.html b/sonic-weave/functions/stepString.html index 3066bf0..b453bc5 100644 --- a/sonic-weave/functions/stepString.html +++ b/sonic-weave/functions/stepString.html @@ -1,4 +1,4 @@ stepString | sonic-weave

    Function stepString

    • Break a scale with implicit unison into an implicitly repeating scale word.

      Parameters

      • monzos: (TimeReal | TimeMonzo)[]

        Relative monzos representing intervals of the scale.

      Returns string

      A scale word where each character represents a step of distinct size.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/stepVectorArity.html b/sonic-weave/functions/stepVectorArity.html index ebb322b..621f9d3 100644 --- a/sonic-weave/functions/stepVectorArity.html +++ b/sonic-weave/functions/stepVectorArity.html @@ -1,4 +1,4 @@ stepVectorArity | sonic-weave

    Function stepVectorArity

    • Return the number of distinct letters in a step vector.

      Parameters

      Returns number

      Arity of the step vector.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/stepVectorMatrix.html b/sonic-weave/functions/stepVectorMatrix.html index acbf855..f663196 100644 --- a/sonic-weave/functions/stepVectorMatrix.html +++ b/sonic-weave/functions/stepVectorMatrix.html @@ -1,4 +1,4 @@ stepVectorMatrix | sonic-weave

    Function stepVectorMatrix

    • Compute the interval matrix a.k.a. the modes of a scale in terms of StepVector instances.

      Parameters

      • word: string

        A (periodic) scale given as a string where each character represents a (geometric) step.

      Returns StepVector[][]

      An array of arrays of StepVector instances representing the modes of the scale (j-step on mode i).

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/str.html b/sonic-weave/functions/str.html index 7f9f1de..4a54b7d 100644 --- a/sonic-weave/functions/str.html +++ b/sonic-weave/functions/str.html @@ -2,4 +2,4 @@

    Parameters

    Returns string

    String that evaluates to the value.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/sub.html b/sonic-weave/functions/sub.html index 9988dc2..ddfa3e6 100644 --- a/sonic-weave/functions/sub.html +++ b/sonic-weave/functions/sub.html @@ -2,4 +2,4 @@

    Parameters

    Returns StepVector

    Difference of the step vectors.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/subtensions.html b/sonic-weave/functions/subtensions.html index 242d49b..d30cbf2 100644 --- a/sonic-weave/functions/subtensions.html +++ b/sonic-weave/functions/subtensions.html @@ -1,4 +1,4 @@ subtensions | sonic-weave

    Function subtensions

    • Calculate all subtensions i.e 0-indexed interval classes associated with relative intervals.

      Parameters

      • monzos: TimeMonzo[]

        Musical intervals given as relative monzos not including the implicit unison at the start, but including the interval of repetition at the end.

      Returns Subtender[]

      An array of subtensions associated with each interval found in the scale.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/sw.html b/sonic-weave/functions/sw.html index 8a04ea2..af520c2 100644 --- a/sonic-weave/functions/sw.html +++ b/sonic-weave/functions/sw.html @@ -1,6 +1,6 @@ sw | sonic-weave

    Function sw

    • Tag for evaluating templates literals as SonicWeave expressions. Evaluates escapes before interpreting the program so e.g. a double backslash means only a single backslash within the program.

      Example:

      -
      const interval = sw`7\\12` as Interval;
      console.log(interval.totalCents()); // 700 +
      const interval = sw`7\\12` as Interval;
      console.log(interval.totalCents()); // 700
      -

      Parameters

      • strings: TemplateStringsArray
      • Rest ...args: any[]

      Returns SonicWeaveValue

    Generated using TypeDoc

    \ No newline at end of file +

    Parameters

    • strings: TemplateStringsArray
    • Rest ...args: any[]

    Returns SonicWeaveValue

    \ No newline at end of file diff --git a/sonic-weave/functions/sw_.html b/sonic-weave/functions/sw_.html index ecc5abd..d18c5cc 100644 --- a/sonic-weave/functions/sw_.html +++ b/sonic-weave/functions/sw_.html @@ -1,6 +1,6 @@ sw$ | sonic-weave

    Function sw$

    • Tag for evaluating templates literals as SonicWeave scales. Evaluates escapes before interpreting the program so e.g. a double backslash means only a single backslash within the program.

      Example:

      -
      const pentatonic = sw$`rank2(7\\12, 4)`;
      console.log(pentatonic.map(interval => interval.totalCents())); // [200, 400, 700, 900, 1200] +
      const pentatonic = sw$`rank2(7\\12, 4)`;
      console.log(pentatonic.map(interval => interval.totalCents())); // [200, 400, 700, 900, 1200]
      -

      Parameters

      • strings: TemplateStringsArray
      • Rest ...args: any[]

      Returns Interval[]

    Generated using TypeDoc

    \ No newline at end of file +

    Parameters

    • strings: TemplateStringsArray
    • Rest ...args: any[]

    Returns Interval[]

    \ No newline at end of file diff --git a/sonic-weave/functions/sw_r.html b/sonic-weave/functions/sw_r.html index b74990a..da4a1cb 100644 --- a/sonic-weave/functions/sw_r.html +++ b/sonic-weave/functions/sw_r.html @@ -1,6 +1,6 @@ sw$r | sonic-weave

    Function sw$r

    • Tag for evaluating templates literals as SonicWeave scales. Has raw (unescaped) semantics.

      Example:

      -
      const pentatonic = sw$r`rank2(7\12, 4)`;
      console.log(pentatonic.map(interval => interval.totalCents())); // [200, 400, 700, 900, 1200] +
      const pentatonic = sw$r`rank2(7\12, 4)`;
      console.log(pentatonic.map(interval => interval.totalCents())); // [200, 400, 700, 900, 1200]
      -

      Parameters

      • strings: TemplateStringsArray
      • Rest ...args: any[]

      Returns Interval[]

    Generated using TypeDoc

    \ No newline at end of file +

    Parameters

    • strings: TemplateStringsArray
    • Rest ...args: any[]

    Returns Interval[]

    \ No newline at end of file diff --git a/sonic-weave/functions/swr.html b/sonic-weave/functions/swr.html index ac08d7f..91e085f 100644 --- a/sonic-weave/functions/swr.html +++ b/sonic-weave/functions/swr.html @@ -1,6 +1,6 @@ swr | sonic-weave

    Function swr

    • Tag for evaluating templates literals as SonicWeave expressions. Has raw (unescaped) semantics.

      Example:

      -
      const interval = swr`7\12` as Interval;
      console.log(interval.totalCents()); // 700 +
      const interval = swr`7\12` as Interval;
      console.log(interval.totalCents()); // 700
      -

      Parameters

      • strings: TemplateStringsArray
      • Rest ...args: any[]

      Returns SonicWeaveValue

    Generated using TypeDoc

    \ No newline at end of file +

    Parameters

    • strings: TemplateStringsArray
    • Rest ...args: any[]

    Returns SonicWeaveValue

    \ No newline at end of file diff --git a/sonic-weave/functions/temper.html b/sonic-weave/functions/temper.html index d8d87af..df62e37 100644 --- a/sonic-weave/functions/temper.html +++ b/sonic-weave/functions/temper.html @@ -3,4 +3,4 @@
  • val: Val

    Val to map by.

  • interval: Interval | Interval[]

    Interval to map to equal steps.

  • Returns typeof interval

    The interval tempered to equal steps of the val's equave.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/temperamentFromCommas.html b/sonic-weave/functions/temperamentFromCommas.html new file mode 100644 index 0000000..95ae0ed --- /dev/null +++ b/sonic-weave/functions/temperamentFromCommas.html @@ -0,0 +1,7 @@ +temperamentFromCommas | sonic-weave

    Function temperamentFromCommas

    • Obtain a temperament from a comma list based on user input.

      +

      Parameters

      • commaInput: string

        User-provided comma list.

        +
      • subgroupInput: string

        Optional user-provided subgroup basis.

        +
      • optimizationScheme: OptimizationScheme

        Optimization scheme to use.

        +
      • Optional subgroupWeights: number[]

        Additional importance weights to apply on top of Tenney weights.

        +

      Returns Temperament

      A Temperament instance tempering out the given commas.

      +
    \ No newline at end of file diff --git a/sonic-weave/functions/temperamentFromVals.html b/sonic-weave/functions/temperamentFromVals.html new file mode 100644 index 0000000..85eddd3 --- /dev/null +++ b/sonic-weave/functions/temperamentFromVals.html @@ -0,0 +1,8 @@ +temperamentFromVals | sonic-weave

    Function temperamentFromVals

    • Obtain a temperament from a list of vals based on user input. +Some effort is made to ensure the resulting temperament has rank equal to the number of vals provided.

      +

      Parameters

      • valsInput: string

        User-provided list of vals.

        +
      • subgroupInput: string

        Optional user-provided subgroup basis.

        +
      • optimizationScheme: OptimizationScheme

        Optimization scheme to use.

        +
      • Optional subgroupWeights: number[]

        Additional importance weights to apply on top of Tenney weights.

        +

      Returns Temperament

      A Temperament instance representing the temperament supported by all vals provided.

      +
    \ No newline at end of file diff --git a/sonic-weave/functions/tenneyHeight.html b/sonic-weave/functions/tenneyHeight.html index 07ab061..68ad7bc 100644 --- a/sonic-weave/functions/tenneyHeight.html +++ b/sonic-weave/functions/tenneyHeight.html @@ -2,4 +2,4 @@

    Parameters

    Returns Interval

    Relative linear interval representing the Tenney height.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/ternaryBroadcast.html b/sonic-weave/functions/ternaryBroadcast.html new file mode 100644 index 0000000..19693a4 --- /dev/null +++ b/sonic-weave/functions/ternaryBroadcast.html @@ -0,0 +1 @@ +ternaryBroadcast | sonic-weave
    \ No newline at end of file diff --git a/sonic-weave/functions/toScalaScl.html b/sonic-weave/functions/toScalaScl.html index 48766aa..8ceca6d 100644 --- a/sonic-weave/functions/toScalaScl.html +++ b/sonic-weave/functions/toScalaScl.html @@ -1,4 +1,4 @@ toScalaScl | sonic-weave

    Function toScalaScl

    • Convert a program in the SonicWeave DSL to the Scala .scl format.

      Parameters

      • source: string

        Source code for a SonicWeave program.

      Returns string

      A string convorming to the Scala format.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/toSonicWeaveInterchange.html b/sonic-weave/functions/toSonicWeaveInterchange.html index b72377f..8702e83 100644 --- a/sonic-weave/functions/toSonicWeaveInterchange.html +++ b/sonic-weave/functions/toSonicWeaveInterchange.html @@ -1 +1 @@ -toSonicWeaveInterchange | sonic-weave

    Function toSonicWeaveInterchange

    • Parameters

      • source: string

      Returns string

    Generated using TypeDoc

    \ No newline at end of file +toSonicWeaveInterchange | sonic-weave

    Function toSonicWeaveInterchange

    • Parameters

      • source: string

      Returns string

    \ No newline at end of file diff --git a/sonic-weave/functions/track.html b/sonic-weave/functions/track.html index 6536ed6..df82058 100644 --- a/sonic-weave/functions/track.html +++ b/sonic-weave/functions/track.html @@ -2,4 +2,4 @@

    Parameters

    Returns Interval

    A copy of the interval that can be tracked e.g. for changes in scale order.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/unaryBroadcast.html b/sonic-weave/functions/unaryBroadcast.html index 17c179b..af1fb15 100644 --- a/sonic-weave/functions/unaryBroadcast.html +++ b/sonic-weave/functions/unaryBroadcast.html @@ -3,4 +3,4 @@
  • container: SonicWeaveValue

    Array or record.

  • fn: ((x) => SonicWeaveValue)

    Unary function for evaluating subvalues.

  • Returns Record<string, SonicWeavePrimitive> | SonicWeavePrimitive[]

    The function mapped over the values of the container.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/upcastBool.html b/sonic-weave/functions/upcastBool.html index b75c9f2..5f9bb9a 100644 --- a/sonic-weave/functions/upcastBool.html +++ b/sonic-weave/functions/upcastBool.html @@ -1,4 +1,4 @@ upcastBool | sonic-weave

    Function upcastBool

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/vanishCommas.html b/sonic-weave/functions/vanishCommas.html new file mode 100644 index 0000000..797159f --- /dev/null +++ b/sonic-weave/functions/vanishCommas.html @@ -0,0 +1,5 @@ +vanishCommas | sonic-weave

    Function vanishCommas

    • Obtain the tuning map that minimizes the distance to the JIP while also mapping the commas listed to the zero monzo.

      +

      Parameters

      • jip: TuningMap

        Just Intonation Point in co-weighted coordinates.

        +
      • commas: Monzo[]

        Commas to vanish in weighted coordinates.

        +

      Returns TuningMap

      The optimal tuning map in co-weighted coordinates.

      +
    \ No newline at end of file diff --git a/sonic-weave/functions/wilsonHeight.html b/sonic-weave/functions/wilsonHeight.html index e512b9c..03e3776 100644 --- a/sonic-weave/functions/wilsonHeight.html +++ b/sonic-weave/functions/wilsonHeight.html @@ -2,4 +2,4 @@

    Parameters

    Returns Interval

    Relative linear interval representing the Wilson height.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/wordArity.html b/sonic-weave/functions/wordArity.html index 9851acf..0554971 100644 --- a/sonic-weave/functions/wordArity.html +++ b/sonic-weave/functions/wordArity.html @@ -1,4 +1,4 @@ wordArity | sonic-weave

    Function wordArity

    • Return the number of distinct letters in a word.

      Parameters

      • word: string

        A word usually representing a scale where each character represents a step.

      Returns number

      The number of distinct steps in the scale.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/functions/zeroVector.html b/sonic-weave/functions/zeroVector.html index e2176a5..8c94fb8 100644 --- a/sonic-weave/functions/zeroVector.html +++ b/sonic-weave/functions/zeroVector.html @@ -1,3 +1,3 @@ zeroVector | sonic-weave

    Function zeroVector

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/index.html b/sonic-weave/index.html index 9717b3d..e10058d 100644 --- a/sonic-weave/index.html +++ b/sonic-weave/index.html @@ -17,16 +17,16 @@

    You may also be interested in the technical overview of SonicWeave as a programming language.

    Appendix: tempering, commas

    Highlights

    Harmonic segment from the 8th harmonic to the 16th (repeating at the octave).

    -
    8::16
    +
    8::16
     

    10-tone equal temperament

    -
    tet(10)
    +
    tet(10)
     

    The major scale in Pythagorean tuning i.e. 3-limit just intonation.

    -
    sorted(3^[-1..5] rdc 2)
    +
    sorted(3^[-1..5] rdc 2)
     

    Scale title, colors and labels.

    -
    "Japanese pentatonic koto scale, theoretical. Helmholz/Ellis p.519, nr.110"

    9/8 white "Major 2nd"
    6/5 green "Minor 3rd"
    3/2 white "Perfect 5th"
    8/5 green "Minor 6th"
    2 gray "Root (Octave)" +
    "Japanese pentatonic koto scale, theoretical. Helmholz/Ellis p.519, nr.110"

    9/8 white "Major 2nd"
    6/5 green "Minor 3rd"
    3/2 white "Perfect 5th"
    8/5 green "Minor 6th"
    2 gray "Root (Octave)"

    Additional resources

    • Xenharmonic Wiki
    • @@ -45,6 +45,7 @@
    • Python - Guido van Rossum et. al.
    • Haskell - Lennart Augustsson et. al.
    • Zig - Andrew Kelley et. al.
    • +
    • OCaml - Xavier Leroy et. al.
    • NumPy - Travis Oliphant et. al.
    • Scala - Manuel Op de Coul
    • Scale Workshop 1 - Sean Archibald et. al.
    • @@ -60,4 +61,4 @@
    • Xenharmonic Wiki - (community project)
    • Xenharmonic Alliance - (community Discord / Facebook)
    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/interfaces/ExportFunctionStatement.html b/sonic-weave/interfaces/ExportFunctionStatement.html index 3733f5a..10aca10 100644 --- a/sonic-weave/interfaces/ExportFunctionStatement.html +++ b/sonic-weave/interfaces/ExportFunctionStatement.html @@ -1,6 +1,6 @@ -ExportFunctionStatement | sonic-weave

    Interface ExportFunctionStatement

    interface ExportFunctionStatement {
        body: Statement[];
        name: Identifier;
        parameters: Parameters_;
        text: string;
        type: "ExportFunctionStatement";
    }

    Hierarchy

    Properties

    body +ExportFunctionStatement | sonic-weave

    Interface ExportFunctionStatement

    interface ExportFunctionStatement {
        body: Statement[];
        name: Identifier;
        parameters: Parameters_;
        text: string;
        type: "ExportFunctionStatement";
    }

    Hierarchy

    Properties

    body: Statement[]
    parameters: Parameters_
    text: string
    type: "ExportFunctionStatement"

    Generated using TypeDoc

    \ No newline at end of file +

    Properties

    body: Statement[]
    parameters: Parameters_
    text: string
    type: "ExportFunctionStatement"
    \ No newline at end of file diff --git a/sonic-weave/interfaces/SonicWeaveFunction.html b/sonic-weave/interfaces/SonicWeaveFunction.html index bb01279..f5a5cd9 100644 --- a/sonic-weave/interfaces/SonicWeaveFunction.html +++ b/sonic-weave/interfaces/SonicWeaveFunction.html @@ -1,5 +1,5 @@ SonicWeaveFunction | sonic-weave

    Interface SonicWeaveFunction

    Function that can be called inside the SonicWeave runtime.

    -
    interface SonicWeaveFunction {
        __doc__: undefined | string;
        __node__: FunctionDeclaration | ExportFunctionStatement | ArrowFunction;
        arguments: any;
        caller: Function;
        length: number;
        name: string;
        prototype: any;
        [hasInstance](value): boolean;
        apply(this, thisArg, argArray?): any;
        bind(this, thisArg, ...argArray): any;
        call(this, thisArg, ...argArray): any;
        toString(): string;
    }

    Hierarchy

    • Function
      • SonicWeaveFunction

    Properties

    interface SonicWeaveFunction {
        __doc__: undefined | string;
        __node__: FunctionDeclaration | ExportFunctionStatement | ArrowFunction;
        arguments: any;
        caller: Function;
        length: number;
        name: string;
        prototype: any;
        [hasInstance](value): boolean;
        apply(this, thisArg, argArray?): any;
        bind(this, thisArg, ...argArray): any;
        call(this, thisArg, ...argArray): any;
        toString(): string;
    }

    Hierarchy

    • Function
      • SonicWeaveFunction

    Properties

    Properties

    __doc__: undefined | string
    arguments: any
    caller: Function
    length: number
    name: string

    Returns the name of the function. Function names are read-only and can not be changed.

    +

    Properties

    __doc__: undefined | string
    arguments: any
    caller: Function
    length: number
    name: string

    Returns the name of the function. Function names are read-only and can not be changed.

    prototype: any

    Methods

    • Determines whether the given value inherits from this function if this function was used as a constructor function.

      A constructor function can control which objects are recognized as its instances by @@ -27,4 +27,4 @@

      Parameters

      • this: Function
      • thisArg: any

        The object to be used as the current object.

      • Rest ...argArray: any[]

        A list of arguments to be passed to the method.

      Returns any

    • Returns a string representation of a function.

      -

      Returns string

    Generated using TypeDoc

    \ No newline at end of file +

    Returns string

    \ No newline at end of file diff --git a/sonic-weave/modules.html b/sonic-weave/modules.html index cc773d6..6e594aa 100644 --- a/sonic-weave/modules.html +++ b/sonic-weave/modules.html @@ -4,9 +4,11 @@ Interval RootContext StatementVisitor +Temperament TimeMonzo TimeReal Val +ValBasis

    Interfaces

    Type Aliases

    AbsoluteFJS @@ -29,12 +31,14 @@ BinaryExpression BinaryOperator BinaryPrefix +BlockExpression BlockStatement BreakStatement CallExpression CatchClause CentLiteral CentsLiteral +CoIntervalLiteral ColorLiteral Comprehension ConditionalExpression @@ -43,6 +47,7 @@ DecimalLiteral DeferStatement Degree +DeleteStatement Domain DownExpression EmptyStatement @@ -57,8 +62,8 @@ FJSFlavor FJSInflection FalseLiteral +FormalPrimeMetric FractionLiteral -FractionalMonzo FunctionDeclaration HardnessDeclaration HarmonicSegment @@ -87,7 +92,6 @@ MosDeclaration MosDegree MosExpression -MosNominal MosStep MosStepLiteral NedjiLiteral @@ -95,21 +99,25 @@ NoneLiteral NotANumberLiteral NumericFlavor +OptimizationScheme Parameter Parameters_ PatentTweak PatternUpDownPeriod PitchDeclaration +PopScale Program Pythagorean RadicalLiteral Range +RangeRelation RationalEquave ReciprocalCentLiteral ReciprocalLogarithmicHertzLiteral RecordLiteral ReturnStatement SecondLiteral +SetLiteral Sign SmallDeclaration SonicWeaveModule @@ -128,6 +136,7 @@ ThrowStatement TrueLiteral TryStatement +TuningMap UnaryExpression UnaryOperator UpDeclaration @@ -135,6 +144,7 @@ UpdateExpression UpdateOperator ValBasisElement +ValBasisLiteral ValLiteral VariableDeclaration VectorComponent @@ -152,6 +162,7 @@ bleach builtinNode centsColor +combineTuningMaps compare createTag evaluateExpression @@ -168,26 +179,30 @@ hasOwn infect inferFJSFlavor +intCombineTuningMaps integerToVectorComponent +intervalLiteralFromJSON intervalValueAs isArrayOrRecord letters linear linearOne -literalFromJSON literalToJSON literalToString log logarithmic +lstr metricExponent mosMonzo neg norm numberToDecimalLiteral parseAST +parseBasis parseChord parseScaleWorkshop2Line parseVals +rank2FromCommas relative repr requireParameters @@ -198,7 +213,7 @@ setUnion simplify sonicTruth -sort +sortInPlace stepSignature stepString stepVectorArity @@ -211,13 +226,17 @@ sw$r swr temper +temperamentFromCommas +temperamentFromVals tenneyHeight +ternaryBroadcast toScalaScl toSonicWeaveInterchange track unaryBroadcast upcastBool +vanishCommas wilsonHeight wordArity zeroVector -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/AbsoluteFJS.html b/sonic-weave/types/AbsoluteFJS.html index 41d369f..f25eaae 100644 --- a/sonic-weave/types/AbsoluteFJS.html +++ b/sonic-weave/types/AbsoluteFJS.html @@ -1 +1 @@ -AbsoluteFJS | sonic-weave

    Type alias AbsoluteFJS

    AbsoluteFJS: {
        lifts: number;
        pitch: AbsolutePitch | AbsoluteMosPitch;
        subscripts: FJSInflection[];
        superscripts: FJSInflection[];
        type: "AbsoluteFJS";
        ups: number;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +AbsoluteFJS | sonic-weave

    Type alias AbsoluteFJS

    AbsoluteFJS: {
        lifts: number;
        pitch: AbsolutePitch | AbsoluteMosPitch;
        subscripts: FJSInflection[];
        superscripts: FJSInflection[];
        type: "AbsoluteFJS";
        ups: number;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/AbsoluteMosPitch.html b/sonic-weave/types/AbsoluteMosPitch.html index 3b1e0db..0a0c8a1 100644 --- a/sonic-weave/types/AbsoluteMosPitch.html +++ b/sonic-weave/types/AbsoluteMosPitch.html @@ -1,2 +1,2 @@ -AbsoluteMosPitch | sonic-weave

    Type alias AbsoluteMosPitch

    AbsoluteMosPitch: {
        accidentals: SplitMosAccidental[];
        nominal: MosNominal;
        octave: number;
        type: "AbsolutePitch";
    }

    Absolute Diamond-mos pitch.

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +AbsoluteMosPitch | sonic-weave

    Type alias AbsoluteMosPitch

    AbsoluteMosPitch: {
        accidentals: SplitMosAccidental[];
        nominal: string;
        octave: number;
        type: "AbsolutePitch";
    }

    Absolute Diamond-mos pitch.

    +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/AbsolutePitch.html b/sonic-weave/types/AbsolutePitch.html index a5a43ce..531b4a2 100644 --- a/sonic-weave/types/AbsolutePitch.html +++ b/sonic-weave/types/AbsolutePitch.html @@ -1,2 +1,2 @@ AbsolutePitch | sonic-weave

    Type alias AbsolutePitch

    AbsolutePitch: {
        accidentals: SplitAccidental[];
        nominal: Nominal;
        octave: number;
        type: "AbsolutePitch";
    }

    Absolute Pythagorean pitch.

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/AbstractStepPattern.html b/sonic-weave/types/AbstractStepPattern.html index 3eb5ce3..a0cd2d7 100644 --- a/sonic-weave/types/AbstractStepPattern.html +++ b/sonic-weave/types/AbstractStepPattern.html @@ -1 +1 @@ -AbstractStepPattern | sonic-weave

    Type alias AbstractStepPattern

    AbstractStepPattern: {
        equave: RationalEquave | null;
        pattern: ("L" | "s")[];
        type: "AbstractStepPattern";
    }

    Type declaration

    • equave: RationalEquave | null
    • pattern: ("L" | "s")[]
    • type: "AbstractStepPattern"

    Generated using TypeDoc

    \ No newline at end of file +AbstractStepPattern | sonic-weave

    Type alias AbstractStepPattern

    AbstractStepPattern: {
        equave: RationalEquave | null;
        pattern: ("L" | "s")[];
        type: "AbstractStepPattern";
    }

    Type declaration

    • equave: RationalEquave | null
    • pattern: ("L" | "s")[]
    • type: "AbstractStepPattern"
    \ No newline at end of file diff --git a/sonic-weave/types/AccessExpression.html b/sonic-weave/types/AccessExpression.html index 1d970e2..97d34c8 100644 --- a/sonic-weave/types/AccessExpression.html +++ b/sonic-weave/types/AccessExpression.html @@ -1 +1 @@ -AccessExpression | sonic-weave

    Type alias AccessExpression

    AccessExpression: {
        key: Expression;
        nullish: boolean;
        object: Expression;
        type: "AccessExpression";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +AccessExpression | sonic-weave

    Type alias AccessExpression

    AccessExpression: {
        key: Expression;
        nullish: boolean;
        object: Expression;
        type: "AccessExpression";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/Accidental.html b/sonic-weave/types/Accidental.html index ee7a38a..9807082 100644 --- a/sonic-weave/types/Accidental.html +++ b/sonic-weave/types/Accidental.html @@ -1,2 +1,2 @@ Accidental | sonic-weave

    Type alias Accidental

    Accidental: "𝄪" | "𝄫" | "𝄲" | "𝄳" | "x" | "♯" | "#" | "‡" | "t" | "♮" | "_" | "d" | "♭" | "b"

    Musical accidental representing some powers of primes 2 and 3, possibly fractional.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/Argument.html b/sonic-weave/types/Argument.html index 8f8a226..824e402 100644 --- a/sonic-weave/types/Argument.html +++ b/sonic-weave/types/Argument.html @@ -1 +1 @@ -Argument | sonic-weave

    Type alias Argument

    Argument: {
        expression: Expression;
        spread: boolean;
        type: "Argument";
    }

    Type declaration

    • expression: Expression
    • spread: boolean
    • type: "Argument"

    Generated using TypeDoc

    \ No newline at end of file +Argument | sonic-weave

    Type alias Argument

    Argument: {
        expression: Expression;
        spread: boolean;
        type: "Argument";
    }

    Type declaration

    • expression: Expression
    • spread: boolean
    • type: "Argument"
    \ No newline at end of file diff --git a/sonic-weave/types/ArrayComprehension.html b/sonic-weave/types/ArrayComprehension.html index fd1e923..267ead9 100644 --- a/sonic-weave/types/ArrayComprehension.html +++ b/sonic-weave/types/ArrayComprehension.html @@ -1 +1 @@ -ArrayComprehension | sonic-weave

    Type alias ArrayComprehension

    ArrayComprehension: {
        comprehensions: Comprehension[];
        expression: Expression;
        test: Expression | null;
        type: "ArrayComprehension";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +ArrayComprehension | sonic-weave

    Type alias ArrayComprehension

    ArrayComprehension: {
        comprehensions: Comprehension[];
        expression: Expression;
        test: Expression | null;
        type: "ArrayComprehension";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/ArrayLiteral.html b/sonic-weave/types/ArrayLiteral.html index f375e9e..39bba37 100644 --- a/sonic-weave/types/ArrayLiteral.html +++ b/sonic-weave/types/ArrayLiteral.html @@ -1 +1 @@ -ArrayLiteral | sonic-weave

    Type alias ArrayLiteral

    ArrayLiteral: {
        elements: Argument[];
        type: "ArrayLiteral";
    }

    Type declaration

    • elements: Argument[]
    • type: "ArrayLiteral"

    Generated using TypeDoc

    \ No newline at end of file +ArrayLiteral | sonic-weave

    Type alias ArrayLiteral

    ArrayLiteral: {
        elements: Argument[];
        type: "ArrayLiteral";
    }

    Type declaration

    • elements: Argument[]
    • type: "ArrayLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/ArraySlice.html b/sonic-weave/types/ArraySlice.html index d7a6696..176b113 100644 --- a/sonic-weave/types/ArraySlice.html +++ b/sonic-weave/types/ArraySlice.html @@ -1 +1 @@ -ArraySlice | sonic-weave

    Type alias ArraySlice

    ArraySlice: {
        end: Expression | null;
        object: Expression;
        penultimate: boolean;
        second: Expression | null;
        start: Expression | null;
        type: "ArraySlice";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +ArraySlice | sonic-weave

    Type alias ArraySlice

    ArraySlice: {
        end: Expression | null;
        object: Expression;
        penultimate: boolean;
        second: Expression | null;
        start: Expression | null;
        type: "ArraySlice";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/ArrowFunction.html b/sonic-weave/types/ArrowFunction.html index 4421b5e..88988fc 100644 --- a/sonic-weave/types/ArrowFunction.html +++ b/sonic-weave/types/ArrowFunction.html @@ -1 +1 @@ -ArrowFunction | sonic-weave

    Type alias ArrowFunction

    ArrowFunction: {
        expression: Expression;
        parameters: Parameters_;
        text: string;
        type: "ArrowFunction";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +ArrowFunction | sonic-weave

    Type alias ArrowFunction

    ArrowFunction: {
        expression: Expression;
        parameters: Parameters_;
        text: string;
        type: "ArrowFunction";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/AspiringAbsoluteFJS.html b/sonic-weave/types/AspiringAbsoluteFJS.html index 6bd25d3..c3749a4 100644 --- a/sonic-weave/types/AspiringAbsoluteFJS.html +++ b/sonic-weave/types/AspiringAbsoluteFJS.html @@ -1,3 +1,3 @@ AspiringAbsoluteFJS | sonic-weave

    Type alias AspiringAbsoluteFJS

    AspiringAbsoluteFJS: {
        flavor: FJSFlavor;
        type: "AspiringAbsoluteFJS";
    }

    Placeholder AST node for AbsoluteFJS of unknown formatting. The result of FJS addition or a context shift caused by up or lift declaration.

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/AspiringFJS.html b/sonic-weave/types/AspiringFJS.html index 9958690..93b48e6 100644 --- a/sonic-weave/types/AspiringFJS.html +++ b/sonic-weave/types/AspiringFJS.html @@ -1,3 +1,3 @@ AspiringFJS | sonic-weave

    Type alias AspiringFJS

    AspiringFJS: {
        flavor: FJSFlavor;
        type: "AspiringFJS";
    }

    Placeholder AST node for FJS of unknown formatting. The result of FJS addition or a context shift caused by up or lift declaration.

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/AssignmentStatement.html b/sonic-weave/types/AssignmentStatement.html index 27a2efe..c3e5c4e 100644 --- a/sonic-weave/types/AssignmentStatement.html +++ b/sonic-weave/types/AssignmentStatement.html @@ -1 +1 @@ -AssignmentStatement | sonic-weave

    Type alias AssignmentStatement

    AssignmentStatement: {
        name: Identifier | Identifiers | AccessExpression | ArraySlice;
        type: "AssignmentStatement";
        value: Expression;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +AssignmentStatement | sonic-weave

    Type alias AssignmentStatement

    AssignmentStatement: {
        name: Identifier | Identifiers | AccessExpression | ArraySlice;
        type: "AssignmentStatement";
        value: Expression;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/AugmentedQuality.html b/sonic-weave/types/AugmentedQuality.html index 943ec50..444a6ca 100644 --- a/sonic-weave/types/AugmentedQuality.html +++ b/sonic-weave/types/AugmentedQuality.html @@ -1,2 +1,2 @@ AugmentedQuality | sonic-weave

    Type alias AugmentedQuality

    AugmentedQuality: "d" | "dim" | "a" | "Â" | "aug" | "Aug"

    Augmented interval quality or extra apotomes added or subtracted from the relative interval.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/BasisElement.html b/sonic-weave/types/BasisElement.html index e0a4630..fc8be0d 100644 --- a/sonic-weave/types/BasisElement.html +++ b/sonic-weave/types/BasisElement.html @@ -1 +1 @@ -BasisElement | sonic-weave

    Type alias BasisElement

    BasisElement: ValBasisElement | "rc" | "r¢" | "inf" | "1°"

    Generated using TypeDoc

    \ No newline at end of file +BasisElement | sonic-weave

    Type alias BasisElement

    BasisElement: ValBasisElement | "rc" | "r¢" | "inf" | "1°" | "deg"
    \ No newline at end of file diff --git a/sonic-weave/types/BasisFraction.html b/sonic-weave/types/BasisFraction.html index 4d1835e..34c5bb5 100644 --- a/sonic-weave/types/BasisFraction.html +++ b/sonic-weave/types/BasisFraction.html @@ -1 +1 @@ -BasisFraction | sonic-weave

    Type alias BasisFraction

    BasisFraction: {
        denominator: number | null;
        numerator: number;
        radical: boolean;
    }

    Type declaration

    • denominator: number | null
    • numerator: number
    • radical: boolean

    Generated using TypeDoc

    \ No newline at end of file +BasisFraction | sonic-weave

    Type alias BasisFraction

    BasisFraction: {
        denominator: number | null;
        numerator: number;
        radical: boolean;
    }

    Type declaration

    • denominator: number | null
    • numerator: number
    • radical: boolean
    \ No newline at end of file diff --git a/sonic-weave/types/BinaryExpression.html b/sonic-weave/types/BinaryExpression.html index 16b2b51..c7eeb03 100644 --- a/sonic-weave/types/BinaryExpression.html +++ b/sonic-weave/types/BinaryExpression.html @@ -1 +1 @@ -BinaryExpression | sonic-weave

    Type alias BinaryExpression

    BinaryExpression: {
        left: Expression;
        operator: BinaryOperator;
        preferLeft: boolean;
        preferRight: boolean;
        right: Expression;
        type: "BinaryExpression";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +BinaryExpression | sonic-weave

    Type alias BinaryExpression

    BinaryExpression: {
        left: Expression;
        operator: BinaryOperator;
        preferLeft: boolean;
        preferRight: boolean;
        right: Expression;
        type: "BinaryExpression";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/BinaryOperator.html b/sonic-weave/types/BinaryOperator.html index 67e4c65..19b1bc3 100644 --- a/sonic-weave/types/BinaryOperator.html +++ b/sonic-weave/types/BinaryOperator.html @@ -1 +1 @@ -BinaryOperator | sonic-weave

    Type alias BinaryOperator

    BinaryOperator: "lest" | "al" | "or" | "vor" | "and" | "vand" | "==" | "<>" | "~=" | "<=" | ">=" | "<" | ">" | "of" | "not of" | "~of" | "not ~of" | "in" | "not in" | "~in" | "not ~in" | "+" | "-" | "max" | "min" | "to" | "by" | "/+" | "⊕" | "/-" | "⊖" | " " | "*" | "×" | "%" | "÷" | "\\" | "sof" | "mod" | "modc" | "rd" | "rdc" | "ed" | "/_" | "·" | "dot" | "vdot" | "mdot" | "⊗" | "tns" | "tmpr" | "^" | "/^" | "^/" | "/"

    Generated using TypeDoc

    \ No newline at end of file +BinaryOperator | sonic-weave

    Type alias BinaryOperator

    BinaryOperator: "lest" | "al" | "al~" | "or" | "vor" | "and" | "vand" | "==" | "<>" | "~=" | "<=" | ">=" | "<" | ">" | "of" | "not of" | "~of" | "not ~of" | "in" | "not in" | "~in" | "not ~in" | "+" | "-" | "max" | "min" | "to" | "by" | "/+" | "⊕" | "/-" | "⊖" | " " | "*" | "×" | "%" | "÷" | "\\" | "sof" | "mod" | "modc" | "rd" | "rdc" | "ed" | "/_" | "·" | "dot" | "vdot" | "mdot" | "⊗" | "tns" | "tmpr" | "^" | "/^" | "^/" | "/"
    \ No newline at end of file diff --git a/sonic-weave/types/BinaryPrefix.html b/sonic-weave/types/BinaryPrefix.html index 031cb5a..5ecb167 100644 --- a/sonic-weave/types/BinaryPrefix.html +++ b/sonic-weave/types/BinaryPrefix.html @@ -1,3 +1,3 @@ BinaryPrefix | sonic-weave

    Type alias BinaryPrefix

    BinaryPrefix: "Ki" | "Mi" | "Gi" | "Ti" | "Pi" | "Ei" | "Zi" | "Yi" | "Ri" | "Qi"

    One of the binary prefixes listed here: https://en.wikipedia.org/wiki/Binary_prefix Goes from kibi = 1024 to quebi = 1024^10.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/BlockExpression.html b/sonic-weave/types/BlockExpression.html new file mode 100644 index 0000000..38fcfb1 --- /dev/null +++ b/sonic-weave/types/BlockExpression.html @@ -0,0 +1 @@ +BlockExpression | sonic-weave

    Type alias BlockExpression

    BlockExpression: {
        body: Statement[];
        type: "BlockExpression";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/BlockStatement.html b/sonic-weave/types/BlockStatement.html index 9715da6..ee308f4 100644 --- a/sonic-weave/types/BlockStatement.html +++ b/sonic-weave/types/BlockStatement.html @@ -1 +1 @@ -BlockStatement | sonic-weave

    Type alias BlockStatement

    BlockStatement: {
        body: Statement[];
        type: "BlockStatement";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +BlockStatement | sonic-weave

    Type alias BlockStatement

    BlockStatement: {
        body: Statement[];
        type: "BlockStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/BreakStatement.html b/sonic-weave/types/BreakStatement.html index e7ec2fe..e2452f1 100644 --- a/sonic-weave/types/BreakStatement.html +++ b/sonic-weave/types/BreakStatement.html @@ -1 +1 @@ -BreakStatement | sonic-weave

    Type alias BreakStatement

    BreakStatement: {
        type: "BreakStatement";
    }

    Type declaration

    • type: "BreakStatement"

    Generated using TypeDoc

    \ No newline at end of file +BreakStatement | sonic-weave

    Type alias BreakStatement

    BreakStatement: {
        type: "BreakStatement";
    }

    Type declaration

    • type: "BreakStatement"
    \ No newline at end of file diff --git a/sonic-weave/types/CallExpression.html b/sonic-weave/types/CallExpression.html index 642b1fd..3b15d49 100644 --- a/sonic-weave/types/CallExpression.html +++ b/sonic-weave/types/CallExpression.html @@ -1 +1 @@ -CallExpression | sonic-weave

    Type alias CallExpression

    CallExpression: {
        args: Argument[];
        callee: Expression;
        type: "CallExpression";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +CallExpression | sonic-weave

    Type alias CallExpression

    CallExpression: {
        args: Argument[];
        callee: Expression;
        type: "CallExpression";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/CatchClause.html b/sonic-weave/types/CatchClause.html index 7edbe38..6319220 100644 --- a/sonic-weave/types/CatchClause.html +++ b/sonic-weave/types/CatchClause.html @@ -1 +1 @@ -CatchClause | sonic-weave

    Type alias CatchClause

    CatchClause: {
        body: Statement;
        parameter?: Parameter;
        type: "CatchClause";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +CatchClause | sonic-weave

    Type alias CatchClause

    CatchClause: {
        body: Statement;
        parameter?: Parameter;
        type: "CatchClause";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/CentLiteral.html b/sonic-weave/types/CentLiteral.html index 119f7ad..c0a5f68 100644 --- a/sonic-weave/types/CentLiteral.html +++ b/sonic-weave/types/CentLiteral.html @@ -1 +1 @@ -CentLiteral | sonic-weave

    Type alias CentLiteral

    CentLiteral: {
        real: boolean;
        type: "CentLiteral";
    }

    Type declaration

    • real: boolean
    • type: "CentLiteral"

    Generated using TypeDoc

    \ No newline at end of file +CentLiteral | sonic-weave

    Type alias CentLiteral

    CentLiteral: {
        real: boolean;
        type: "CentLiteral";
    }

    Type declaration

    • real: boolean
    • type: "CentLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/CentsLiteral.html b/sonic-weave/types/CentsLiteral.html index 7c87060..7727895 100644 --- a/sonic-weave/types/CentsLiteral.html +++ b/sonic-weave/types/CentsLiteral.html @@ -1 +1 @@ -CentsLiteral | sonic-weave

    Type alias CentsLiteral

    CentsLiteral: {
        exponent: number | null;
        fractional: string;
        real: boolean;
        sign: Sign;
        type: "CentsLiteral";
        whole: bigint;
    }

    Type declaration

    • exponent: number | null
    • fractional: string
    • real: boolean
    • sign: Sign
    • type: "CentsLiteral"
    • whole: bigint

    Generated using TypeDoc

    \ No newline at end of file +CentsLiteral | sonic-weave

    Type alias CentsLiteral

    CentsLiteral: {
        exponent: number | null;
        fractional: string;
        real: boolean;
        sign: Sign;
        type: "CentsLiteral";
        whole: bigint;
    }

    Type declaration

    • exponent: number | null
    • fractional: string
    • real: boolean
    • sign: Sign
    • type: "CentsLiteral"
    • whole: bigint
    \ No newline at end of file diff --git a/sonic-weave/types/CoIntervalLiteral.html b/sonic-weave/types/CoIntervalLiteral.html new file mode 100644 index 0000000..8b19de8 --- /dev/null +++ b/sonic-weave/types/CoIntervalLiteral.html @@ -0,0 +1 @@ +CoIntervalLiteral | sonic-weave
    \ No newline at end of file diff --git a/sonic-weave/types/ColorLiteral.html b/sonic-weave/types/ColorLiteral.html index 1c8d19a..53db5d4 100644 --- a/sonic-weave/types/ColorLiteral.html +++ b/sonic-weave/types/ColorLiteral.html @@ -1 +1 @@ -ColorLiteral | sonic-weave

    Type alias ColorLiteral

    ColorLiteral: {
        type: "ColorLiteral";
        value: string;
    }

    Type declaration

    • type: "ColorLiteral"
    • value: string

    Generated using TypeDoc

    \ No newline at end of file +ColorLiteral | sonic-weave

    Type alias ColorLiteral

    ColorLiteral: {
        type: "ColorLiteral";
        value: string;
    }

    Type declaration

    • type: "ColorLiteral"
    • value: string
    \ No newline at end of file diff --git a/sonic-weave/types/Comprehension.html b/sonic-weave/types/Comprehension.html index 061e22b..84bdedf 100644 --- a/sonic-weave/types/Comprehension.html +++ b/sonic-weave/types/Comprehension.html @@ -1 +1 @@ -Comprehension | sonic-weave

    Type alias Comprehension

    Comprehension: {
        container: Expression;
        element: Parameter | Parameters_;
        kind: IterationKind;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +Comprehension | sonic-weave

    Type alias Comprehension

    Comprehension: {
        container: Expression;
        element: Parameter | Parameters_;
        kind: IterationKind;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/ConditionalExpression.html b/sonic-weave/types/ConditionalExpression.html index 82dd40a..5a6de1f 100644 --- a/sonic-weave/types/ConditionalExpression.html +++ b/sonic-weave/types/ConditionalExpression.html @@ -1 +1 @@ -ConditionalExpression | sonic-weave

    Type alias ConditionalExpression

    ConditionalExpression: {
        alternate: Expression;
        consequent: Expression;
        kind: ConditionalKind;
        test: Expression;
        type: "ConditionalExpression";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +ConditionalExpression | sonic-weave

    Type alias ConditionalExpression

    ConditionalExpression: {
        alternate: Expression;
        consequent: Expression;
        kind: ConditionalKind;
        test: Expression;
        type: "ConditionalExpression";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/ConditionalKind.html b/sonic-weave/types/ConditionalKind.html index 8044ac4..30a015c 100644 --- a/sonic-weave/types/ConditionalKind.html +++ b/sonic-weave/types/ConditionalKind.html @@ -1 +1 @@ -ConditionalKind | sonic-weave

    Type alias ConditionalKind

    ConditionalKind: "if" | "where"

    Generated using TypeDoc

    \ No newline at end of file +ConditionalKind | sonic-weave

    Type alias ConditionalKind

    ConditionalKind: "if" | "where"
    \ No newline at end of file diff --git a/sonic-weave/types/ContinueStatement.html b/sonic-weave/types/ContinueStatement.html index a708ba7..88fba03 100644 --- a/sonic-weave/types/ContinueStatement.html +++ b/sonic-weave/types/ContinueStatement.html @@ -1 +1 @@ -ContinueStatement | sonic-weave

    Type alias ContinueStatement

    ContinueStatement: {
        type: "ContinueStatement";
    }

    Type declaration

    • type: "ContinueStatement"

    Generated using TypeDoc

    \ No newline at end of file +ContinueStatement | sonic-weave

    Type alias ContinueStatement

    ContinueStatement: {
        type: "ContinueStatement";
    }

    Type declaration

    • type: "ContinueStatement"
    \ No newline at end of file diff --git a/sonic-weave/types/DecimalLiteral.html b/sonic-weave/types/DecimalLiteral.html index 6c2e132..cae22cb 100644 --- a/sonic-weave/types/DecimalLiteral.html +++ b/sonic-weave/types/DecimalLiteral.html @@ -1 +1 @@ -DecimalLiteral | sonic-weave

    Type alias DecimalLiteral

    DecimalLiteral: {
        exponent: number | null;
        flavor: NumericFlavor;
        fractional: string;
        sign: Sign;
        type: "DecimalLiteral";
        whole: bigint;
    }

    Type declaration

    • exponent: number | null
    • flavor: NumericFlavor
    • fractional: string
    • sign: Sign
    • type: "DecimalLiteral"
    • whole: bigint

    Generated using TypeDoc

    \ No newline at end of file +DecimalLiteral | sonic-weave

    Type alias DecimalLiteral

    DecimalLiteral: {
        exponent: number | null;
        flavor: NumericFlavor;
        fractional: string;
        sign: Sign;
        type: "DecimalLiteral";
        whole: bigint;
    }

    Type declaration

    • exponent: number | null
    • flavor: NumericFlavor
    • fractional: string
    • sign: Sign
    • type: "DecimalLiteral"
    • whole: bigint
    \ No newline at end of file diff --git a/sonic-weave/types/DeferStatement.html b/sonic-weave/types/DeferStatement.html index c2b507a..6cb8057 100644 --- a/sonic-weave/types/DeferStatement.html +++ b/sonic-weave/types/DeferStatement.html @@ -1 +1 @@ -DeferStatement | sonic-weave

    Type alias DeferStatement

    DeferStatement: {
        body: Statement;
        type: "DeferStatement";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +DeferStatement | sonic-weave

    Type alias DeferStatement

    DeferStatement: {
        body: Statement;
        type: "DeferStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/Degree.html b/sonic-weave/types/Degree.html index c767e27..b000fc7 100644 --- a/sonic-weave/types/Degree.html +++ b/sonic-weave/types/Degree.html @@ -3,4 +3,4 @@
  • imperfect: boolean

    Flag to indicate if the degree has minor and major variants.

  • negative: boolean

    A boolean flag indicating if the degree represents an inverted ratio.

  • octaves: number

    Number of octaves added to the base interval class.

    -
  • Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/DeleteStatement.html b/sonic-weave/types/DeleteStatement.html new file mode 100644 index 0000000..772a4f3 --- /dev/null +++ b/sonic-weave/types/DeleteStatement.html @@ -0,0 +1 @@ +DeleteStatement | sonic-weave

    Type alias DeleteStatement

    DeleteStatement: {
        entry: AccessExpression | ArraySlice;
        type: "DeleteStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/Domain.html b/sonic-weave/types/Domain.html index 45c9d2f..1faeb0c 100644 --- a/sonic-weave/types/Domain.html +++ b/sonic-weave/types/Domain.html @@ -1,3 +1,3 @@ Domain | sonic-weave

    Type alias Domain

    Domain: "linear" | "logarithmic" | "cologarithmic"

    Interval domain. The operator '+' means addition in the linear domain. In the logarithmic domain '+' correspond to multiplication of the underlying values instead. Cologarithmic values are meant for mapping between values, usually just intonation and steps of equal temperaments.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/DownExpression.html b/sonic-weave/types/DownExpression.html index 09ee658..10ada87 100644 --- a/sonic-weave/types/DownExpression.html +++ b/sonic-weave/types/DownExpression.html @@ -1 +1 @@ -DownExpression | sonic-weave

    Type alias DownExpression

    DownExpression: {
        count: number;
        operand: Expression;
        type: "DownExpression";
    }

    Type declaration

    • count: number
    • operand: Expression
    • type: "DownExpression"

    Generated using TypeDoc

    \ No newline at end of file +DownExpression | sonic-weave

    Type alias DownExpression

    DownExpression: {
        count: number;
        operand: Expression;
        type: "DownExpression";
    }

    Type declaration

    • count: number
    • operand: Expression
    • type: "DownExpression"
    \ No newline at end of file diff --git a/sonic-weave/types/EmptyStatement.html b/sonic-weave/types/EmptyStatement.html index 06c96cd..a4f2de8 100644 --- a/sonic-weave/types/EmptyStatement.html +++ b/sonic-weave/types/EmptyStatement.html @@ -1 +1 @@ -EmptyStatement | sonic-weave

    Type alias EmptyStatement

    EmptyStatement: {
        type: "EmptyStatement";
    }

    Type declaration

    • type: "EmptyStatement"

    Generated using TypeDoc

    \ No newline at end of file +EmptyStatement | sonic-weave

    Type alias EmptyStatement

    EmptyStatement: {
        type: "EmptyStatement";
    }

    Type declaration

    • type: "EmptyStatement"
    \ No newline at end of file diff --git a/sonic-weave/types/EnumeratedChord.html b/sonic-weave/types/EnumeratedChord.html index 41857ce..18c7904 100644 --- a/sonic-weave/types/EnumeratedChord.html +++ b/sonic-weave/types/EnumeratedChord.html @@ -1 +1 @@ -EnumeratedChord | sonic-weave

    Type alias EnumeratedChord

    EnumeratedChord: {
        enumerals: Expression[];
        mirror: boolean;
        type: "EnumeratedChord";
    }

    Type declaration

    • enumerals: Expression[]
    • mirror: boolean
    • type: "EnumeratedChord"

    Generated using TypeDoc

    \ No newline at end of file +EnumeratedChord | sonic-weave

    Type alias EnumeratedChord

    EnumeratedChord: {
        enumerals: Expression[];
        mirror: boolean;
        type: "EnumeratedChord";
    }

    Type declaration

    • enumerals: Expression[]
    • mirror: boolean
    • type: "EnumeratedChord"
    \ No newline at end of file diff --git a/sonic-weave/types/EqualTemperament.html b/sonic-weave/types/EqualTemperament.html index cfd3190..1ea5872 100644 --- a/sonic-weave/types/EqualTemperament.html +++ b/sonic-weave/types/EqualTemperament.html @@ -1 +1 @@ -EqualTemperament | sonic-weave

    Type alias EqualTemperament

    EqualTemperament: {
        equave: Fraction;
        fractionOfEquave: Fraction;
    }

    Type declaration

    • equave: Fraction
    • fractionOfEquave: Fraction

    Generated using TypeDoc

    \ No newline at end of file +EqualTemperament | sonic-weave

    Type alias EqualTemperament

    EqualTemperament: {
        equave: Fraction;
        fractionOfEquave: Fraction;
    }

    Type declaration

    • equave: Fraction
    • fractionOfEquave: Fraction
    \ No newline at end of file diff --git a/sonic-weave/types/EquaveDeclaration.html b/sonic-weave/types/EquaveDeclaration.html index 595fd75..ca34651 100644 --- a/sonic-weave/types/EquaveDeclaration.html +++ b/sonic-weave/types/EquaveDeclaration.html @@ -1 +1 @@ -EquaveDeclaration | sonic-weave

    Type alias EquaveDeclaration

    EquaveDeclaration: {
        type: "EquaveDeclaration";
        value: Expression;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +EquaveDeclaration | sonic-weave

    Type alias EquaveDeclaration

    EquaveDeclaration: {
        type: "EquaveDeclaration";
        value: Expression;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/ExportAllStatement.html b/sonic-weave/types/ExportAllStatement.html index b15ceb3..a48a7c4 100644 --- a/sonic-weave/types/ExportAllStatement.html +++ b/sonic-weave/types/ExportAllStatement.html @@ -1 +1 @@ -ExportAllStatement | sonic-weave

    Type alias ExportAllStatement

    ExportAllStatement: {
        module: string;
        type: "ExportAllStatement";
    }

    Type declaration

    • module: string
    • type: "ExportAllStatement"

    Generated using TypeDoc

    \ No newline at end of file +ExportAllStatement | sonic-weave

    Type alias ExportAllStatement

    ExportAllStatement: {
        module: string;
        type: "ExportAllStatement";
    }

    Type declaration

    • module: string
    • type: "ExportAllStatement"
    \ No newline at end of file diff --git a/sonic-weave/types/ExportConstantStatement.html b/sonic-weave/types/ExportConstantStatement.html index 9e0b9fa..7807352 100644 --- a/sonic-weave/types/ExportConstantStatement.html +++ b/sonic-weave/types/ExportConstantStatement.html @@ -1 +1 @@ -ExportConstantStatement | sonic-weave

    Type alias ExportConstantStatement

    ExportConstantStatement: {
        parameter: Parameter;
        type: "ExportConstantStatement";
    }

    Type declaration

    • parameter: Parameter
    • type: "ExportConstantStatement"

    Generated using TypeDoc

    \ No newline at end of file +ExportConstantStatement | sonic-weave

    Type alias ExportConstantStatement

    ExportConstantStatement: {
        parameter: Parameter;
        type: "ExportConstantStatement";
    }

    Type declaration

    • parameter: Parameter
    • type: "ExportConstantStatement"
    \ No newline at end of file diff --git a/sonic-weave/types/Expression.html b/sonic-weave/types/Expression.html index b2f6a18..e173a81 100644 --- a/sonic-weave/types/Expression.html +++ b/sonic-weave/types/Expression.html @@ -1 +1 @@ -Expression | sonic-weave

    Generated using TypeDoc

    \ No newline at end of file +Expression | sonic-weave
    \ No newline at end of file diff --git a/sonic-weave/types/ExpressionStatement.html b/sonic-weave/types/ExpressionStatement.html index f471c89..2723f77 100644 --- a/sonic-weave/types/ExpressionStatement.html +++ b/sonic-weave/types/ExpressionStatement.html @@ -1 +1 @@ -ExpressionStatement | sonic-weave

    Type alias ExpressionStatement

    ExpressionStatement: {
        expression: Expression;
        type: "ExpressionStatement";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +ExpressionStatement | sonic-weave

    Type alias ExpressionStatement

    ExpressionStatement: {
        expression: Expression;
        type: "ExpressionStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/FJS.html b/sonic-weave/types/FJS.html index 2216d14..79b1dfa 100644 --- a/sonic-weave/types/FJS.html +++ b/sonic-weave/types/FJS.html @@ -1 +1 @@ -FJS | sonic-weave

    Type alias FJS

    FJS: {
        lifts: number;
        pythagorean: Pythagorean;
        subscripts: FJSInflection[];
        superscripts: FJSInflection[];
        type: "FJS";
        ups: number;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +FJS | sonic-weave

    Type alias FJS

    FJS: {
        lifts: number;
        pythagorean: Pythagorean;
        subscripts: FJSInflection[];
        superscripts: FJSInflection[];
        type: "FJS";
        ups: number;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/FJSFlavor.html b/sonic-weave/types/FJSFlavor.html index fd276c4..7625688 100644 --- a/sonic-weave/types/FJSFlavor.html +++ b/sonic-weave/types/FJSFlavor.html @@ -9,4 +9,4 @@

    's': Syntonic rastmic subchroma commas by Aura

    'q': Semiquartal analogue of Neutral FJS by Lumi Pakkanen

    't': Tone-splitter analogue of Neutral FJS by Lumi Pakkanen

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/FJSInflection.html b/sonic-weave/types/FJSInflection.html index 042f0ae..c6806be 100644 --- a/sonic-weave/types/FJSInflection.html +++ b/sonic-weave/types/FJSInflection.html @@ -1 +1 @@ -FJSInflection | sonic-weave

    Type alias FJSInflection

    FJSInflection: [number, FJSFlavor]

    Generated using TypeDoc

    \ No newline at end of file +FJSInflection | sonic-weave

    Type alias FJSInflection

    FJSInflection: [number, FJSFlavor]
    \ No newline at end of file diff --git a/sonic-weave/types/FalseLiteral.html b/sonic-weave/types/FalseLiteral.html index 7fbe79d..98f900a 100644 --- a/sonic-weave/types/FalseLiteral.html +++ b/sonic-weave/types/FalseLiteral.html @@ -1 +1 @@ -FalseLiteral | sonic-weave

    Type alias FalseLiteral

    FalseLiteral: {
        type: "FalseLiteral";
    }

    Type declaration

    • type: "FalseLiteral"

    Generated using TypeDoc

    \ No newline at end of file +FalseLiteral | sonic-weave

    Type alias FalseLiteral

    FalseLiteral: {
        type: "FalseLiteral";
    }

    Type declaration

    • type: "FalseLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/FormalPrimeMetric.html b/sonic-weave/types/FormalPrimeMetric.html new file mode 100644 index 0000000..164f13b --- /dev/null +++ b/sonic-weave/types/FormalPrimeMetric.html @@ -0,0 +1,10 @@ +FormalPrimeMetric | sonic-weave

    Type alias FormalPrimeMetric

    FormalPrimeMetric: "subgroup" | "inharmonic" | "Tenney-Pakkanen"

    How to treat subgroups with non-primes during temperament optimization.

    +
      +
    • 'subgroup': Promote composite/fractional subgroup to a prime subgroup and project result.

      +
    • +
    • 'inharmonic': Treat formal primes as prime numbers according to their size.

      +
    • +
    • 'Tenney-Pakkanen': Weigh formal primes according to their Tenney-height.

      +
    • +
    +
    \ No newline at end of file diff --git a/sonic-weave/types/FractionLiteral.html b/sonic-weave/types/FractionLiteral.html index f8fcaa5..7aefbf0 100644 --- a/sonic-weave/types/FractionLiteral.html +++ b/sonic-weave/types/FractionLiteral.html @@ -1 +1 @@ -FractionLiteral | sonic-weave

    Type alias FractionLiteral

    FractionLiteral: {
        denominator: bigint;
        numerator: bigint;
        type: "FractionLiteral";
    }

    Type declaration

    • denominator: bigint
    • numerator: bigint
    • type: "FractionLiteral"

    Generated using TypeDoc

    \ No newline at end of file +FractionLiteral | sonic-weave

    Type alias FractionLiteral

    FractionLiteral: {
        denominator: bigint;
        numerator: bigint;
        type: "FractionLiteral";
    }

    Type declaration

    • denominator: bigint
    • numerator: bigint
    • type: "FractionLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/FractionalMonzo.html b/sonic-weave/types/FractionalMonzo.html deleted file mode 100644 index 7be99a5..0000000 --- a/sonic-weave/types/FractionalMonzo.html +++ /dev/null @@ -1,2 +0,0 @@ -FractionalMonzo | sonic-weave

    Type alias FractionalMonzo

    FractionalMonzo: Fraction[]

    Fractional prime exponents of rational numbers for exact representation of square roots etc.

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/sonic-weave/types/FunctionDeclaration.html b/sonic-weave/types/FunctionDeclaration.html index 4794bb6..6cc4049 100644 --- a/sonic-weave/types/FunctionDeclaration.html +++ b/sonic-weave/types/FunctionDeclaration.html @@ -1 +1 @@ -FunctionDeclaration | sonic-weave

    Type alias FunctionDeclaration

    FunctionDeclaration: {
        body: Statement[];
        name: Identifier;
        parameters: Parameters_;
        text: string;
        type: "FunctionDeclaration";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +FunctionDeclaration | sonic-weave

    Type alias FunctionDeclaration

    FunctionDeclaration: {
        body: Statement[];
        name: Identifier;
        parameters: Parameters_;
        text: string;
        type: "FunctionDeclaration";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/HardnessDeclaration.html b/sonic-weave/types/HardnessDeclaration.html index a84c61c..2ea4a83 100644 --- a/sonic-weave/types/HardnessDeclaration.html +++ b/sonic-weave/types/HardnessDeclaration.html @@ -1 +1 @@ -HardnessDeclaration | sonic-weave

    Type alias HardnessDeclaration

    HardnessDeclaration: {
        type: "HardnessDeclaration";
        value: Expression;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +HardnessDeclaration | sonic-weave

    Type alias HardnessDeclaration

    HardnessDeclaration: {
        type: "HardnessDeclaration";
        value: Expression;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/HarmonicSegment.html b/sonic-weave/types/HarmonicSegment.html index e68b435..68902c6 100644 --- a/sonic-weave/types/HarmonicSegment.html +++ b/sonic-weave/types/HarmonicSegment.html @@ -1 +1 @@ -HarmonicSegment | sonic-weave

    Type alias HarmonicSegment

    HarmonicSegment: {
        end: Expression;
        root: Expression;
        type: "HarmonicSegment";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +HarmonicSegment | sonic-weave

    Type alias HarmonicSegment

    HarmonicSegment: {
        end: Expression;
        root: Expression;
        type: "HarmonicSegment";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/HertzLiteral.html b/sonic-weave/types/HertzLiteral.html index cfc208e..03ee85f 100644 --- a/sonic-weave/types/HertzLiteral.html +++ b/sonic-weave/types/HertzLiteral.html @@ -1 +1 @@ -HertzLiteral | sonic-weave

    Type alias HertzLiteral

    HertzLiteral: {
        prefix: MetricPrefix | BinaryPrefix;
        type: "HertzLiteral";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +HertzLiteral | sonic-weave

    Type alias HertzLiteral

    HertzLiteral: {
        prefix: MetricPrefix | BinaryPrefix;
        type: "HertzLiteral";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/Identifier.html b/sonic-weave/types/Identifier.html index 110cc0d..70dc89a 100644 --- a/sonic-weave/types/Identifier.html +++ b/sonic-weave/types/Identifier.html @@ -1 +1 @@ -Identifier | sonic-weave

    Type alias Identifier

    Identifier: {
        id: string;
        type: "Identifier";
    }

    Type declaration

    • id: string
    • type: "Identifier"

    Generated using TypeDoc

    \ No newline at end of file +Identifier | sonic-weave

    Type alias Identifier

    Identifier: {
        id: string;
        type: "Identifier";
    }

    Type declaration

    • id: string
    • type: "Identifier"
    \ No newline at end of file diff --git a/sonic-weave/types/Identifiers.html b/sonic-weave/types/Identifiers.html index 300b7d2..8d42145 100644 --- a/sonic-weave/types/Identifiers.html +++ b/sonic-weave/types/Identifiers.html @@ -1 +1 @@ -Identifiers | sonic-weave

    Type alias Identifiers

    Identifiers: {
        identifiers: (Identifier | Identifiers)[];
        rest?: Identifier;
        type: "Identifiers";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +Identifiers | sonic-weave

    Type alias Identifiers

    Identifiers: {
        identifiers: (Identifier | Identifiers)[];
        rest?: Identifier;
        type: "Identifiers";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/IfStatement.html b/sonic-weave/types/IfStatement.html index 629f97a..a88c41e 100644 --- a/sonic-weave/types/IfStatement.html +++ b/sonic-weave/types/IfStatement.html @@ -1 +1 @@ -IfStatement | sonic-weave

    Type alias IfStatement

    IfStatement: {
        alternate?: Statement;
        consequent: Statement;
        test: Expression;
        type: "IfStatement";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +IfStatement | sonic-weave

    Type alias IfStatement

    IfStatement: {
        alternate?: Statement;
        consequent: Statement;
        test: Expression;
        type: "IfStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/ImportAllStatement.html b/sonic-weave/types/ImportAllStatement.html index ea50fa2..72d272d 100644 --- a/sonic-weave/types/ImportAllStatement.html +++ b/sonic-weave/types/ImportAllStatement.html @@ -1 +1 @@ -ImportAllStatement | sonic-weave

    Type alias ImportAllStatement

    ImportAllStatement: {
        module: string;
        type: "ImportAllStatement";
    }

    Type declaration

    • module: string
    • type: "ImportAllStatement"

    Generated using TypeDoc

    \ No newline at end of file +ImportAllStatement | sonic-weave

    Type alias ImportAllStatement

    ImportAllStatement: {
        module: string;
        type: "ImportAllStatement";
    }

    Type declaration

    • module: string
    • type: "ImportAllStatement"
    \ No newline at end of file diff --git a/sonic-weave/types/ImportElement.html b/sonic-weave/types/ImportElement.html index 43160df..450d60f 100644 --- a/sonic-weave/types/ImportElement.html +++ b/sonic-weave/types/ImportElement.html @@ -1 +1 @@ -ImportElement | sonic-weave

    Type alias ImportElement

    ImportElement: {
        alias: null | string;
        id: string;
        type: "ImportElement";
    }

    Type declaration

    • alias: null | string
    • id: string
    • type: "ImportElement"

    Generated using TypeDoc

    \ No newline at end of file +ImportElement | sonic-weave

    Type alias ImportElement

    ImportElement: {
        alias: null | string;
        id: string;
        type: "ImportElement";
    }

    Type declaration

    • alias: null | string
    • id: string
    • type: "ImportElement"
    \ No newline at end of file diff --git a/sonic-weave/types/ImportStatement.html b/sonic-weave/types/ImportStatement.html index 114717d..29142ca 100644 --- a/sonic-weave/types/ImportStatement.html +++ b/sonic-weave/types/ImportStatement.html @@ -1 +1 @@ -ImportStatement | sonic-weave

    Type alias ImportStatement

    ImportStatement: {
        elements: ImportElement[];
        module: string;
        type: "ImportStatement";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +ImportStatement | sonic-weave

    Type alias ImportStatement

    ImportStatement: {
        elements: ImportElement[];
        module: string;
        type: "ImportStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/InfinityLiteral.html b/sonic-weave/types/InfinityLiteral.html index 693d0fb..76bde5e 100644 --- a/sonic-weave/types/InfinityLiteral.html +++ b/sonic-weave/types/InfinityLiteral.html @@ -1 +1 @@ -InfinityLiteral | sonic-weave

    Type alias InfinityLiteral

    InfinityLiteral: {
        type: "InfinityLiteral";
    }

    Type declaration

    • type: "InfinityLiteral"

    Generated using TypeDoc

    \ No newline at end of file +InfinityLiteral | sonic-weave

    Type alias InfinityLiteral

    InfinityLiteral: {
        type: "InfinityLiteral";
    }

    Type declaration

    • type: "InfinityLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/IntegerLiteral.html b/sonic-weave/types/IntegerLiteral.html index 715fc29..c2fb15a 100644 --- a/sonic-weave/types/IntegerLiteral.html +++ b/sonic-weave/types/IntegerLiteral.html @@ -1 +1 @@ -IntegerLiteral | sonic-weave

    Type alias IntegerLiteral

    IntegerLiteral: {
        type: "IntegerLiteral";
        value: bigint;
    }

    Type declaration

    • type: "IntegerLiteral"
    • value: bigint

    Generated using TypeDoc

    \ No newline at end of file +IntegerLiteral | sonic-weave

    Type alias IntegerLiteral

    IntegerLiteral: {
        type: "IntegerLiteral";
        value: bigint;
    }

    Type declaration

    • type: "IntegerLiteral"
    • value: bigint
    \ No newline at end of file diff --git a/sonic-weave/types/IntegerPattern.html b/sonic-weave/types/IntegerPattern.html index 056da34..89f9b7f 100644 --- a/sonic-weave/types/IntegerPattern.html +++ b/sonic-weave/types/IntegerPattern.html @@ -1 +1 @@ -IntegerPattern | sonic-weave

    Type alias IntegerPattern

    IntegerPattern: {
        equave: RationalEquave | null;
        pattern: number[];
        type: "IntegerPattern";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +IntegerPattern | sonic-weave

    Type alias IntegerPattern

    IntegerPattern: {
        equave: RationalEquave | null;
        pattern: number[];
        type: "IntegerPattern";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/IntervalDomain.html b/sonic-weave/types/IntervalDomain.html index 405b39b..bf81f57 100644 --- a/sonic-weave/types/IntervalDomain.html +++ b/sonic-weave/types/IntervalDomain.html @@ -1,2 +1,2 @@ IntervalDomain | sonic-weave

    Type alias IntervalDomain

    IntervalDomain: "linear" | "logarithmic"

    Interval domain. The operator '+' means addition in the linear domain. In the logarithmic domain '+' correspond to multiplication of the underlying values instead.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/IntervalLiteral.html b/sonic-weave/types/IntervalLiteral.html index 682fdf9..43b2676 100644 --- a/sonic-weave/types/IntervalLiteral.html +++ b/sonic-weave/types/IntervalLiteral.html @@ -1,2 +1,2 @@ -IntervalLiteral | sonic-weave

    Generated using TypeDoc

    \ No newline at end of file +IntervalLiteral | sonic-weave
    \ No newline at end of file diff --git a/sonic-weave/types/IntervalQuality.html b/sonic-weave/types/IntervalQuality.html index 3067f27..169e5a6 100644 --- a/sonic-weave/types/IntervalQuality.html +++ b/sonic-weave/types/IntervalQuality.html @@ -1,2 +1,2 @@ -IntervalQuality | sonic-weave

    Type alias IntervalQuality

    IntervalQuality: {
        fraction: VulgarFraction;
        quality: "P" | "n" | "m" | "M" | AugmentedQuality;
    }

    Interval quality, possibly fractional.

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +IntervalQuality | sonic-weave

    Type alias IntervalQuality

    IntervalQuality: {
        fraction: VulgarFraction;
        quality: "m" | "min" | "n" | "neu" | "P" | "M" | "maj" | "Maj" | AugmentedQuality;
    }

    Interval quality, possibly fractional.

    +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/IterationKind.html b/sonic-weave/types/IterationKind.html index faf51b9..6afb026 100644 --- a/sonic-weave/types/IterationKind.html +++ b/sonic-weave/types/IterationKind.html @@ -1 +1 @@ -IterationKind | sonic-weave

    Type alias IterationKind

    IterationKind: "in" | "of"

    Generated using TypeDoc

    \ No newline at end of file +IterationKind | sonic-weave

    Type alias IterationKind

    IterationKind: "in" | "of"
    \ No newline at end of file diff --git a/sonic-weave/types/IterationStatement.html b/sonic-weave/types/IterationStatement.html index bf5af89..38757ea 100644 --- a/sonic-weave/types/IterationStatement.html +++ b/sonic-weave/types/IterationStatement.html @@ -1 +1 @@ -IterationStatement | sonic-weave

    Type alias IterationStatement

    IterationStatement: {
        body: Statement;
        container: Expression;
        element: Parameter | Parameters_;
        kind: IterationKind;
        mutable: boolean;
        tail: null | Statement;
        type: "IterationStatement";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +IterationStatement | sonic-weave

    Type alias IterationStatement

    IterationStatement: {
        body: Statement;
        container: Expression;
        element: Parameter | Parameters_;
        kind: IterationKind;
        mutable: boolean;
        tail: null | Statement;
        type: "IterationStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/LargeDeclaration.html b/sonic-weave/types/LargeDeclaration.html index 9cccfdd..20cc592 100644 --- a/sonic-weave/types/LargeDeclaration.html +++ b/sonic-weave/types/LargeDeclaration.html @@ -1 +1 @@ -LargeDeclaration | sonic-weave

    Type alias LargeDeclaration

    LargeDeclaration: {
        type: "LargeDeclaration";
        value: Expression;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +LargeDeclaration | sonic-weave

    Type alias LargeDeclaration

    LargeDeclaration: {
        type: "LargeDeclaration";
        value: Expression;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/LiftDeclaration.html b/sonic-weave/types/LiftDeclaration.html index 012a072..f466937 100644 --- a/sonic-weave/types/LiftDeclaration.html +++ b/sonic-weave/types/LiftDeclaration.html @@ -1 +1 @@ -LiftDeclaration | sonic-weave

    Type alias LiftDeclaration

    LiftDeclaration: {
        type: "LiftDeclaration";
        value: Expression;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +LiftDeclaration | sonic-weave

    Type alias LiftDeclaration

    LiftDeclaration: {
        type: "LiftDeclaration";
        value: Expression;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/MetricPrefix.html b/sonic-weave/types/MetricPrefix.html index ef12425..72924c9 100644 --- a/sonic-weave/types/MetricPrefix.html +++ b/sonic-weave/types/MetricPrefix.html @@ -1,3 +1,3 @@ MetricPrefix | sonic-weave

    Type alias MetricPrefix

    MetricPrefix: "Q" | "R" | "Y" | "Z" | "E" | "P" | "T" | "G" | "M" | "k" | "h" | "da" | "" | "d" | "c" | "m" | "µ" | "n" | "p" | "f" | "a" | "z" | "y" | "r" | "q"

    One of the metric prefixes listed here: https://en.wikipedia.org/wiki/Metric_prefix Goes from quecto = 10^-30 to Quetta = 10^30.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/ModuleDeclaration.html b/sonic-weave/types/ModuleDeclaration.html index 8eb13b8..d24b816 100644 --- a/sonic-weave/types/ModuleDeclaration.html +++ b/sonic-weave/types/ModuleDeclaration.html @@ -1 +1 @@ -ModuleDeclaration | sonic-weave

    Type alias ModuleDeclaration

    ModuleDeclaration: {
        body: Statement[];
        name: string;
        type: "ModuleDeclaration";
    }

    Type declaration

    • body: Statement[]
    • name: string
    • type: "ModuleDeclaration"

    Generated using TypeDoc

    \ No newline at end of file +ModuleDeclaration | sonic-weave

    Type alias ModuleDeclaration

    ModuleDeclaration: {
        body: Statement[];
        name: string;
        type: "ModuleDeclaration";
    }

    Type declaration

    • body: Statement[]
    • name: string
    • type: "ModuleDeclaration"
    \ No newline at end of file diff --git a/sonic-weave/types/MonzoLiteral.html b/sonic-weave/types/MonzoLiteral.html index da32395..84a977a 100644 --- a/sonic-weave/types/MonzoLiteral.html +++ b/sonic-weave/types/MonzoLiteral.html @@ -1 +1 @@ -MonzoLiteral | sonic-weave

    Type alias MonzoLiteral

    MonzoLiteral: {
        basis: BasisElement[];
        components: VectorComponent[];
        lifts: number;
        type: "MonzoLiteral";
        ups: number;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +MonzoLiteral | sonic-weave

    Type alias MonzoLiteral

    MonzoLiteral: {
        basis: BasisElement[] | Identifier;
        components: VectorComponent[];
        lifts: number;
        type: "MonzoLiteral";
        ups: number;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/MosAccidental.html b/sonic-weave/types/MosAccidental.html index 7efd38e..a325552 100644 --- a/sonic-weave/types/MosAccidental.html +++ b/sonic-weave/types/MosAccidental.html @@ -3,4 +3,4 @@ e = Raises a note by half a moschroma +(L-s)/2 a = Lowers a note by half a moschroma -(L-s)/2 @ = Lowers a note by a moschroma -(L-s)

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/MosConfig.html b/sonic-weave/types/MosConfig.html index 613e635..6644f2f 100644 --- a/sonic-weave/types/MosConfig.html +++ b/sonic-weave/types/MosConfig.html @@ -1,9 +1,12 @@ -MosConfig | sonic-weave

    Type alias MosConfig

    MosConfig: {
        am: TimeMonzo;
        degrees: MosDegree[];
        equave: TimeMonzo;
        period: TimeMonzo;
        scale: Map<MosNominal, TimeMonzo>;
        semiam: TimeMonzo;
    }

    Configuration for a scale notated in Diamond mos. +MosConfig | sonic-weave

    Type alias MosConfig

    MosConfig: {
        am: TimeMonzo | TimeReal;
        degrees: MosDegree[];
        equave: TimeMonzo | TimeReal;
        large: TimeMonzo | TimeReal;
        pattern: string;
        period: TimeMonzo | TimeReal;
        scale: Map<string, TimeMonzo | TimeReal>;
        semiam: TimeMonzo | TimeReal;
        small: TimeMonzo | TimeReal;
    }

    Configuration for a scale notated in Diamond mos. May define a non-MOS scale as a result of accidental or intentional misconfiguration.

    -

    Type declaration

    • am: TimeMonzo

      Current value of the '&' accidental.

      +

      Type declaration

      • am: TimeMonzo | TimeReal

        Current value of the '&' accidental.

      • degrees: MosDegree[]

        Intervals for relative notation. Use period to reach larger intervals.

        -
      • equave: TimeMonzo

        Interval of equivalence. The distance between J4 and J5.

        -
      • period: TimeMonzo

        Period of repetition.

        -
      • scale: Map<MosNominal, TimeMonzo>

        Relative scale from J onwards. Echelon depends on J. Use equave to reach higher octave numbers.

        -
      • semiam: TimeMonzo

        Current value of the 'e' accidental.

        -

    Generated using TypeDoc

    \ No newline at end of file +
  • equave: TimeMonzo | TimeReal

    Interval of equivalence. The distance between J4 and J5.

    +
  • large: TimeMonzo | TimeReal

    Value of the large step.

    +
  • pattern: string

    Pattern for reconstructing the MOS declaration.

    +
  • period: TimeMonzo | TimeReal

    Period of repetition.

    +
  • scale: Map<string, TimeMonzo | TimeReal>

    Relative scale from J onwards. Echelon depends on J. Use equave to reach higher octave numbers.

    +
  • semiam: TimeMonzo | TimeReal

    Current value of the 'e' accidental.

    +
  • small: TimeMonzo | TimeReal

    Value of the small step.

    +
  • \ No newline at end of file diff --git a/sonic-weave/types/MosDeclaration.html b/sonic-weave/types/MosDeclaration.html index 7b68042..f5629bb 100644 --- a/sonic-weave/types/MosDeclaration.html +++ b/sonic-weave/types/MosDeclaration.html @@ -1 +1 @@ -MosDeclaration | sonic-weave

    Type alias MosDeclaration

    MosDeclaration: {
        body: MosExpression[];
        type: "MosDeclaration";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +MosDeclaration | sonic-weave

    Type alias MosDeclaration

    MosDeclaration: {
        body: MosExpression[];
        type: "MosDeclaration";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/MosDegree.html b/sonic-weave/types/MosDegree.html index 8e170ac..5ccbcca 100644 --- a/sonic-weave/types/MosDegree.html +++ b/sonic-weave/types/MosDegree.html @@ -1,5 +1,5 @@ -MosDegree | sonic-weave

    Type alias MosDegree

    MosDegree: {
        center: TimeMonzo;
        imperfect: boolean;
        mid?: TimeMonzo;
    }

    Base degree for a mosstep in a 0-indexed array.

    -

    Type declaration

    • center: TimeMonzo

      The perfect or neutral central interval.

      +MosDegree | sonic-weave

      Type alias MosDegree

      MosDegree: {
          center: TimeMonzo | TimeReal;
          imperfect: boolean;
          mid?: TimeMonzo | TimeReal;
      }

      Base degree for a mosstep in a 0-indexed array.

      +

      Type declaration

      • center: TimeMonzo | TimeReal

        The perfect or neutral central interval.

      • imperfect: boolean

        Flag to indicate if the degree has minor and major variants.

        -
      • Optional mid?: TimeMonzo

        The lopsided neutral variant of a bright or dark generator.

        -

      Generated using TypeDoc

      \ No newline at end of file +
    • Optional mid?: TimeMonzo | TimeReal

      The lopsided neutral variant of a bright or dark generator.

      +
    \ No newline at end of file diff --git a/sonic-weave/types/MosExpression.html b/sonic-weave/types/MosExpression.html index 1fc7f1f..24e223f 100644 --- a/sonic-weave/types/MosExpression.html +++ b/sonic-weave/types/MosExpression.html @@ -1 +1 @@ -MosExpression | sonic-weave

    Generated using TypeDoc

    \ No newline at end of file +MosExpression | sonic-weave
    \ No newline at end of file diff --git a/sonic-weave/types/MosNominal.html b/sonic-weave/types/MosNominal.html deleted file mode 100644 index 298b843..0000000 --- a/sonic-weave/types/MosNominal.html +++ /dev/null @@ -1,3 +0,0 @@ -MosNominal | sonic-weave

    Type alias MosNominal

    MosNominal: "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"

    Diamond-mos nominals from J to Z.

    -

    The number of valid nominals corresponds to the size of the MOS scale and repeats every equave.

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/sonic-weave/types/MosStep.html b/sonic-weave/types/MosStep.html index 58d8c03..c550e8c 100644 --- a/sonic-weave/types/MosStep.html +++ b/sonic-weave/types/MosStep.html @@ -1,2 +1,2 @@ MosStep | sonic-weave

    Type alias MosStep

    MosStep: {
        augmentations?: AugmentedQuality[];
        degree: 0;
        quality: IntervalQuality;
        type: "MosStep";
    }

    Generic 0-indexed mosstep.

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/MosStepLiteral.html b/sonic-weave/types/MosStepLiteral.html index c96892b..13f5b0f 100644 --- a/sonic-weave/types/MosStepLiteral.html +++ b/sonic-weave/types/MosStepLiteral.html @@ -1 +1 @@ -MosStepLiteral | sonic-weave

    Type alias MosStepLiteral

    MosStepLiteral: {
        lifts: number;
        mosStep: MosStep;
        subscripts: FJSInflection[];
        superscripts: FJSInflection[];
        type: "MosStepLiteral";
        ups: number;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +MosStepLiteral | sonic-weave

    Type alias MosStepLiteral

    MosStepLiteral: {
        lifts: number;
        mosStep: MosStep;
        subscripts: FJSInflection[];
        superscripts: FJSInflection[];
        type: "MosStepLiteral";
        ups: number;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/NedjiLiteral.html b/sonic-weave/types/NedjiLiteral.html index 9054a22..01e5f80 100644 --- a/sonic-weave/types/NedjiLiteral.html +++ b/sonic-weave/types/NedjiLiteral.html @@ -1 +1 @@ -NedjiLiteral | sonic-weave

    Type alias NedjiLiteral

    NedjiLiteral: {
        denominator: number;
        equaveDenominator: number | null;
        equaveNumerator: number | null;
        numerator: number;
        type: "NedjiLiteral";
    }

    Type declaration

    • denominator: number
    • equaveDenominator: number | null
    • equaveNumerator: number | null
    • numerator: number
    • type: "NedjiLiteral"

    Generated using TypeDoc

    \ No newline at end of file +NedjiLiteral | sonic-weave

    Type alias NedjiLiteral

    NedjiLiteral: {
        denominator: number;
        equaveDenominator: number | null;
        equaveNumerator: number | null;
        numerator: number;
        type: "NedjiLiteral";
    }

    Type declaration

    • denominator: number
    • equaveDenominator: number | null
    • equaveNumerator: number | null
    • numerator: number
    • type: "NedjiLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/Nominal.html b/sonic-weave/types/Nominal.html index 5e0943a..29805b1 100644 --- a/sonic-weave/types/Nominal.html +++ b/sonic-weave/types/Nominal.html @@ -1,2 +1,2 @@ Nominal | sonic-weave

    Type alias Nominal

    Nominal: "A" | "B" | "C" | "D" | "E" | "F" | "G" | "alp" | "α" | "bet" | "β" | "gam" | "γ" | "del" | "δ" | "eps" | "ε" | "zet" | "ζ" | "eta" | "η" | "phi" | "φ" | "chi" | "χ" | "psi" | "ψ" | "ome" | "ω" | "H" | "I" | "the" | "θ" | "iot" | "ι" | "kap" | "κ" | "lam" | "λ" | "muu" | "μ" | "nuu" | "ν" | "xii" | "ξ" | "omi" | "ο" | "pii" | "π" | "rho" | "ρ" | "fsi" | "ς" | "sig" | "σ" | "tau" | "τ" | "ups" | "υ"

    Absolute pitch nominal: Traditional Pythagorean or semioctave.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/NoneLiteral.html b/sonic-weave/types/NoneLiteral.html index f1c704c..cceec39 100644 --- a/sonic-weave/types/NoneLiteral.html +++ b/sonic-weave/types/NoneLiteral.html @@ -1 +1 @@ -NoneLiteral | sonic-weave

    Type alias NoneLiteral

    NoneLiteral: {
        type: "NoneLiteral";
    }

    Type declaration

    • type: "NoneLiteral"

    Generated using TypeDoc

    \ No newline at end of file +NoneLiteral | sonic-weave

    Type alias NoneLiteral

    NoneLiteral: {
        type: "NoneLiteral";
    }

    Type declaration

    • type: "NoneLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/NotANumberLiteral.html b/sonic-weave/types/NotANumberLiteral.html index 5cd9038..d8050a2 100644 --- a/sonic-weave/types/NotANumberLiteral.html +++ b/sonic-weave/types/NotANumberLiteral.html @@ -1 +1 @@ -NotANumberLiteral | sonic-weave

    Type alias NotANumberLiteral

    NotANumberLiteral: {
        type: "NotANumberLiteral";
    }

    Type declaration

    • type: "NotANumberLiteral"

    Generated using TypeDoc

    \ No newline at end of file +NotANumberLiteral | sonic-weave

    Type alias NotANumberLiteral

    NotANumberLiteral: {
        type: "NotANumberLiteral";
    }

    Type declaration

    • type: "NotANumberLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/NumericFlavor.html b/sonic-weave/types/NumericFlavor.html index 26607ae..42ae3f6 100644 --- a/sonic-weave/types/NumericFlavor.html +++ b/sonic-weave/types/NumericFlavor.html @@ -4,4 +4,4 @@

    'e': Rational number with a power of ten denominator. (Indicates an exponent of 0.)

    'E': Rational number with a power of ten denominator. (Indicates an exponent of 0.)

    'z': Absolute frequency that is a decimal multiple of 1 Hz.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/OptimizationScheme.html b/sonic-weave/types/OptimizationScheme.html new file mode 100644 index 0000000..af57cfc --- /dev/null +++ b/sonic-weave/types/OptimizationScheme.html @@ -0,0 +1 @@ +OptimizationScheme | sonic-weave

    Type alias OptimizationScheme

    OptimizationScheme: "TE" | "POTE" | "CTE"
    \ No newline at end of file diff --git a/sonic-weave/types/Parameter.html b/sonic-weave/types/Parameter.html index c4d4c53..332c05e 100644 --- a/sonic-weave/types/Parameter.html +++ b/sonic-weave/types/Parameter.html @@ -1 +1 @@ -Parameter | sonic-weave

    Type alias Parameter

    Parameter: {
        defaultValue: null | Expression;
        id: string;
        type: "Parameter";
    }

    Type declaration

    • defaultValue: null | Expression
    • id: string
    • type: "Parameter"

    Generated using TypeDoc

    \ No newline at end of file +Parameter | sonic-weave

    Type alias Parameter

    Parameter: {
        defaultValue: null | Expression;
        id: string;
        type: "Parameter";
    }

    Type declaration

    • defaultValue: null | Expression
    • id: string
    • type: "Parameter"
    \ No newline at end of file diff --git a/sonic-weave/types/Parameters_.html b/sonic-weave/types/Parameters_.html index 6a7babd..166be56 100644 --- a/sonic-weave/types/Parameters_.html +++ b/sonic-weave/types/Parameters_.html @@ -1 +1 @@ -Parameters_ | sonic-weave

    Type alias Parameters_

    Parameters_: {
        defaultValue: null | Expression;
        parameters: (Parameter | Parameters_)[];
        rest?: Parameter;
        type: "Parameters";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +Parameters_ | sonic-weave

    Type alias Parameters_

    Parameters_: {
        defaultValue: null | Expression;
        parameters: (Parameter | Parameters_)[];
        rest?: Parameter;
        type: "Parameters";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/PatentTweak.html b/sonic-weave/types/PatentTweak.html index dd588cc..aa375a4 100644 --- a/sonic-weave/types/PatentTweak.html +++ b/sonic-weave/types/PatentTweak.html @@ -1 +1 @@ -PatentTweak | sonic-weave

    Type alias PatentTweak

    PatentTweak: {
        element: BasisFraction;
        tweak: number;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +PatentTweak | sonic-weave

    Type alias PatentTweak

    PatentTweak: {
        element: BasisFraction;
        tweak: number;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/PatternUpDownPeriod.html b/sonic-weave/types/PatternUpDownPeriod.html index f92cb60..11662a9 100644 --- a/sonic-weave/types/PatternUpDownPeriod.html +++ b/sonic-weave/types/PatternUpDownPeriod.html @@ -1 +1 @@ -PatternUpDownPeriod | sonic-weave

    Type alias PatternUpDownPeriod

    PatternUpDownPeriod: {
        countLarge: number;
        countSmall: number;
        equave: RationalEquave | null;
        type: "PatternUpDownPeriod";
        udp: UpDownPeriod | null;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +PatternUpDownPeriod | sonic-weave

    Type alias PatternUpDownPeriod

    PatternUpDownPeriod: {
        countLarge: number;
        countSmall: number;
        equave: RationalEquave | null;
        type: "PatternUpDownPeriod";
        udp: UpDownPeriod | null;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/PitchDeclaration.html b/sonic-weave/types/PitchDeclaration.html index acad2a8..8e90133 100644 --- a/sonic-weave/types/PitchDeclaration.html +++ b/sonic-weave/types/PitchDeclaration.html @@ -1 +1 @@ -PitchDeclaration | sonic-weave

    Type alias PitchDeclaration

    PitchDeclaration: {
        left: Expression;
        middle?: Expression;
        right: Expression;
        type: "PitchDeclaration";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +PitchDeclaration | sonic-weave

    Type alias PitchDeclaration

    PitchDeclaration: {
        left: Expression;
        middle?: Expression;
        right: Expression;
        type: "PitchDeclaration";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/PopScale.html b/sonic-weave/types/PopScale.html new file mode 100644 index 0000000..4871e62 --- /dev/null +++ b/sonic-weave/types/PopScale.html @@ -0,0 +1 @@ +PopScale | sonic-weave

    Type alias PopScale

    PopScale: {
        parent: boolean;
        type: "PopScale";
    }

    Type declaration

    • parent: boolean
    • type: "PopScale"
    \ No newline at end of file diff --git a/sonic-weave/types/Program.html b/sonic-weave/types/Program.html index e71332e..0a64120 100644 --- a/sonic-weave/types/Program.html +++ b/sonic-weave/types/Program.html @@ -1 +1 @@ -Program | sonic-weave

    Type alias Program

    Program: {
        body: Statement[];
        type: "Program";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +Program | sonic-weave

    Type alias Program

    Program: {
        body: Statement[];
        type: "Program";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/Pythagorean.html b/sonic-weave/types/Pythagorean.html index 23f6d13..325be29 100644 --- a/sonic-weave/types/Pythagorean.html +++ b/sonic-weave/types/Pythagorean.html @@ -1,2 +1,2 @@ Pythagorean | sonic-weave

    Type alias Pythagorean

    Pythagorean: {
        augmentations?: AugmentedQuality[];
        degree: Degree;
        quality: IntervalQuality;
        type: "Pythagorean";
    }

    Relative Pythagorean interval.

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/RadicalLiteral.html b/sonic-weave/types/RadicalLiteral.html index e258102..1f10681 100644 --- a/sonic-weave/types/RadicalLiteral.html +++ b/sonic-weave/types/RadicalLiteral.html @@ -1,2 +1,2 @@ RadicalLiteral | sonic-weave

    Type alias RadicalLiteral

    RadicalLiteral: {
        argument: Fraction;
        exponent: Fraction;
        type: "RadicalLiteral";
    }

    A synthetic AST node for formatting expressions like 2^3/5.

    -

    Type declaration

    • argument: Fraction
    • exponent: Fraction
    • type: "RadicalLiteral"

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    • argument: Fraction
    • exponent: Fraction
    • type: "RadicalLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/Range.html b/sonic-weave/types/Range.html index 80647eb..af016b9 100644 --- a/sonic-weave/types/Range.html +++ b/sonic-weave/types/Range.html @@ -1 +1 @@ -Range | sonic-weave

    Type alias Range

    Range: {
        end: Expression;
        penultimate: boolean;
        second?: Expression;
        start: Expression;
        type: "Range";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +Range | sonic-weave

    Type alias Range

    Range: {
        end: Expression;
        penultimate: boolean;
        second?: Expression;
        start: Expression;
        type: "Range";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/RangeRelation.html b/sonic-weave/types/RangeRelation.html new file mode 100644 index 0000000..5af0086 --- /dev/null +++ b/sonic-weave/types/RangeRelation.html @@ -0,0 +1 @@ +RangeRelation | sonic-weave

    Type alias RangeRelation

    RangeRelation: {
        left: Expression;
        leftOperator: "<" | "<=" | ">" | ">=";
        middle: Expression;
        right: Expression;
        rightOperator: "<" | "<=" | ">" | ">=";
        type: "RangeRelation";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/RationalEquave.html b/sonic-weave/types/RationalEquave.html index 264cda8..7b9c67d 100644 --- a/sonic-weave/types/RationalEquave.html +++ b/sonic-weave/types/RationalEquave.html @@ -1 +1 @@ -RationalEquave | sonic-weave

    Type alias RationalEquave

    RationalEquave: {
        denominator: number;
        numerator: number;
    }

    Type declaration

    • denominator: number
    • numerator: number

    Generated using TypeDoc

    \ No newline at end of file +RationalEquave | sonic-weave

    Type alias RationalEquave

    RationalEquave: {
        denominator: number;
        numerator: number;
    }

    Type declaration

    • denominator: number
    • numerator: number
    \ No newline at end of file diff --git a/sonic-weave/types/ReciprocalCentLiteral.html b/sonic-weave/types/ReciprocalCentLiteral.html index d0792a0..8d7290a 100644 --- a/sonic-weave/types/ReciprocalCentLiteral.html +++ b/sonic-weave/types/ReciprocalCentLiteral.html @@ -1 +1 @@ -ReciprocalCentLiteral | sonic-weave

    Type alias ReciprocalCentLiteral

    ReciprocalCentLiteral: {
        type: "ReciprocalCentLiteral";
    }

    Type declaration

    • type: "ReciprocalCentLiteral"

    Generated using TypeDoc

    \ No newline at end of file +ReciprocalCentLiteral | sonic-weave

    Type alias ReciprocalCentLiteral

    ReciprocalCentLiteral: {
        type: "ReciprocalCentLiteral";
    }

    Type declaration

    • type: "ReciprocalCentLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/ReciprocalLogarithmicHertzLiteral.html b/sonic-weave/types/ReciprocalLogarithmicHertzLiteral.html index e95a0f9..685ee3a 100644 --- a/sonic-weave/types/ReciprocalLogarithmicHertzLiteral.html +++ b/sonic-weave/types/ReciprocalLogarithmicHertzLiteral.html @@ -1 +1 @@ -ReciprocalLogarithmicHertzLiteral | sonic-weave

    Type alias ReciprocalLogarithmicHertzLiteral

    ReciprocalLogarithmicHertzLiteral: {
        type: "ReciprocalLogarithmicHertzLiteral";
    }

    Type declaration

    • type: "ReciprocalLogarithmicHertzLiteral"

    Generated using TypeDoc

    \ No newline at end of file +ReciprocalLogarithmicHertzLiteral | sonic-weave

    Type alias ReciprocalLogarithmicHertzLiteral

    ReciprocalLogarithmicHertzLiteral: {
        type: "ReciprocalLogarithmicHertzLiteral";
    }

    Type declaration

    • type: "ReciprocalLogarithmicHertzLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/RecordLiteral.html b/sonic-weave/types/RecordLiteral.html index 5eccd91..01cba92 100644 --- a/sonic-weave/types/RecordLiteral.html +++ b/sonic-weave/types/RecordLiteral.html @@ -1 +1 @@ -RecordLiteral | sonic-weave

    Type alias RecordLiteral

    RecordLiteral: {
        properties: [string | null, Expression][];
        type: "RecordLiteral";
    }

    Type declaration

    • properties: [string | null, Expression][]
    • type: "RecordLiteral"

    Generated using TypeDoc

    \ No newline at end of file +RecordLiteral | sonic-weave

    Type alias RecordLiteral

    RecordLiteral: {
        properties: [string | null, Expression][];
        type: "RecordLiteral";
    }

    Type declaration

    • properties: [string | null, Expression][]
    • type: "RecordLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/ReturnStatement.html b/sonic-weave/types/ReturnStatement.html index 3e575be..8a8820c 100644 --- a/sonic-weave/types/ReturnStatement.html +++ b/sonic-weave/types/ReturnStatement.html @@ -1 +1 @@ -ReturnStatement | sonic-weave

    Type alias ReturnStatement

    ReturnStatement: {
        argument?: Expression;
        type: "ReturnStatement";
    }

    Type declaration

    • Optional argument?: Expression
    • type: "ReturnStatement"

    Generated using TypeDoc

    \ No newline at end of file +ReturnStatement | sonic-weave

    Type alias ReturnStatement

    ReturnStatement: {
        argument?: Expression;
        type: "ReturnStatement";
    }

    Type declaration

    • Optional argument?: Expression
    • type: "ReturnStatement"
    \ No newline at end of file diff --git a/sonic-weave/types/SecondLiteral.html b/sonic-weave/types/SecondLiteral.html index 0d4506c..0f589ba 100644 --- a/sonic-weave/types/SecondLiteral.html +++ b/sonic-weave/types/SecondLiteral.html @@ -1 +1 @@ -SecondLiteral | sonic-weave

    Type alias SecondLiteral

    SecondLiteral: {
        prefix: MetricPrefix | BinaryPrefix;
        type: "SecondLiteral";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +SecondLiteral | sonic-weave

    Type alias SecondLiteral

    SecondLiteral: {
        prefix: MetricPrefix | BinaryPrefix;
        type: "SecondLiteral";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/SetLiteral.html b/sonic-weave/types/SetLiteral.html new file mode 100644 index 0000000..9bc8593 --- /dev/null +++ b/sonic-weave/types/SetLiteral.html @@ -0,0 +1 @@ +SetLiteral | sonic-weave

    Type alias SetLiteral

    SetLiteral: {
        elements: Argument[];
        type: "SetLiteral";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/Sign.html b/sonic-weave/types/Sign.html index 4a6cd55..06157d7 100644 --- a/sonic-weave/types/Sign.html +++ b/sonic-weave/types/Sign.html @@ -1 +1 @@ -Sign | sonic-weave

    Type alias Sign

    Sign: "" | "+" | "-"

    Generated using TypeDoc

    \ No newline at end of file +Sign | sonic-weave

    Type alias Sign

    Sign: "" | "+" | "-"
    \ No newline at end of file diff --git a/sonic-weave/types/SmallDeclaration.html b/sonic-weave/types/SmallDeclaration.html index 2dd53a2..20c9d24 100644 --- a/sonic-weave/types/SmallDeclaration.html +++ b/sonic-weave/types/SmallDeclaration.html @@ -1 +1 @@ -SmallDeclaration | sonic-weave

    Type alias SmallDeclaration

    SmallDeclaration: {
        type: "SmallDeclaration";
        value: Expression;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +SmallDeclaration | sonic-weave

    Type alias SmallDeclaration

    SmallDeclaration: {
        type: "SmallDeclaration";
        value: Expression;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/SonicWeaveModule.html b/sonic-weave/types/SonicWeaveModule.html index 77d5dbf..0847d1d 100644 --- a/sonic-weave/types/SonicWeaveModule.html +++ b/sonic-weave/types/SonicWeaveModule.html @@ -1 +1 @@ -SonicWeaveModule | sonic-weave

    Type alias SonicWeaveModule

    SonicWeaveModule: Map<string | typeof MODULE_DOCSTRING, SonicWeaveValue>

    Generated using TypeDoc

    \ No newline at end of file +SonicWeaveModule | sonic-weave

    Type alias SonicWeaveModule

    SonicWeaveModule: Map<string | typeof MODULE_DOCSTRING, SonicWeaveValue>
    \ No newline at end of file diff --git a/sonic-weave/types/SonicWeavePrimitive.html b/sonic-weave/types/SonicWeavePrimitive.html index 41129d5..358b914 100644 --- a/sonic-weave/types/SonicWeavePrimitive.html +++ b/sonic-weave/types/SonicWeavePrimitive.html @@ -1,2 +1,2 @@ -SonicWeavePrimitive | sonic-weave

    Type alias SonicWeavePrimitive

    SonicWeavePrimitive: SonicWeaveFunction | Interval | Val | Color | string | undefined | boolean

    Primitive value type of the SonicWeave DSL.

    -

    Generated using TypeDoc

    \ No newline at end of file +SonicWeavePrimitive | sonic-weave

    Type alias SonicWeavePrimitive

    SonicWeavePrimitive: SonicWeaveFunction | Interval | Val | ValBasis | Temperament | Color | string | undefined | boolean

    Primitive value type of the SonicWeave DSL.

    +
    \ No newline at end of file diff --git a/sonic-weave/types/SonicWeaveValue.html b/sonic-weave/types/SonicWeaveValue.html index ebebd1e..d6ccd80 100644 --- a/sonic-weave/types/SonicWeaveValue.html +++ b/sonic-weave/types/SonicWeaveValue.html @@ -1,3 +1,3 @@ SonicWeaveValue | sonic-weave

    Type alias SonicWeaveValue

    SonicWeaveValue: SonicWeavePrimitive | SonicWeavePrimitive[] | Record<string, SonicWeavePrimitive>

    Value type of the SonicWeave DSL. Arrays and records are actually recursive types, but this simplification makes it easier on TypeScript.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/SparseOffsetVal.html b/sonic-weave/types/SparseOffsetVal.html index 8823dd9..5d40f75 100644 --- a/sonic-weave/types/SparseOffsetVal.html +++ b/sonic-weave/types/SparseOffsetVal.html @@ -1 +1 @@ -SparseOffsetVal | sonic-weave

    Type alias SparseOffsetVal

    SparseOffsetVal: {
        basis: WartBasisElement[];
        divisions: number;
        equave: BasisFraction;
        tweaks: PatentTweak[];
        type: "SparseOffsetVal";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +SparseOffsetVal | sonic-weave

    Type alias SparseOffsetVal

    SparseOffsetVal: {
        basis: WartBasisElement[] | Identifier;
        divisions: number;
        equave: BasisFraction | "";
        tweaks: PatentTweak[];
        type: "SparseOffsetVal";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/SplitAccidental.html b/sonic-weave/types/SplitAccidental.html index d7f6a09..7ccd659 100644 --- a/sonic-weave/types/SplitAccidental.html +++ b/sonic-weave/types/SplitAccidental.html @@ -1,2 +1,2 @@ SplitAccidental | sonic-weave

    Type alias SplitAccidental

    SplitAccidental: {
        accidental: Accidental;
        fraction: VulgarFraction;
    }

    Musical accidental representing some (possibly split) powers of primes 2 and 3, possibly fractional.

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/SplitMosAccidental.html b/sonic-weave/types/SplitMosAccidental.html index 11f1a71..5450817 100644 --- a/sonic-weave/types/SplitMosAccidental.html +++ b/sonic-weave/types/SplitMosAccidental.html @@ -1,2 +1,2 @@ SplitMosAccidental | sonic-weave

    Type alias SplitMosAccidental

    SplitMosAccidental: {
        accidental: Accidental | MosAccidental;
        fraction: VulgarFraction;
    }

    Potentially fractional Diamond-mos accidental.

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/SquareSuperparticular.html b/sonic-weave/types/SquareSuperparticular.html index 9a527a9..869ca2f 100644 --- a/sonic-weave/types/SquareSuperparticular.html +++ b/sonic-weave/types/SquareSuperparticular.html @@ -1 +1 @@ -SquareSuperparticular | sonic-weave

    Type alias SquareSuperparticular

    SquareSuperparticular: {
        end: bigint | null;
        start: bigint;
        type: "SquareSuperparticular";
    }

    Type declaration

    • end: bigint | null
    • start: bigint
    • type: "SquareSuperparticular"

    Generated using TypeDoc

    \ No newline at end of file +SquareSuperparticular | sonic-weave

    Type alias SquareSuperparticular

    SquareSuperparticular: {
        end: bigint | null;
        start: bigint;
        type: "SquareSuperparticular";
    }

    Type declaration

    • end: bigint | null
    • start: bigint
    • type: "SquareSuperparticular"
    \ No newline at end of file diff --git a/sonic-weave/types/Statement.html b/sonic-weave/types/Statement.html index 9088955..ac0aec2 100644 --- a/sonic-weave/types/Statement.html +++ b/sonic-weave/types/Statement.html @@ -1 +1 @@ -Statement | sonic-weave

    Generated using TypeDoc

    \ No newline at end of file +Statement | sonic-weave
    \ No newline at end of file diff --git a/sonic-weave/types/StepLiteral.html b/sonic-weave/types/StepLiteral.html index 2cd4c38..440d376 100644 --- a/sonic-weave/types/StepLiteral.html +++ b/sonic-weave/types/StepLiteral.html @@ -1 +1 @@ -StepLiteral | sonic-weave

    Type alias StepLiteral

    StepLiteral: {
        count: number;
        type: "StepLiteral";
    }

    Type declaration

    • count: number
    • type: "StepLiteral"

    Generated using TypeDoc

    \ No newline at end of file +StepLiteral | sonic-weave

    Type alias StepLiteral

    StepLiteral: {
        count: number;
        type: "StepLiteral";
    }

    Type declaration

    • count: number
    • type: "StepLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/StepVector.html b/sonic-weave/types/StepVector.html index 7bf5c6a..e515c71 100644 --- a/sonic-weave/types/StepVector.html +++ b/sonic-weave/types/StepVector.html @@ -1,2 +1,2 @@ StepVector | sonic-weave

    Type alias StepVector

    StepVector: Record<string, number>

    Step count vector indexed by strings representing distinct step sizes.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/StringLiteral.html b/sonic-weave/types/StringLiteral.html index b552407..6f0f1e4 100644 --- a/sonic-weave/types/StringLiteral.html +++ b/sonic-weave/types/StringLiteral.html @@ -1 +1 @@ -StringLiteral | sonic-weave

    Type alias StringLiteral

    StringLiteral: {
        type: "StringLiteral";
        value: string;
    }

    Type declaration

    • type: "StringLiteral"
    • value: string

    Generated using TypeDoc

    \ No newline at end of file +StringLiteral | sonic-weave

    Type alias StringLiteral

    StringLiteral: {
        type: "StringLiteral";
        value: string;
    }

    Type declaration

    • type: "StringLiteral"
    • value: string
    \ No newline at end of file diff --git a/sonic-weave/types/Subtender.html b/sonic-weave/types/Subtender.html index d4cd7d3..890307b 100644 --- a/sonic-weave/types/Subtender.html +++ b/sonic-weave/types/Subtender.html @@ -1,2 +1,2 @@ Subtender | sonic-weave

    Type alias Subtender

    Subtender: {
        monzo: TimeMonzo;
        subtensions: Set<number>;
    }

    Result from subtensions consisting of a relative interval and all of the spans it subtends (a set of 0-indexed interval classes).

    -

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/TemplateArgument.html b/sonic-weave/types/TemplateArgument.html index 477b897..8319cd5 100644 --- a/sonic-weave/types/TemplateArgument.html +++ b/sonic-weave/types/TemplateArgument.html @@ -1 +1 @@ -TemplateArgument | sonic-weave

    Type alias TemplateArgument

    TemplateArgument: {
        index: number;
        type: "TemplateArgument";
    }

    Type declaration

    • index: number
    • type: "TemplateArgument"

    Generated using TypeDoc

    \ No newline at end of file +TemplateArgument | sonic-weave

    Type alias TemplateArgument

    TemplateArgument: {
        index: number;
        type: "TemplateArgument";
    }

    Type declaration

    • index: number
    • type: "TemplateArgument"
    \ No newline at end of file diff --git a/sonic-weave/types/ThrowStatement.html b/sonic-weave/types/ThrowStatement.html index 29bf58b..da888f8 100644 --- a/sonic-weave/types/ThrowStatement.html +++ b/sonic-weave/types/ThrowStatement.html @@ -1 +1 @@ -ThrowStatement | sonic-weave

    Type alias ThrowStatement

    ThrowStatement: {
        argument: Expression;
        type: "ThrowStatement";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +ThrowStatement | sonic-weave

    Type alias ThrowStatement

    ThrowStatement: {
        argument: Expression;
        type: "ThrowStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/TrueLiteral.html b/sonic-weave/types/TrueLiteral.html index c7ce023..5c63b04 100644 --- a/sonic-weave/types/TrueLiteral.html +++ b/sonic-weave/types/TrueLiteral.html @@ -1 +1 @@ -TrueLiteral | sonic-weave

    Type alias TrueLiteral

    TrueLiteral: {
        type: "TrueLiteral";
    }

    Type declaration

    • type: "TrueLiteral"

    Generated using TypeDoc

    \ No newline at end of file +TrueLiteral | sonic-weave

    Type alias TrueLiteral

    TrueLiteral: {
        type: "TrueLiteral";
    }

    Type declaration

    • type: "TrueLiteral"
    \ No newline at end of file diff --git a/sonic-weave/types/TryStatement.html b/sonic-weave/types/TryStatement.html index dfa305a..4926d79 100644 --- a/sonic-weave/types/TryStatement.html +++ b/sonic-weave/types/TryStatement.html @@ -1 +1 @@ -TryStatement | sonic-weave

    Type alias TryStatement

    TryStatement: {
        body: Statement;
        finalizer?: Statement;
        handler?: CatchClause;
        type: "TryStatement";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +TryStatement | sonic-weave

    Type alias TryStatement

    TryStatement: {
        body: Statement;
        finalizer?: Statement;
        handler?: CatchClause;
        type: "TryStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/TuningMap.html b/sonic-weave/types/TuningMap.html new file mode 100644 index 0000000..bc5919c --- /dev/null +++ b/sonic-weave/types/TuningMap.html @@ -0,0 +1 @@ +TuningMap | sonic-weave

    Type alias TuningMap

    TuningMap: number[]
    \ No newline at end of file diff --git a/sonic-weave/types/UnaryExpression.html b/sonic-weave/types/UnaryExpression.html index 1b60d33..78f6361 100644 --- a/sonic-weave/types/UnaryExpression.html +++ b/sonic-weave/types/UnaryExpression.html @@ -1 +1 @@ -UnaryExpression | sonic-weave

    Type alias UnaryExpression

    UnaryExpression: {
        operand: Expression;
        operator: UnaryOperator;
        type: "UnaryExpression";
        uniform: boolean;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +UnaryExpression | sonic-weave

    Type alias UnaryExpression

    UnaryExpression: {
        operand: Expression;
        operator: UnaryOperator;
        type: "UnaryExpression";
        uniform: boolean;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/UnaryOperator.html b/sonic-weave/types/UnaryOperator.html index b971f0b..d780bf6 100644 --- a/sonic-weave/types/UnaryOperator.html +++ b/sonic-weave/types/UnaryOperator.html @@ -1 +1 @@ -UnaryOperator | sonic-weave

    Type alias UnaryOperator

    UnaryOperator: "+" | "-" | "%" | "÷" | "abs" | "labs" | "√" | "not" | "vnot" | "^" | "∧" | "∨" | "/" | "lift" | "\\" | "drop"

    Generated using TypeDoc

    \ No newline at end of file +UnaryOperator | sonic-weave

    Type alias UnaryOperator

    UnaryOperator: "+" | "-" | "%" | "÷" | "abs" | "labs" | "√" | "not" | "vnot" | "^" | "∧" | "∨" | "/" | "lift" | "\\" | "drop"
    \ No newline at end of file diff --git a/sonic-weave/types/UpDeclaration.html b/sonic-weave/types/UpDeclaration.html index cd458a8..04323d9 100644 --- a/sonic-weave/types/UpDeclaration.html +++ b/sonic-weave/types/UpDeclaration.html @@ -1 +1 @@ -UpDeclaration | sonic-weave

    Type alias UpDeclaration

    UpDeclaration: {
        type: "UpDeclaration";
        value: Expression;
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +UpDeclaration | sonic-weave

    Type alias UpDeclaration

    UpDeclaration: {
        type: "UpDeclaration";
        value: Expression;
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/UpDownPeriod.html b/sonic-weave/types/UpDownPeriod.html index 5907fec..3d6932e 100644 --- a/sonic-weave/types/UpDownPeriod.html +++ b/sonic-weave/types/UpDownPeriod.html @@ -1 +1 @@ -UpDownPeriod | sonic-weave

    Type alias UpDownPeriod

    UpDownPeriod: {
        down: number;
        period: number | null;
        type: "UDP";
        up: number;
    }

    Type declaration

    • down: number
    • period: number | null
    • type: "UDP"
    • up: number

    Generated using TypeDoc

    \ No newline at end of file +UpDownPeriod | sonic-weave

    Type alias UpDownPeriod

    UpDownPeriod: {
        down: number;
        period: number | null;
        type: "UDP";
        up: number;
    }

    Type declaration

    • down: number
    • period: number | null
    • type: "UDP"
    • up: number
    \ No newline at end of file diff --git a/sonic-weave/types/UpdateExpression.html b/sonic-weave/types/UpdateExpression.html index 6190417..6b5820f 100644 --- a/sonic-weave/types/UpdateExpression.html +++ b/sonic-weave/types/UpdateExpression.html @@ -1 +1 @@ -UpdateExpression | sonic-weave

    Type alias UpdateExpression

    UpdateExpression: {
        argument: Expression;
        operator: UpdateOperator;
        type: "UpdateExpression";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +UpdateExpression | sonic-weave

    Type alias UpdateExpression

    UpdateExpression: {
        argument: Expression;
        operator: UpdateOperator;
        type: "UpdateExpression";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/UpdateOperator.html b/sonic-weave/types/UpdateOperator.html index ef84fc4..aa8fadd 100644 --- a/sonic-weave/types/UpdateOperator.html +++ b/sonic-weave/types/UpdateOperator.html @@ -1 +1 @@ -UpdateOperator | sonic-weave

    Type alias UpdateOperator

    UpdateOperator: "++" | "--"

    Generated using TypeDoc

    \ No newline at end of file +UpdateOperator | sonic-weave

    Type alias UpdateOperator

    UpdateOperator: "++" | "--"
    \ No newline at end of file diff --git a/sonic-weave/types/ValBasisElement.html b/sonic-weave/types/ValBasisElement.html index 47af371..945f42f 100644 --- a/sonic-weave/types/ValBasisElement.html +++ b/sonic-weave/types/ValBasisElement.html @@ -1 +1 @@ -ValBasisElement | sonic-weave

    Type alias ValBasisElement

    ValBasisElement: WartBasisElement | "s" | "Hz" | "hz"

    Generated using TypeDoc

    \ No newline at end of file +ValBasisElement | sonic-weave

    Type alias ValBasisElement

    ValBasisElement: WartBasisElement | "s" | "Hz" | "hz"
    \ No newline at end of file diff --git a/sonic-weave/types/ValBasisLiteral.html b/sonic-weave/types/ValBasisLiteral.html new file mode 100644 index 0000000..33bf88d --- /dev/null +++ b/sonic-weave/types/ValBasisLiteral.html @@ -0,0 +1 @@ +ValBasisLiteral | sonic-weave

    Type alias ValBasisLiteral

    ValBasisLiteral: {
        basis: ValBasisElement[] | Identifier;
        type: "ValBasisLiteral";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/ValLiteral.html b/sonic-weave/types/ValLiteral.html index efe4b7e..372d101 100644 --- a/sonic-weave/types/ValLiteral.html +++ b/sonic-weave/types/ValLiteral.html @@ -1 +1 @@ -ValLiteral | sonic-weave

    Type alias ValLiteral

    ValLiteral: {
        basis: ValBasisElement[];
        components: VectorComponent[];
        type: "ValLiteral";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +ValLiteral | sonic-weave

    Type alias ValLiteral

    ValLiteral: {
        basis: ValBasisElement[] | Identifier;
        components: VectorComponent[];
        type: "ValLiteral";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/VariableDeclaration.html b/sonic-weave/types/VariableDeclaration.html index 153a34b..ad7b571 100644 --- a/sonic-weave/types/VariableDeclaration.html +++ b/sonic-weave/types/VariableDeclaration.html @@ -1 +1 @@ -VariableDeclaration | sonic-weave

    Type alias VariableDeclaration

    VariableDeclaration: {
        mutable: boolean;
        parameters: Parameter | Parameters_;
        type: "VariableDeclaration";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +VariableDeclaration | sonic-weave

    Type alias VariableDeclaration

    VariableDeclaration: {
        mutable: boolean;
        parameters: Parameter | Parameters_;
        type: "VariableDeclaration";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/VectorComponent.html b/sonic-weave/types/VectorComponent.html index 439ea9a..3415bb6 100644 --- a/sonic-weave/types/VectorComponent.html +++ b/sonic-weave/types/VectorComponent.html @@ -1 +1 @@ -VectorComponent | sonic-weave

    Type alias VectorComponent

    VectorComponent: {
        exponent: number | null;
        left: number;
        right: string;
        separator?: "/" | ".";
        sign: Sign;
    }

    Type declaration

    • exponent: number | null
    • left: number
    • right: string
    • Optional separator?: "/" | "."
    • sign: Sign

    Generated using TypeDoc

    \ No newline at end of file +VectorComponent | sonic-weave

    Type alias VectorComponent

    VectorComponent: {
        exponent: number | null;
        left: number;
        right: string;
        separator?: "/" | ".";
        sign: Sign;
    }

    Type declaration

    • exponent: number | null
    • left: number
    • right: string
    • Optional separator?: "/" | "."
    • sign: Sign
    \ No newline at end of file diff --git a/sonic-weave/types/VisitorContext.html b/sonic-weave/types/VisitorContext.html index 752ee0b..86a044d 100644 --- a/sonic-weave/types/VisitorContext.html +++ b/sonic-weave/types/VisitorContext.html @@ -1,2 +1,2 @@ VisitorContext | sonic-weave

    Type alias VisitorContext

    VisitorContext: Map<string, SonicWeaveValue>

    Local context within a SonicWeave code block or a function.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/VulgarFraction.html b/sonic-weave/types/VulgarFraction.html index ec5d279..8114f7e 100644 --- a/sonic-weave/types/VulgarFraction.html +++ b/sonic-weave/types/VulgarFraction.html @@ -1,2 +1,2 @@ VulgarFraction | sonic-weave

    Type alias VulgarFraction

    VulgarFraction: "" | "¼" | "q" | "½" | "s" | "¾" | "Q" | "⅐" | "⅑" | "⅒" | "⅓" | "⅔" | "⅕" | "⅖" | "⅗" | "⅘" | "⅙" | "⅚" | "⅛" | "⅜" | "⅝" | "⅞"

    Fractional modifier for interval qualities and accidentals.

    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sonic-weave/types/WartBasisElement.html b/sonic-weave/types/WartBasisElement.html index 5cd8f20..43fd058 100644 --- a/sonic-weave/types/WartBasisElement.html +++ b/sonic-weave/types/WartBasisElement.html @@ -1 +1 @@ -WartBasisElement | sonic-weave

    Type alias WartBasisElement

    WartBasisElement: BasisFraction | ""

    Generated using TypeDoc

    \ No newline at end of file +WartBasisElement | sonic-weave

    Type alias WartBasisElement

    WartBasisElement: BasisFraction | ""
    \ No newline at end of file diff --git a/sonic-weave/types/WartsLiteral.html b/sonic-weave/types/WartsLiteral.html index 07c5299..676a850 100644 --- a/sonic-weave/types/WartsLiteral.html +++ b/sonic-weave/types/WartsLiteral.html @@ -1 +1 @@ -WartsLiteral | sonic-weave

    Type alias WartsLiteral

    WartsLiteral: {
        basis: WartBasisElement[];
        divisions: number;
        equave: string;
        type: "WartsLiteral";
        warts: string[];
    }

    Type declaration

    • basis: WartBasisElement[]
    • divisions: number
    • equave: string
    • type: "WartsLiteral"
    • warts: string[]

    Generated using TypeDoc

    \ No newline at end of file +WartsLiteral | sonic-weave

    Type alias WartsLiteral

    WartsLiteral: {
        basis: WartBasisElement[] | Identifier;
        divisions: number;
        equave: string;
        type: "WartsLiteral";
        warts: string[];
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/types/WhileStatement.html b/sonic-weave/types/WhileStatement.html index cd7b179..40f5350 100644 --- a/sonic-weave/types/WhileStatement.html +++ b/sonic-weave/types/WhileStatement.html @@ -1 +1 @@ -WhileStatement | sonic-weave

    Type alias WhileStatement

    WhileStatement: {
        body: Statement;
        tail: null | Statement;
        test: Expression;
        type: "WhileStatement";
    }

    Type declaration

    Generated using TypeDoc

    \ No newline at end of file +WhileStatement | sonic-weave

    Type alias WhileStatement

    WhileStatement: {
        body: Statement;
        tail: null | Statement;
        test: Expression;
        type: "WhileStatement";
    }

    Type declaration

    \ No newline at end of file diff --git a/sonic-weave/variables/MODULE_DOCSTRING.html b/sonic-weave/variables/MODULE_DOCSTRING.html index 1ffef54..2f2d56c 100644 --- a/sonic-weave/variables/MODULE_DOCSTRING.html +++ b/sonic-weave/variables/MODULE_DOCSTRING.html @@ -1 +1 @@ -MODULE_DOCSTRING | sonic-weave

    Variable MODULE_DOCSTRINGConst

    MODULE_DOCSTRING: typeof MODULE_DOCSTRING = ...

    Generated using TypeDoc

    \ No newline at end of file +MODULE_DOCSTRING | sonic-weave

    Variable MODULE_DOCSTRINGConst

    MODULE_DOCSTRING: typeof MODULE_DOCSTRING = ...
    \ No newline at end of file diff --git a/sw-synth/assets/icons.js b/sw-synth/assets/icons.js new file mode 100644 index 0000000..b79c9e8 --- /dev/null +++ b/sw-synth/assets/icons.js @@ -0,0 +1,15 @@ +(function(svg) { + svg.innerHTML = ``; + svg.style.display = 'none'; + if (location.protocol === 'file:') { + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateUseElements); + else updateUseElements() + function updateUseElements() { + document.querySelectorAll('use').forEach(el => { + if (el.getAttribute('href').includes('#icon-')) { + el.setAttribute('href', el.getAttribute('href').replace(/.*#/, '#')); + } + }); + } + } +})(document.body.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))) \ No newline at end of file diff --git a/sw-synth/assets/icons.svg b/sw-synth/assets/icons.svg new file mode 100644 index 0000000..7dead61 --- /dev/null +++ b/sw-synth/assets/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sw-synth/assets/main.js b/sw-synth/assets/main.js index d0aa8d5..d6f1388 100644 --- a/sw-synth/assets/main.js +++ b/sw-synth/assets/main.js @@ -1,8 +1,8 @@ "use strict"; -"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +"use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(console.log("Show page"),document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){console.log("Scorlling");let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ve(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ne(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ve(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ne(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/sw-synth/assets/style.css b/sw-synth/assets/style.css index 07a385b..778b949 100644 --- a/sw-synth/assets/style.css +++ b/sw-synth/assets/style.css @@ -29,7 +29,7 @@ --light-color-ts-constructor-signature: var(--light-color-ts-constructor); --light-color-ts-parameter: var(--light-color-ts-variable); /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); + --light-color-ts-type-parameter: #a55c0e; --light-color-ts-accessor: var(--light-color-ts-property); --light-color-ts-get-signature: var(--light-color-ts-accessor); --light-color-ts-set-signature: var(--light-color-ts-accessor); @@ -69,7 +69,7 @@ --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); --dark-color-ts-parameter: var(--dark-color-ts-variable); /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); + --dark-color-ts-type-parameter: #e07d13; --dark-color-ts-accessor: var(--dark-color-ts-property); --dark-color-ts-get-signature: var(--dark-color-ts-accessor); --dark-color-ts-set-signature: var(--dark-color-ts-accessor); @@ -266,12 +266,12 @@ h6 { line-height: 1.2; } -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { +h1 > a:not(.link), +h2 > a:not(.link), +h3 > a:not(.link), +h4 > a:not(.link), +h5 > a:not(.link), +h6 > a:not(.link) { text-decoration: none; color: var(--color-text); } @@ -327,17 +327,14 @@ dd { } /* Footer */ -.tsd-generator { +footer { border-top: 1px solid var(--color-accent); padding-top: 1rem; padding-bottom: 1rem; max-height: 3.5rem; } - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; +.tsd-generator { + margin: 0 1em; } .container-main { @@ -405,7 +402,8 @@ dd { } body { background: var(--color-background); - font-family: "Segoe UI", sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; color: var(--color-text); } @@ -649,6 +647,28 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { font-weight: bold; } +.tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); +} +.tsd-full-hierarchy, +.tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; +} +.tsd-full-hierarchy ul { + padding-left: 1.5rem; +} +.tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} + .tsd-panel-group.tsd-index-group { margin-bottom: 0; } @@ -714,12 +734,15 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } .tsd-navigation > a, .tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); + width: calc(100% - 0.25rem); + display: flex; + align-items: center; } .tsd-navigation a, .tsd-navigation summary > span, .tsd-page-navigation a { - display: inline-flex; + display: flex; + width: calc(100% - 0.25rem); align-items: center; padding: 0.25rem; color: var(--color-text); @@ -759,11 +782,6 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-left: -1.5rem; } -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} - .tsd-page-navigation ul { padding-left: 1.75rem; } diff --git a/sw-synth/classes/AperiodicSynth.html b/sw-synth/classes/AperiodicSynth.html index e19dfff..151d7be 100644 --- a/sw-synth/classes/AperiodicSynth.html +++ b/sw-synth/classes/AperiodicSynth.html @@ -1,19 +1,19 @@ -AperiodicSynth | sw-synth

    Class AperiodicSynth

    Web audio synth of finite polyphony that supports inharmonic timbres.

    -

    Hierarchy

    Constructors

    Properties

    audioContext: BaseAudioContext
    destination: AudioNode
    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    voiceParams?: AperiodicVoiceParams
    voices: AperiodicVoice[]

    Accessors

    • get maxPolyphony(): number
    • Returns number

    • set maxPolyphony(value): void
    • Parameters

      • value: number

      Returns void

    Methods

    \ No newline at end of file diff --git a/sw-synth/classes/AperiodicVoice.html b/sw-synth/classes/AperiodicVoice.html index 9222f8a..7fd5289 100644 --- a/sw-synth/classes/AperiodicVoice.html +++ b/sw-synth/classes/AperiodicVoice.html @@ -1,14 +1,14 @@ -AperiodicVoice | sw-synth

    Class AperiodicVoice

    Oscillator with ADSR envelope. +AperiodicVoice | sw-synth

    Class AperiodicVoice

    Oscillator with ADSR envelope. Represents a single "channel" of polyphony. Should be reused for multiple notes.

    -

    Hierarchy

    Constructors

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    oscillator: AperiodicOscillator
    voiceId: number

    Methods

    Generated using TypeDoc

    \ No newline at end of file +

    Hierarchy (view full)

    Constructors

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    oscillator: AperiodicOscillator
    voiceId: number

    Methods

    \ No newline at end of file diff --git a/sw-synth/classes/AperiodicWave.html b/sw-synth/classes/AperiodicWave.html index 517e2ab..a030fc3 100644 --- a/sw-synth/classes/AperiodicWave.html +++ b/sw-synth/classes/AperiodicWave.html @@ -1,11 +1,11 @@ -AperiodicWave | sw-synth

    Class AperiodicWave

    The AperiodicWave interface defines an aperiodic waveform that can be used to shape the output of an AperiodicOscillator.

    -

    Constructors

    Properties

    Constructors

    • Allocate voice detunings to approximate the given inharmonic spectrum.

      -

      Parameters

      • context: BaseAudioContext

        A BaseAudioContext representing the audio context you want the aperiodic wave to be associated with.

        -
      • spectrum: number[]

        Partial ratios ordered by priority.

        -
      • amplitudes: number[]

        Partial amplitudes.

        -
      • maxNumberOfVoices: number

        Maximum number of voices to allocate.

        -
      • tolerance: number

        Largest acceptable error in cents.

        -

      Returns AperiodicWave

    Properties

    detunings: number[]
    periodicWaves: PeriodicWave[]

    Generated using TypeDoc

    \ No newline at end of file +AperiodicWave | sw-synth

    Class AperiodicWave

    The AperiodicWave interface defines an aperiodic waveform that can be used to shape the output of an AperiodicOscillator.

    +

    Constructors

    Properties

    Constructors

    • Allocate voice detunings to approximate the given inharmonic spectrum.

      +

      Parameters

      • context: BaseAudioContext

        A BaseAudioContext representing the audio context you want the aperiodic wave to be associated with.

        +
      • spectrum: number[]

        Partial ratios ordered by priority.

        +
      • amplitudes: number[]

        Partial amplitudes.

        +
      • maxNumberOfVoices: number

        Maximum number of voices to allocate.

        +
      • tolerance: number

        Largest acceptable error in cents.

        +

      Returns AperiodicWave

    Properties

    detunings: number[]
    periodicWaves: PeriodicWave[]
    \ No newline at end of file diff --git a/sw-synth/classes/BufferSynth.html b/sw-synth/classes/BufferSynth.html index 3b9d202..527be05 100644 --- a/sw-synth/classes/BufferSynth.html +++ b/sw-synth/classes/BufferSynth.html @@ -1,19 +1,19 @@ -BufferSynth | sw-synth

    Class BufferSynth

    Web audio synth of finite polyphony with user-provided audio buffers.

    -

    Hierarchy

    Constructors

    • Parameters

      • audioContext: BaseAudioContext
      • destination: AudioNode
      • Optional log: ((msg) => void)
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      Returns BufferSynth

    Properties

    audioContext: BaseAudioContext
    destination: AudioNode
    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    voiceParams?: BufferVoiceParams
    voices: BufferVoice[]

    Accessors

    • get maxPolyphony(): number
    • Returns number

    • set maxPolyphony(value): void
    • Parameters

      • value: number

      Returns void

    Methods

    \ No newline at end of file diff --git a/sw-synth/classes/BufferVoice.html b/sw-synth/classes/BufferVoice.html index 8b32efe..5a193bc 100644 --- a/sw-synth/classes/BufferVoice.html +++ b/sw-synth/classes/BufferVoice.html @@ -1,14 +1,14 @@ -BufferVoice | sw-synth

    Class BufferVoice

    Oscillator with ADSR envelope. +BufferVoice | sw-synth

    Class BufferVoice

    Oscillator with ADSR envelope. Represents a single "channel" of polyphony. Should be reused for multiple notes.

    -

    Hierarchy

    Constructors

    Properties

    Methods

    Constructors

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    node?: AudioBufferSourceNode
    noteId: number
    voiceId: number

    Methods

    Generated using TypeDoc

    \ No newline at end of file +

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    node?: AudioBufferSourceNode
    noteId: number
    voiceId: number

    Methods

    \ No newline at end of file diff --git a/sw-synth/classes/OscillatorVoice.html b/sw-synth/classes/OscillatorVoice.html index 87e1555..18820b5 100644 --- a/sw-synth/classes/OscillatorVoice.html +++ b/sw-synth/classes/OscillatorVoice.html @@ -1,14 +1,14 @@ -OscillatorVoice | sw-synth

    Class OscillatorVoice

    Oscillator with ADSR envelope. +OscillatorVoice | sw-synth

    Class OscillatorVoice

    Oscillator with ADSR envelope. Represents a single "channel" of polyphony. Should be reused for multiple notes.

    -

    Hierarchy

    Constructors

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    oscillator: OscillatorNode
    voiceId: number

    Methods

    Generated using TypeDoc

    \ No newline at end of file +

    Hierarchy (view full)

    Constructors

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    oscillator: OscillatorNode
    voiceId: number

    Methods

    \ No newline at end of file diff --git a/sw-synth/classes/OscillatorVoiceBase.html b/sw-synth/classes/OscillatorVoiceBase.html index 0789db5..347b411 100644 --- a/sw-synth/classes/OscillatorVoiceBase.html +++ b/sw-synth/classes/OscillatorVoiceBase.html @@ -1,14 +1,14 @@ -OscillatorVoiceBase | sw-synth

    Class OscillatorVoiceBase

    Oscillator with ADSR envelope. +OscillatorVoiceBase | sw-synth

    Class OscillatorVoiceBase

    Oscillator with ADSR envelope. Represents a single "channel" of polyphony. Should be reused for multiple notes.

    -

    Hierarchy

    Constructors

    • Parameters

      • context: BaseAudioContext
      • destination: AudioNode
      • log: ((msg) => void)
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      • oscillatorClass: {
            prototype: OscillatorNode;
            new (context, options?): OscillatorNode;
        }
          • new (context, options?): OscillatorNode
          • Parameters

            • context: BaseAudioContext
            • Optional options: OscillatorOptions

            Returns OscillatorNode

        • prototype: OscillatorNode

      Returns OscillatorVoiceBase

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    oscillator: OscillatorNode
    voiceId: number

    Methods

    Generated using TypeDoc

    \ No newline at end of file +

    Hierarchy (view full)

    Constructors

    • Parameters

      • context: BaseAudioContext
      • destination: AudioNode
      • log: ((msg) => void)
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      • oscillatorClass: {
            prototype: OscillatorNode;
            new (context, options?): OscillatorNode;
        }
          • new (context, options?): OscillatorNode
          • Parameters

            • context: BaseAudioContext
            • Optional options: OscillatorOptions

            Returns OscillatorNode

        • prototype: OscillatorNode

      Returns OscillatorVoiceBase

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    oscillator: OscillatorNode
    voiceId: number

    Methods

    \ No newline at end of file diff --git a/sw-synth/classes/Synth.html b/sw-synth/classes/Synth.html index 4db8059..c7f93eb 100644 --- a/sw-synth/classes/Synth.html +++ b/sw-synth/classes/Synth.html @@ -1,19 +1,19 @@ -Synth | sw-synth

    Class Synth

    Simple web audio synth of finite polyphony.

    -

    Hierarchy

    Constructors

    • Parameters

      • audioContext: BaseAudioContext
      • destination: AudioNode
      • Optional log: ((msg) => void)
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      Returns Synth

    Properties

    audioContext: BaseAudioContext
    destination: AudioNode
    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    voiceParams?: VoiceBaseParams
    voices: VoiceBase[]

    Accessors

    • get maxPolyphony(): number
    • Returns number

    • set maxPolyphony(value): void
    • Parameters

      • value: number

      Returns void

    Methods

    • Trigger panic and release all notes.

      -

      Returns void

    • Parameters

      • maxPolyphony: number

      Returns void

    \ No newline at end of file diff --git a/sw-synth/classes/UnisonSynth.html b/sw-synth/classes/UnisonSynth.html index 22e2108..06e9fd3 100644 --- a/sw-synth/classes/UnisonSynth.html +++ b/sw-synth/classes/UnisonSynth.html @@ -1,19 +1,19 @@ -UnisonSynth | sw-synth

    Class UnisonSynth

    Web audio synth of finite polyphony where the voices are stacked in unison.

    -

    Hierarchy

    Constructors

    • Parameters

      • audioContext: BaseAudioContext
      • destination: AudioNode
      • Optional log: ((msg) => void)
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      Returns UnisonSynth

    Properties

    audioContext: BaseAudioContext
    destination: AudioNode
    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    voiceParams?: UnisonVoiceParams
    voices: UnisonVoice[]

    Accessors

    • get maxPolyphony(): number
    • Returns number

    • set maxPolyphony(value): void
    • Parameters

      • value: number

      Returns void

    Methods

    \ No newline at end of file diff --git a/sw-synth/classes/UnisonVoice.html b/sw-synth/classes/UnisonVoice.html index a6b4663..f7acd34 100644 --- a/sw-synth/classes/UnisonVoice.html +++ b/sw-synth/classes/UnisonVoice.html @@ -1,14 +1,14 @@ -UnisonVoice | sw-synth

    Class UnisonVoice

    Oscillator with ADSR envelope. +UnisonVoice | sw-synth

    Class UnisonVoice

    Oscillator with ADSR envelope. Represents a single "channel" of polyphony. Should be reused for multiple notes.

    -

    Hierarchy

    Constructors

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    oscillator: UnisonOscillator
    voiceId: number

    Methods

    Generated using TypeDoc

    \ No newline at end of file +

    Hierarchy (view full)

    Constructors

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    oscillator: UnisonOscillator
    voiceId: number

    Methods

    \ No newline at end of file diff --git a/sw-synth/classes/VoiceBase.html b/sw-synth/classes/VoiceBase.html index a425293..8265949 100644 --- a/sw-synth/classes/VoiceBase.html +++ b/sw-synth/classes/VoiceBase.html @@ -1,13 +1,13 @@ -VoiceBase | sw-synth

    Class VoiceBase

    Oscillator with ADSR envelope. +VoiceBase | sw-synth

    Class VoiceBase

    Oscillator with ADSR envelope. Represents a single "channel" of polyphony. Should be reused for multiple notes.

    -

    Hierarchy

    Constructors

    Properties

    Methods

    Constructors

    • Parameters

      • context: BaseAudioContext
      • destination: AudioNode
      • log: ((msg) => void)
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      Returns VoiceBase

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    voiceId: number

    Methods

    • Parameters

      Returns (() => void)

        • (): void
        • Returns void

    Generated using TypeDoc

    \ No newline at end of file +

    Hierarchy (view full)

    Constructors

    Properties

    Methods

    Constructors

    • Parameters

      • context: BaseAudioContext
      • destination: AudioNode
      • log: ((msg) => void)
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      Returns VoiceBase

    Properties

    age: number
    context: BaseAudioContext
    envelope: GainNode
    lastNoteOff?: (() => void)

    Type declaration

      • (): void
      • Returns void

    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteId: number
    voiceId: number

    Methods

    • Parameters

      Returns (() => void)

        • (): void
        • Returns void

    \ No newline at end of file diff --git a/sw-synth/functions/defaultParams.html b/sw-synth/functions/defaultParams.html index a1707c5..11cdbd9 100644 --- a/sw-synth/functions/defaultParams.html +++ b/sw-synth/functions/defaultParams.html @@ -1 +1 @@ -defaultParams | sw-synth

    Generated using TypeDoc

    \ No newline at end of file +defaultParams | sw-synth
    \ No newline at end of file diff --git a/sw-synth/functions/defaultUnisonParams.html b/sw-synth/functions/defaultUnisonParams.html index ec11d66..18beb07 100644 --- a/sw-synth/functions/defaultUnisonParams.html +++ b/sw-synth/functions/defaultUnisonParams.html @@ -1 +1 @@ -defaultUnisonParams | sw-synth

    Generated using TypeDoc

    \ No newline at end of file +defaultUnisonParams | sw-synth

    Function defaultUnisonParams

    \ No newline at end of file diff --git a/sw-synth/hierarchy.html b/sw-synth/hierarchy.html new file mode 100644 index 0000000..ff97b67 --- /dev/null +++ b/sw-synth/hierarchy.html @@ -0,0 +1 @@ +sw-synth
    \ No newline at end of file diff --git a/sw-synth/index.html b/sw-synth/index.html index 223d093..7885b65 100644 --- a/sw-synth/index.html +++ b/sw-synth/index.html @@ -1,4 +1,4 @@ -sw-synth

    sw-synth

    sw-synth

    Lightweight sound synthesizer designed for real-time user interaction using the Web Audio API

    +sw-synth

    sw-synth

    sw-synth

    Lightweight sound synthesizer designed for real-time user interaction using the Web Audio API

    Example

    const context = new AudioContext({latencyHint: 'interactive'});

    const synth = new Synth(context, context.destination);
    synth.maxPolyphony = 6;
    synth.voiceParams = defaultParams();

    const noteOffs = new Map<string, () => void>();
    window.addEventListener('keydown', (event: KeyboardEvent) => {
    const pitch = parseInt(event.key, 36) % 24;
    const frequency = 440 * 2 ** (pitch / 12);
    const velocity = 0.2;
    noteOffs.set(event.key, synth.noteOn(frequency, velocity));
    });
    window.addEventListener('keyup', (event: KeyboardEvent) => {
    if (noteOffs.has(event.key)) {
    noteOffs.get(event.key)!();
    }
    });

    Installation

    npm i
    @@ -7,4 +7,4 @@
     

    To generate documentation locally run:

    npm run doc
     
    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/sw-synth/interfaces/AperiodicVoiceParams.html b/sw-synth/interfaces/AperiodicVoiceParams.html index 06d6a23..779ee50 100644 --- a/sw-synth/interfaces/AperiodicVoiceParams.html +++ b/sw-synth/interfaces/AperiodicVoiceParams.html @@ -1,14 +1,14 @@ -AperiodicVoiceParams | sw-synth

    Interface AperiodicVoiceParams

    Parameters for the inharmonic timbre and ADSR of the synth. See aperiodic-oscillator documentation for AperiodicWave.

    -
    interface AperiodicVoiceParams {
        aperiodicWave: AperiodicWave;
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        releaseTime: number;
        sustainLevel: number;
    }

    Hierarchy

    Properties

    aperiodicWave: AperiodicWave

    AperiodicWave representing an inharmonic timbre.

    -
    attackTime: number

    Attack time in seconds.

    -
    audioDelay: number

    Audio delay in seconds. Increase on Firefox to reduce pops.

    -
    decayTime: number

    Decay time constant (exponential decay from 1 to sustainLevel).

    -
    releaseTime: number

    Release time constant (exponential decay from sustainLevel to 0).

    -
    sustainLevel: number

    Steady state amplitude.

    -

    Generated using TypeDoc

    \ No newline at end of file +AperiodicVoiceParams | sw-synth

    Interface AperiodicVoiceParams

    Parameters for the inharmonic timbre and ADSR of the synth. See aperiodic-oscillator documentation for AperiodicWave.

    +
    interface AperiodicVoiceParams {
        aperiodicWave: AperiodicWave;
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        releaseTime: number;
        sustainLevel: number;
    }

    Hierarchy (view full)

    Properties

    aperiodicWave: AperiodicWave

    AperiodicWave representing an inharmonic timbre.

    +
    attackTime: number

    Attack time in seconds.

    +
    audioDelay: number

    Audio delay in seconds. Increase on Firefox to reduce pops.

    +
    decayTime: number

    Decay time constant (exponential decay from 1 to sustainLevel).

    +
    releaseTime: number

    Release time constant (exponential decay from sustainLevel to 0).

    +
    sustainLevel: number

    Steady state amplitude.

    +
    \ No newline at end of file diff --git a/sw-synth/interfaces/BufferVoiceParams.html b/sw-synth/interfaces/BufferVoiceParams.html index c991d13..dad21d5 100644 --- a/sw-synth/interfaces/BufferVoiceParams.html +++ b/sw-synth/interfaces/BufferVoiceParams.html @@ -1,14 +1,14 @@ -BufferVoiceParams | sw-synth

    Interface BufferVoiceParams

    Parameters for the audio buffers of the synth.

    -
    interface BufferVoiceParams {
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        factory: BufferFactory;
        releaseTime: number;
        sustainLevel: number;
    }

    Hierarchy

    Properties

    attackTime: number

    Attack time in seconds.

    -
    audioDelay: number

    Audio delay in seconds. Increase on Firefox to reduce pops.

    -
    decayTime: number

    Decay time constant (exponential decay from 1 to sustainLevel).

    -
    factory: BufferFactory

    A function that returns unstarted AudioBufferSourceNode when queried with context, frequency and velocity.

    -
    releaseTime: number

    Release time constant (exponential decay from sustainLevel to 0).

    -
    sustainLevel: number

    Steady state amplitude.

    -

    Generated using TypeDoc

    \ No newline at end of file +BufferVoiceParams | sw-synth

    Interface BufferVoiceParams

    Parameters for the audio buffers of the synth.

    +
    interface BufferVoiceParams {
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        factory: BufferFactory;
        releaseTime: number;
        sustainLevel: number;
    }

    Hierarchy (view full)

    Properties

    attackTime: number

    Attack time in seconds.

    +
    audioDelay: number

    Audio delay in seconds. Increase on Firefox to reduce pops.

    +
    decayTime: number

    Decay time constant (exponential decay from 1 to sustainLevel).

    +
    factory: BufferFactory

    A function that returns unstarted AudioBufferSourceNode when queried with context, frequency and velocity.

    +
    releaseTime: number

    Release time constant (exponential decay from sustainLevel to 0).

    +
    sustainLevel: number

    Steady state amplitude.

    +
    \ No newline at end of file diff --git a/sw-synth/interfaces/OscillatorVoiceParams.html b/sw-synth/interfaces/OscillatorVoiceParams.html index 44524e0..60d71f9 100644 --- a/sw-synth/interfaces/OscillatorVoiceParams.html +++ b/sw-synth/interfaces/OscillatorVoiceParams.html @@ -1,16 +1,16 @@ -OscillatorVoiceParams | sw-synth

    Interface OscillatorVoiceParams

    Parameters for the timbre and ADSR envelope of the synth.

    -
    interface OscillatorVoiceParams {
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        periodicWave?: PeriodicWave;
        releaseTime: number;
        sustainLevel: number;
        type: OscillatorType;
    }

    Hierarchy

    Properties

    attackTime: number

    Attack time in seconds.

    -
    audioDelay: number

    Audio delay in seconds. Increase on Firefox to reduce pops.

    -
    decayTime: number

    Decay time constant (exponential decay from 1 to sustainLevel).

    -
    periodicWave?: PeriodicWave

    Custom waveform.

    -
    releaseTime: number

    Release time constant (exponential decay from sustainLevel to 0).

    -
    sustainLevel: number

    Steady state amplitude.

    -
    type: OscillatorType

    One of "sine", "sawtooth", "triangle", "square" or "custom" if periodicWave is set.

    -

    Generated using TypeDoc

    \ No newline at end of file +OscillatorVoiceParams | sw-synth

    Interface OscillatorVoiceParams

    Parameters for the timbre and ADSR envelope of the synth.

    +
    interface OscillatorVoiceParams {
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        periodicWave?: PeriodicWave;
        releaseTime: number;
        sustainLevel: number;
        type: OscillatorType;
    }

    Hierarchy (view full)

    Properties

    attackTime: number

    Attack time in seconds.

    +
    audioDelay: number

    Audio delay in seconds. Increase on Firefox to reduce pops.

    +
    decayTime: number

    Decay time constant (exponential decay from 1 to sustainLevel).

    +
    periodicWave?: PeriodicWave

    Custom waveform.

    +
    releaseTime: number

    Release time constant (exponential decay from sustainLevel to 0).

    +
    sustainLevel: number

    Steady state amplitude.

    +
    type: OscillatorType

    One of "sine", "sawtooth", "triangle", "square" or "custom" if periodicWave is set.

    +
    \ No newline at end of file diff --git a/sw-synth/interfaces/UnisonVoiceParams.html b/sw-synth/interfaces/UnisonVoiceParams.html index e8a199d..ce24e45 100644 --- a/sw-synth/interfaces/UnisonVoiceParams.html +++ b/sw-synth/interfaces/UnisonVoiceParams.html @@ -1,20 +1,20 @@ -UnisonVoiceParams | sw-synth

    Interface UnisonVoiceParams

    Parameters for the timbre, ADSR and voice stack of the synth.

    -
    interface UnisonVoiceParams {
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        periodicWave?: PeriodicWave;
        releaseTime: number;
        spread: number;
        stackSize: number;
        sustainLevel: number;
        type: OscillatorType;
    }

    Hierarchy

    Properties

    attackTime: number

    Attack time in seconds.

    -
    audioDelay: number

    Audio delay in seconds. Increase on Firefox to reduce pops.

    -
    decayTime: number

    Decay time constant (exponential decay from 1 to sustainLevel).

    -
    periodicWave?: PeriodicWave

    Custom waveform.

    -
    releaseTime: number

    Release time constant (exponential decay from sustainLevel to 0).

    -
    spread: number

    Spread of voice frequencies in ±Hertz.

    -
    stackSize: number

    Number of voices to play in unison.

    -
    sustainLevel: number

    Steady state amplitude.

    -
    type: OscillatorType

    One of "sine", "sawtooth", "triangle", "square" or "custom" if periodicWave is set.

    -

    Generated using TypeDoc

    \ No newline at end of file +UnisonVoiceParams | sw-synth

    Interface UnisonVoiceParams

    Parameters for the timbre, ADSR and voice stack of the synth.

    +
    interface UnisonVoiceParams {
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        periodicWave?: PeriodicWave;
        releaseTime: number;
        spread: number;
        stackSize: number;
        sustainLevel: number;
        type: OscillatorType;
    }

    Hierarchy (view full)

    Properties

    attackTime: number

    Attack time in seconds.

    +
    audioDelay: number

    Audio delay in seconds. Increase on Firefox to reduce pops.

    +
    decayTime: number

    Decay time constant (exponential decay from 1 to sustainLevel).

    +
    periodicWave?: PeriodicWave

    Custom waveform.

    +
    releaseTime: number

    Release time constant (exponential decay from sustainLevel to 0).

    +
    spread: number

    Spread of voice frequencies in ±Hertz.

    +
    stackSize: number

    Number of voices to play in unison.

    +
    sustainLevel: number

    Steady state amplitude.

    +
    type: OscillatorType

    One of "sine", "sawtooth", "triangle", "square" or "custom" if periodicWave is set.

    +
    \ No newline at end of file diff --git a/sw-synth/modules.html b/sw-synth/modules.html index 394983e..6a85572 100644 --- a/sw-synth/modules.html +++ b/sw-synth/modules.html @@ -1,20 +1,20 @@ -sw-synth

    Generated using TypeDoc

    \ No newline at end of file +sw-synth
    \ No newline at end of file diff --git a/sw-synth/types/BufferFactory.html b/sw-synth/types/BufferFactory.html index 173f38a..931dce9 100644 --- a/sw-synth/types/BufferFactory.html +++ b/sw-synth/types/BufferFactory.html @@ -1 +1 @@ -BufferFactory | sw-synth

    Type alias BufferFactory

    BufferFactory: ((context, frequency, velocity) => AudioBufferSourceNode)

    Type declaration

      • (context, frequency, velocity): AudioBufferSourceNode
      • Parameters

        • context: BaseAudioContext
        • frequency: number
        • velocity: number

        Returns AudioBufferSourceNode

    Generated using TypeDoc

    \ No newline at end of file +BufferFactory | sw-synth

    Type alias BufferFactory

    BufferFactory: ((context, frequency, velocity) => AudioBufferSourceNode)

    Type declaration

      • (context, frequency, velocity): AudioBufferSourceNode
      • Parameters

        • context: BaseAudioContext
        • frequency: number
        • velocity: number

        Returns AudioBufferSourceNode

    \ No newline at end of file diff --git a/sw-synth/types/VoiceBaseParams.html b/sw-synth/types/VoiceBaseParams.html index 231ac05..c2a93f9 100644 --- a/sw-synth/types/VoiceBaseParams.html +++ b/sw-synth/types/VoiceBaseParams.html @@ -1,7 +1,7 @@ -VoiceBaseParams | sw-synth

    Type alias VoiceBaseParams

    VoiceBaseParams: {
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        releaseTime: number;
        sustainLevel: number;
    }

    Parameters for the ADSR envelope of the synth.

    +VoiceBaseParams | sw-synth

    Type alias VoiceBaseParams

    VoiceBaseParams: {
        attackTime: number;
        audioDelay: number;
        decayTime: number;
        releaseTime: number;
        sustainLevel: number;
    }

    Parameters for the ADSR envelope of the synth.

    Type declaration

    • attackTime: number

      Attack time in seconds.

    • audioDelay: number

      Audio delay in seconds. Increase on Firefox to reduce pops.

    • decayTime: number

      Decay time constant (exponential decay from 1 to sustainLevel).

    • releaseTime: number

      Release time constant (exponential decay from sustainLevel to 0).

    • sustainLevel: number

      Steady state amplitude.

      -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/assets/navigation.js b/xen-dev-utils/assets/navigation.js index 7bfe3c6..6f3cf57 100644 --- a/xen-dev-utils/assets/navigation.js +++ b/xen-dev-utils/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WYQVPbMBCF/0vOtJS00JZbCAEykJBJ0nLodBjFlh0NthQkOY3p9L9XtgmWndXK3DJ6733a2PJa8q+/PU13unfeu5Ik0Ezw3lFvQ/TajAQJUYqq473yca3TxMhPjIe985P+t39HB+kF1W6AETHGgOcDKUleAxjXVEYkMIy92AT0T88swDRLV1S6GZaOYUY7TXlIw1EWJCysSTrfGEhTbXE+ff96ctoHrstPkmS0jWqIPtJE8BfRJpSDvuQPrljMaXh4hytIW/fxLsbXj+Pp8nE2H09Gi5q2JZKRVWKITUeT99lG3d1fI5haRRDueLfo43A0XbrzlYxASBBkaZYQbd3eKOPllVTHtdpEnH2xEWEIZsMQC202Sf5AWbzWCkxbOo6RYsdSU+F9GN6xlGkHrW17H/SB6fVISiFdxboD3SaaSZbSLvXXxveCO/8HKNJtsjkJWUASD//VhSGLJqdGz5mDVcsIZMXiwQr8r5WCRrlIGTz5XkPiAWXJTPzpQ/G9hsa5vo8iRfVSXEn6nFEe5DALMHrAaimmBH7mLNkPab0SDijAW6GJYTJI6CWLIipN2TCq5emAU5p4YJUDQyUk3YCEQsCCIjWLg5RmMG/pKIZrxjPojWezWiYEGFKsx9cqhmBbMMu2WEiAzcwM46GZpAFTcLFvKoKgjh1QjWk6PpwgsIgkikX50MTMwtELLbNAZxKszuVF8ZLm42KTx4SEmZbBB1pUPcBRnGXAQPtGshTDt/4CAiFjN/BEq4tcU/ApAWwYVIsUpJhxTwxugpWCROMAXFJmGAtRbVbFlsq46I5gvuFAUGuiJkTGjHdakm43MgVT5RYA4r1KWNgs1aGnE7Y9HtxtF97tO4Cm2SHdoelAUE++up461pQE4CI2w0goTQVYfjGOxYpD11JcsNh0FTBvGzqBzMm0uGJCXtJib8SLnzgZSvinGroeHlv3Y7D3asvig7n3qJaMQbSIwLQZR2NVY/TsDwFbJ+gN3eE4Y+gEmjhul23AQfi7omFAQGZ9KWT5WLIXsqDmXCQ4XE/LgsGEBB/5YhyL6bWzNe81JL4p9CuztIVkLyCk6fChnAfWTZdTammaEx67KylVHwK8FZWCbu0kVeYYCk7+KiFhZ9Qb3K8O90GsZcFg2QoEZCs0BC49M4yEzIaZ0/ym/CIDpW0dw4jWl0CLIIDvgVB4wMM5VSx0dN5DF4LcFsdUpDXYOoL5wxIluPvq2PoB5vd/YnJyKscWAAA=" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA5WZUW/bNhSF/4ufu3XJ1m7rm5O4SdDYMWyvBToMAS1d20REUiUpJ86w/z7KsiNKvrxknhLonPORkinyUvz734GFZzv4NPisWWa5koN3g5LZjbuSFcwYMO+Pys8bKwonP3KZDz6dnf/x37uT9BxsGOBEijGUu6HWbNcCuLSgVyxzjKPYBZx/+OgBJpVYgg4zPJ3CjJ4tyBzyUZUVPG9Jdlc6SFftcX758/ezD+fIc/nKigr6qI6YSmLFtWZiBqYqbAjoe9K5d3d3MeyrJZ06VvJFhYl7OUYL33H6fQbvLvme0DtJ6v9UK6sijwTzxLh/ScPXEvLTd7dh9vUY7+L2+uF2sniYzm7Ho3lL2zLN2bJwxK6jy/u187jvrwlMqxKIcDwt+nA5mizC+UYmICzLKlEVzHov7qqS+ydp3rdqF/HxNx+R52g2z6mQtNxqJk2pDN60b6BAZVnsvgFfb6xBOZ5OY7R65sLd6n2e33HBbYDWt70N+o3bzUhrpUOdDQfSGppqLiCl/63xreDke8AiaY3NWM4zVkT4BxeFrNdBM/pRBVitTECWfD1covfaKGRUKsHxxo8aEc+YVDL0IF5FCgC8mKqnczR/0Mi4tPerlQG7cNM2/KhAZjuchRgjYLNQE4a/tJ4ch/TKjhMKUnl0MVxnBVzx1Qq06zaO6nkScMayCKxxUKiCiRIl1AIVVI+gJeDD5qCRceEGJ9v7cUSrkxg3h8sKW7p9Vs9EAHOgFqtWJRGuTLZKQ34jVzjFM5AgdILN++V/N8S3aIhvqZDCW1JkS8pONWQcX1xblUBAYIvQYrqOn84o2A7tiLtMhFasMHy1u3RO96rYudVVZiuNkkJeEq9hd1tvnbjSONMzxEDzZtYLdM4zUKDX0niIF1UdQxLoCh+nHUMaCB+GHUMSaIQPhY4hCVTvi2hS7UhC3Ur0xewYkkB34MafZsc/asvMC03GEklNjZkNlN59TyrOzZ5RnPO8AfeQwntIBRpX7ETGztGVjKyWcWC1TMPV29lwsYkak8ATpSMDvXYkoebxRzhPfn7z2MObJz65BbUTRGwk9FB9LtTla1GKYxFjGnhszcXOAlobITYKahX+y7rrkRheOTcKEV1n6JThLlMhsG5h3YJe1yU1mu84KFRg0l7TU/WGmTHTay6TioGwm2oCLwg3ZBlYf3ldgw6ssq1KItC1h5MrDjf7zTUabCQq7Cqay0iN3/dEcF9SeF/eAHRlPFF5dh0E6jHWr8fEPoU3VNHtVJGhI95dpkKJhQTmI7AiWDSIWKkgggWCiJUFgli7RXzFFsF1WsRWZ8ElXtvvBSooFP6Y3HUqpvJALdkodDQLBDMy5oqJhbrga7dTwfOeIQk0qUT9eik3cdWfqGT9L03GEvGmLkOria/HMdTnhZ4lBgtXbyKpZhNWoYtIfZ2MNZVC5CsbYkuC3sAzjXOGJNA48HP5BhpEF08dAwFy48sQw8eTo5A5CG6VxPvTs1AwcFt8Y6cFk+gs5+sUJlDpS7q+l3YTLAeOGhEvWe62OZqjo+RVpAAauGBrtP2jRsZd/z7vP7vxlwDEd8RQweOPMuXMY2+aMRm6naMaQ6AjqlHIT2WlriR8B61m6inA8AwEyA240KJ7kOhwCQU6FR4kIhxsN9aqOb5q4bOBnoWCqWILV1yVm/owEX8v+x4Kh5cgdP1hKvR9dpeJkAUpYXezP7TE0r5OYVTvEN4jKOTsHQsPZT4Dw/PAqnjqopDULj/lrLeSsdPeroNAbetDIWIJ8XUC88QLo2T4l/L1E8w//wNtzzs9mSQAAA==" \ No newline at end of file diff --git a/xen-dev-utils/assets/search.js b/xen-dev-utils/assets/search.js index 15f4df4..edb123a 100644 --- a/xen-dev-utils/assets/search.js +++ b/xen-dev-utils/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/xen-dev-utils/classes/Fraction.html b/xen-dev-utils/classes/Fraction.html index 1b017c8..fffbf2d 100644 --- a/xen-dev-utils/classes/Fraction.html +++ b/xen-dev-utils/classes/Fraction.html @@ -12,7 +12,7 @@

    String form

    new Fraction("123.456");  // a simple decimal
    new Fraction("123/456"); // a string fraction
    new Fraction("13e-3"); // scientific notation
    -

    Constructors

    Constructors

    Properties

    Constructors

    Properties

    d: number

    Denominator

    -
    n: number

    Numerator

    -
    s: number

    Sign: +1, 0 or -1

    -

    Methods

    • Calculates the absolute value.

      +

    Constructors

    Properties

    d: number

    Denominator

    +
    n: number

    Numerator

    +
    s: number

    Sign: +1, 0 or -1

    +

    Methods

    • Compare two rational numbers, returns (this - other) which has the correct sign for Array.sort().

      +

      Returns Fraction

    • Compare two rational numbers, returns (this - other) which has the correct sign for Array.sort().

      Examples:

      new Fraction("19.7").compare("98/5") // 0.1
      new Fraction("19.6").compare("98/5") // 0
      new Fraction("19.5").compare("98/5") // -0.1
      -

      Parameters

      Returns number

    • IEEE floats always have a denominator of a power of two. Reduce it out. +

      Parameters

      Returns number

    • IEEE floats always have a denominator of a power of two. Reduce it out. If the process would produce integers too large for the Number type an approximation is used.

      -

      Returns void

    • Check if two rational numbers are divisible (i.e. this is an integer multiple of other)

      Examples:

      new Fraction("7.6").divisible("5/2") // false
      new Fraction("7.5").divisible("5/2") // true
      new Fraction("7/4").divisible("5/2") // false
      -

      Parameters

      Returns boolean

    • Check if two rational numbers are the same

      Examples:

      new Fraction("19.7").equals("98/5") // false
      new Fraction("19.6").equals("98/5") // true
      new Fraction("19.5").equals("98/5") // false
      -

      Parameters

      Returns boolean

    • Calculates the geometric absolute value. Discards sign.

      Examples:

      new Fraction(3, 2).gabs()   // 3/2
      new Fraction(2, 3).gabs() // 2/3
      new Fraction(-1, 2).gabs() // 2/1
      -

      Returns Fraction

    • Calculates the fractional gcd of two rational numbers. (i.e. both this and other is divisible by the result)

      Always returns a non-negative result.

      Example:

      new Fraction(5,8).gcd("3/7")  // 1/56
       
      -

      Parameters

      Returns Fraction

    • Calculate the greatest common radical between two rational numbers if it exists.

      Never returns a subunitary result.

      Treats unity as the identity element: gcr(1, x) = gcr(x, 1) = x

      Examples:

      new Fraction(8).gcr(4)          // 2
      new Fraction(81).gcr(6561) // 9
      new Fraction("1/2").gcr("1/3") // null
      -

      Parameters

      Returns null | Fraction

    • Geometrically reduce a rational number until its absolute value is between 1 and the absolute value of other, i.e. geometric modulo. +

      Parameters

      Returns null | Fraction

    • Geometrically reduce a rational number until its absolute value is between 1 and the absolute value of other, i.e. geometric modulo. Note: Returns a positive result for a negative modulo if the required number of divisions is even.

      Examples:

      new Fraction(5, 1).geoMod(2)        // 5/4
      new Fraction(1, 11).geoMod(3) // 27/11
      new Fraction(1, 11).geoMod("-1/3") // 9/11
      -

      Parameters

      Returns Fraction

    • Rounds a rational number to a power of another rational number.

      Examples:

      new Fraction('5/4').geoRoundTo("9/8")     // 81/64
      new Fraction('5/4').geoRoundTo("1/1") // 1/1

      // handling negative values

      new Fraction('5/4').geoRoundTo("-9/8") // 81/64

      new Fraction('10/7').geoRoundTo("9/8") // 729/512
      new Fraction('10/7').geoRoundTo("-9/8") // 6561/4096

      new Fraction('-5/4').geoRoundTo("9/8") // null

      new Fraction('-5/4').geoRoundTo("-9/8") // -9/8
      -

      Parameters

      Returns null | Fraction

    • Returns the inverse of the fraction, numerator and denominator are exchanged.

      Example:

      new Fraction(-3, 4).inverse()  // -4/3
       
      -

      Returns Fraction

    • Check if the rational number is 1.

      Examples:

      new Fraction(9, 9).isUnity()      // true
      new Fraction("0.01e2").isUnity() // true
      new Fraction(7, 6).isUnity() // false
      -

      Returns boolean

    • Calculates the fractional lcm of two rational numbers. (i.e. the result is divisible by both this and other)

      +

      Returns boolean

    • Calculates the fractional lcm of two rational numbers. (i.e. the result is divisible by both this and other)

      Has the same sign as the product of the rational numbers.

      Example:

      new Fraction(5,8).gcd("3/7")  // 15
       
      -

      Parameters

      Returns Fraction

    • Calculate the least common radicand between two rational numbers if it exists.

      If either of the inputs is unitary returns unity (1).

      Returns a subunitary result if only one of the inputs is subunitary, superunitary otherwise.

      Examples:

      new Fraction(8).lcr(4)          // 64
      new Fraction("1/2").lcr("1/3") // null
      -

      Parameters

      Returns null | Fraction

    • Perform harmonic addition of two rational numbers according to the thin lens equation f⁻¹ = u⁻¹ + v⁻¹.

      Example:

      new Fraction('5/3').lensAdd('3/2')  // 15/19
       
      -

      Parameters

      Returns Fraction

    • Perform harmonic subtraction of two rational numbers u⁻¹ = f⁻¹ - v⁻¹ (rearranged thin lens equation).

      Example:

      new Fraction('15/19').lensSub('3/2')  // 5/3
       
      -

      Parameters

      Returns Fraction

    • Calculate the logarithm of a rational number in the base of another, i.e. logdivision if the result exists as a rational number.

      +

      Parameters

      Returns Fraction

    • Calculate the logarithm of a rational number in the base of another, i.e. logdivision if the result exists as a rational number.

      Examples:

      new Fraction(4).log(2)              // 2
      new Fraction(64,27).log("16/9") // 3/2
      new Fraction(64,27).log("1/1") // null
      new Fraction(64,27).log(7) // null

      new Fraction(64,27).log("-16/9") // null
      new Fraction(-64,27).log("16/9") // null
      new Fraction(-64,27).log("-16/9") // null
      -

      Parameters

      Returns null | Fraction

    • Calculates the mathematical modulo of two rational numbers. Correctly processes signs.

      Examples:

      new Fraction("5/1").mod("3/1")   // (5/1) % (3/1)  = 2/1
      new Fraction("-5/1").mod("3/1") // (-5/1) % (3/1) = (1/1) % (3/1) = 1/1
      -

      Parameters

      Returns Fraction

    • Calculates the computational modulo of two rational numbers - a more precise fmod. Incorrectly processes signs.

      Examples:

      new Fraction("5/1").mod("3/1")   //   (5/1) % (3/1)  = 2/1
      new Fraction("-5/1").mod("3/1") // -((5/1) % (3/1)) = -2/1
      -

      Parameters

      Returns Fraction

    • Calculates the fraction to some rational exponent, if possible.

      Examples:

      new Fraction("1/2").pow(2)      // 1/4
      new Fraction("-1/2").pow(-3) // -8
      new Fraction("9/4").pow("3/2") // 27/8
      new Fraction("2/1").pow("1/2") // null
      -

      Parameters

      Returns null | Fraction

    • Reduce out the common factor between the numerator and denominator.

      -

      Returns void

    • Reduce out the common factor between the numerator and denominator.

      +

      Returns void

    • Rounds a rational number.

      Examples:

      new Fraction("4.'3'").floor()  // 4/1
      new Fraction("4.5").floor() // 5/1
      new Fraction("4.'6'").floor() // 5/1
      -

      Returns Fraction

    • Rounds a rational number to a multiple of another rational number.

      Examples:

      new Fraction("0.'7'").roundTo("1/9")   // 7/9
      new Fraction("0.78").roundTo("1/9") // 7/9
      new Fraction("0.8'3'").roundTo("1/9") // 8/9
      new Fraction("0.85").roundTo("1/9") // 8/9
      -

      Parameters

      Returns Fraction

    • Normalize infinite denominator into 0/1.

      -

      Returns void

    • Normalize infinite denominator into 0/1.

      +

      Returns void

    • Return a convergent of this fraction that is within the given absolute tolerance.

      Parameters

      • epsilon: number = 0.001

        Absolute tolerance for error.

        -

      Returns Fraction

    • Return a convergent of this fraction that is within the given relative tolerance measured in cents.

      +

    Returns Fraction

    • Return a convergent of this fraction that is within the given relative tolerance measured in cents.

      Parameters

      • tolerance: number = 3.5

        Relative tolerance measured in cents.

        -

      Returns Fraction

    • Subtracts two rational numbers.

      +

    Returns Fraction

    • Calculates the square root of the rational number.

      +

      Examples:

      +
      new Fraction("9/4").sqrt() // 3/2
      new Fraction(-1).sqrt() // null +
      +

      Returns null | Fraction

      The positive square root if it exists as a rational number.

      +
    • Returns an array of continued fraction elements.

      Example:

      new Fraction("7/8").toContinued()  // [0, 1, 7]
       
      -

      Returns number[]

    • Returns a string-fraction representation of a Fraction object.

      +

      Returns number[]

    • Returns a string-fraction representation of a Fraction object.

      Example:

      new Fraction("1.'3'").toFraction()  // "4/3"
       
      -

      Returns string

    • Creates a string representation of a fraction with all digits.

      +
    • Creates a string representation of a fraction with all digits.

      Example:

      new Fraction("100.'91823'").toString()  // "100.'91823'"
       
      -

      Returns string

    • Validate that this fraction represents the ratio of two integers.

      -

      Returns void

    • Returns a decimal representation of the fraction.

      +

      Returns string

    • Validate that this fraction represents the ratio of two integers.

      +

      Returns void

    • Returns a decimal representation of the fraction.

      Example:

      new Fraction("100.'91823'").valueOf()  // 100.91823918239183
       
      -

      Returns number

    • Revive a Fraction instance produced by Fraction.toJSON(). Return everything else as is.

      +

      Returns number

    • Revive a Fraction instance produced by Fraction.toJSON(). Return everything else as is.

      Intended usage:

      const data = JSON.parse(serializedData, Fraction.reviver);
       
      @@ -219,4 +225,4 @@
    • value: any

      Property value.

    Returns any

    Deserialized Fraction instance or other data without modifications.

    Throws

    An error if the numerator or denominator exceeds Number.MAX_SAFE_INTEGER.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/classes/FractionSet.html b/xen-dev-utils/classes/FractionSet.html index de98106..ce28f24 100644 --- a/xen-dev-utils/classes/FractionSet.html +++ b/xen-dev-utils/classes/FractionSet.html @@ -1,5 +1,5 @@ FractionSet | xen-dev-utils

    Class FractionSet

    Collection of unique fractions.

    -

    Hierarchy

    Constructors

    Hierarchy

    Constructors

    Properties

    [toStringTag] size [species] @@ -17,14 +17,14 @@

    Returns IterableIterator<Fraction>

    • Returns void

    • Removes the element associated to the value.

      +
    • Returns void

    • Removes the element associated to the value.

      Parameters

      Returns boolean

      A boolean asserting whether an element was successfully removed or not. FractionSet.prototype.has(value) will return false afterwards.

      -
    • Returns an iterable of [v,v] pairs for every value v in the set.

      +
    • Returns an iterable of [v,v] pairs for every value v in the set.

      Returns IterableIterator<[Fraction, Fraction]>

    • Executes a provided function once per each value in the Set object, in insertion order.

      Parameters

      • callbackfn: ((value, value2, set) => void)
      • Optional thisArg: any

      Returns void

    • Check value membership.

      Parameters

      • value: Fraction

        Value to check for membership.

      Returns boolean

      A boolean asserting whether an element is present with the given value in the FractionSet object or not.

      -
    • Despite its name, returns an iterable of the values in the set.

      +
    • Despite its name, returns an iterable of the values in the set.

      Returns IterableIterator<Fraction>

    • Returns an iterable of values in the set.

      Returns IterableIterator<Fraction>

    \ No newline at end of file diff --git a/xen-dev-utils/functions/accumulate.html b/xen-dev-utils/functions/accumulate.html index 67aeebf..3a54f92 100644 --- a/xen-dev-utils/functions/accumulate.html +++ b/xen-dev-utils/functions/accumulate.html @@ -2,4 +2,4 @@

    Parameters

    • target: Monzo

      The monzo to accumulate into.

    • source: Monzo

      The monzo to add.

    Returns Monzo

    The (modified) target monzo.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/add.html b/xen-dev-utils/functions/add.html index b0a757c..0c6b84e 100644 --- a/xen-dev-utils/functions/add.html +++ b/xen-dev-utils/functions/add.html @@ -2,4 +2,4 @@

    Parameters

    • a: Monzo

      The first monzo.

    • b: Monzo

      The second monzo.

    Returns Monzo

    A monzo that represents the product of the two numbers represented by a and b.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/antitranspose.html b/xen-dev-utils/functions/antitranspose.html new file mode 100644 index 0000000..f6dfb15 --- /dev/null +++ b/xen-dev-utils/functions/antitranspose.html @@ -0,0 +1,4 @@ +antitranspose | xen-dev-utils

    Function antitranspose

    • Anti-transpose a 2-D matrix (swap rows and columns along the other diagonal).

      +

      Type Parameters

      • T extends number | bigint

      Parameters

      • matrix: T[][]

        Matrix to antitranspose.

        +

      Returns T[][]

      The antitranspose.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/applyWeights.html b/xen-dev-utils/functions/applyWeights.html index f58abd7..4073dfb 100644 --- a/xen-dev-utils/functions/applyWeights.html +++ b/xen-dev-utils/functions/applyWeights.html @@ -2,4 +2,4 @@

    Parameters

    • monzo: Monzo

      The first monzo.

    • weights: Monzo

      The second monzo. Missing values interpreted as 1 (no change).

    Returns number[]

    The first monzo weighted by the second.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/approximateOddLimit.html b/xen-dev-utils/functions/approximateOddLimit.html index 4598125..68ee2ef 100644 --- a/xen-dev-utils/functions/approximateOddLimit.html +++ b/xen-dev-utils/functions/approximateOddLimit.html @@ -3,4 +3,4 @@

    Parameters

    • cents: number

      Size of the musical interval measured in cents.

    • limit: number

      Maximum odd limit.

    Returns Fraction[]

    All odd limit fractions within 600 cents of the input value sorted by closeness.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/approximateOddLimitWithErrors.html b/xen-dev-utils/functions/approximateOddLimitWithErrors.html index 59b0b55..564f8c4 100644 --- a/xen-dev-utils/functions/approximateOddLimitWithErrors.html +++ b/xen-dev-utils/functions/approximateOddLimitWithErrors.html @@ -3,4 +3,4 @@

    Parameters

    • cents: number

      Size of the musical interval measured in cents.

    • limit: number

      Maximum odd limit.

    Returns [Fraction, number][]

    All odd limit fractions within 600 cents of the input value sorted by closeness with cent offsets attached.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/approximatePrimeLimit.html b/xen-dev-utils/functions/approximatePrimeLimit.html index 24b4699..b537d3f 100644 --- a/xen-dev-utils/functions/approximatePrimeLimit.html +++ b/xen-dev-utils/functions/approximatePrimeLimit.html @@ -5,4 +5,4 @@
  • maxExponent: number
  • maxError: number = 600

    Maximum error from the interval for inclusion in the result.

  • maxLength: number = 100

    Maximum number of approximations to return.

  • Returns Fraction[]

    All valid fractions within maxError cents of the input value sorted by closenesss.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/approximatePrimeLimitWithErrors.html b/xen-dev-utils/functions/approximatePrimeLimitWithErrors.html index f8d75b0..ea24789 100644 --- a/xen-dev-utils/functions/approximatePrimeLimitWithErrors.html +++ b/xen-dev-utils/functions/approximatePrimeLimitWithErrors.html @@ -5,4 +5,4 @@
  • maxExponent: number
  • maxError: number = 600

    Maximum error from the interval for inclusion in the result.

  • maxLength: number = 100

    Maximum number of approximations to return.

  • Returns [Fraction, number][]

    All valid fractions within maxError cents of the input value sorted by closeness with cent offsets attached.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/approximateRadical.html b/xen-dev-utils/functions/approximateRadical.html index 8d6a2d8..843c677 100644 --- a/xen-dev-utils/functions/approximateRadical.html +++ b/xen-dev-utils/functions/approximateRadical.html @@ -3,4 +3,4 @@
  • maxIndex: number = 5

    Maximum index of the radical. 2 means square root, 3 means cube root, etc.

  • maxHeight: number = 50000

    Maximum Benedetti height of the radicand in the approximation.

  • Returns {
        index: number;
        radicand: Fraction;
    }

    Object with index of the radical and the radicand. Result is "index'th root or radicand".

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/arraysEqual.html b/xen-dev-utils/functions/arraysEqual.html index 1f205b3..2ba40e4 100644 --- a/xen-dev-utils/functions/arraysEqual.html +++ b/xen-dev-utils/functions/arraysEqual.html @@ -2,4 +2,4 @@

    Parameters

    Returns boolean

    True if the arrays are component-wise equal.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/bigAbs.html b/xen-dev-utils/functions/bigAbs.html index 994048b..a226dff 100644 --- a/xen-dev-utils/functions/bigAbs.html +++ b/xen-dev-utils/functions/bigAbs.html @@ -1,4 +1,4 @@ bigAbs | xen-dev-utils

    Function bigAbs

    • Calculate the absolute value of a BigInt.

      Parameters

      • n: bigint

        Integer to measure.

      Returns bigint

      Size of the integer as a BigInt.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/binomial.html b/xen-dev-utils/functions/binomial.html index 9e0cd75..5bb7308 100644 --- a/xen-dev-utils/functions/binomial.html +++ b/xen-dev-utils/functions/binomial.html @@ -2,4 +2,4 @@

    Parameters

    • n: number

      Size of the set to choose from.

    • k: number

      Number of elements to choose.

    Returns number

    The number of ways to choose k (unordered) elements from a set size n.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/canonical.html b/xen-dev-utils/functions/canonical.html new file mode 100644 index 0000000..e422297 --- /dev/null +++ b/xen-dev-utils/functions/canonical.html @@ -0,0 +1,4 @@ +canonical | xen-dev-utils

    Function canonical

    • Compute the canonical form of the input.

      +

      Parameters

      • M: number[][]

        Input maps.

        +

      Returns number[][]

      Defactored Hermite normal form or the antitranspose sandwich for commas bases.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/ceilPow2.html b/xen-dev-utils/functions/ceilPow2.html index 8cc9c04..a73f44a 100644 --- a/xen-dev-utils/functions/ceilPow2.html +++ b/xen-dev-utils/functions/ceilPow2.html @@ -1,4 +1,4 @@ ceilPow2 | xen-dev-utils

    Function ceilPow2

    • Calculate the smallest power of two greater or equal to the input value.

      Parameters

      • x: number

        Value to compare to.

      Returns number

      Smallest 2**n such that x <= 2**n.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/centOffsetToFrequency.html b/xen-dev-utils/functions/centOffsetToFrequency.html index 89edb12..f6f3480 100644 --- a/xen-dev-utils/functions/centOffsetToFrequency.html +++ b/xen-dev-utils/functions/centOffsetToFrequency.html @@ -4,4 +4,4 @@

    Parameters

    • offset: number

      Musical pitch in additive representation as a cents offset from reference.

    • baseFrequency: number = 440

      Reference frequency.

    Returns number

    Musical frequency.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/centsToNats.html b/xen-dev-utils/functions/centsToNats.html index 549b932..b19e23b 100644 --- a/xen-dev-utils/functions/centsToNats.html +++ b/xen-dev-utils/functions/centsToNats.html @@ -1,4 +1,4 @@ centsToNats | xen-dev-utils

    Function centsToNats

    • Convert cents to natural units.

      Parameters

      • cents: number

        Musical interval in cents.

      Returns number

      Musical interval in natural units.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/centsToValue.html b/xen-dev-utils/functions/centsToValue.html index b7b8f86..6ad9ed3 100644 --- a/xen-dev-utils/functions/centsToValue.html +++ b/xen-dev-utils/functions/centsToValue.html @@ -3,4 +3,4 @@

    Parameters

    • cents: number

      Musical interval in additive representation measured in cents.

    Returns number

    Musical interval in multiplicative representation.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/circleDifference.html b/xen-dev-utils/functions/circleDifference.html index 007c05b..025f1a6 100644 --- a/xen-dev-utils/functions/circleDifference.html +++ b/xen-dev-utils/functions/circleDifference.html @@ -3,4 +3,4 @@
  • b: number

    The second pitch measured in cents.

  • equaveCents: number = 1200.0

    The interval of equivalence measured in cents.

  • Returns number

    The first pitch minus the second pitch but on a circle such that large differences wrap around.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/circleDistance.html b/xen-dev-utils/functions/circleDistance.html index 68ff680..779efeb 100644 --- a/xen-dev-utils/functions/circleDistance.html +++ b/xen-dev-utils/functions/circleDistance.html @@ -3,4 +3,4 @@
  • b: number

    The second pitch measured in cents.

  • equaveCents: number = 1200.0

    The interval of equivalence measured in cents.

  • Returns number

    The absolute distance between the two pitches measured in cents but on a circle such that large distances wrap around.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/clamp.html b/xen-dev-utils/functions/clamp.html index b6d089a..8682acb 100644 --- a/xen-dev-utils/functions/clamp.html +++ b/xen-dev-utils/functions/clamp.html @@ -3,4 +3,4 @@
  • maxValue: number

    Upper bound.

  • value: number

    Value to clamp between bounds.

  • Returns number

    Clamped value.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/cokernel.html b/xen-dev-utils/functions/cokernel.html new file mode 100644 index 0000000..a5f2b74 --- /dev/null +++ b/xen-dev-utils/functions/cokernel.html @@ -0,0 +1,4 @@ +cokernel | xen-dev-utils

    Function cokernel

    • Find the right kernel (nullspace) of the input matrix.

      +

      Type Parameters

      • T extends number | bigint

      Parameters

      • A: T[][]

        The input matrix.

        +

      Returns T[][]

      The kernel matrix.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/combinations.html b/xen-dev-utils/functions/combinations.html index d219262..99f7a0e 100644 --- a/xen-dev-utils/functions/combinations.html +++ b/xen-dev-utils/functions/combinations.html @@ -4,4 +4,4 @@

    Type Parameters

    • T

    Parameters

    • set: T[]

      Array of objects of any type. They are treated as unique.

    Returns T[][]

    Array of arrays representing all possible non-empty combinations of elements in a set.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/continuedFraction.html b/xen-dev-utils/functions/continuedFraction.html index eb26e67..7c74daa 100644 --- a/xen-dev-utils/functions/continuedFraction.html +++ b/xen-dev-utils/functions/continuedFraction.html @@ -2,4 +2,4 @@ https://en.wikipedia.org/wiki/Continued_fraction

    Parameters

    • value: number

      Value to turn into a continued fraction.

    Returns number[]

    An array of continued fraction elements.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/decumulate.html b/xen-dev-utils/functions/decumulate.html index 65eb556..8bbf301 100644 --- a/xen-dev-utils/functions/decumulate.html +++ b/xen-dev-utils/functions/decumulate.html @@ -2,4 +2,4 @@

    Parameters

    • target: Monzo

      The monzo to decumulate into.

    • source: Monzo

      The monzo to subtract.

    Returns Monzo

    The (modified) target monzo.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/defactoredHnf.html b/xen-dev-utils/functions/defactoredHnf.html new file mode 100644 index 0000000..ccf9c17 --- /dev/null +++ b/xen-dev-utils/functions/defactoredHnf.html @@ -0,0 +1,4 @@ +defactoredHnf | xen-dev-utils

    Function defactoredHnf

    • Compute the Hermite normal form with torsion removed.

      +

      Parameters

      • M: number[][]

        The input matrix.

        +

      Returns number[][]

      The defactored Hermite normal form.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/det.html b/xen-dev-utils/functions/det.html new file mode 100644 index 0000000..d6d58a9 --- /dev/null +++ b/xen-dev-utils/functions/det.html @@ -0,0 +1,4 @@ +det | xen-dev-utils

    Function det

    • Compute the determinant of a matrix.

      +

      Parameters

      • matrix: number[][]

        Array of arrays of numbers to calculate determinant for.

        +

      Returns number

      The determinant.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/div.html b/xen-dev-utils/functions/div.html index 077b651..03add69 100644 --- a/xen-dev-utils/functions/div.html +++ b/xen-dev-utils/functions/div.html @@ -2,4 +2,4 @@

    Parameters

    • a: number

      The dividend.

    • b: number

      The divisor.

    Returns number

    The quotient of Euclidean division of a by b.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/dot.html b/xen-dev-utils/functions/dot.html index 8d77daa..ec897a4 100644 --- a/xen-dev-utils/functions/dot.html +++ b/xen-dev-utils/functions/dot.html @@ -2,4 +2,4 @@

    Parameters

    Returns number

    The dot product.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/dotPrecise.html b/xen-dev-utils/functions/dotPrecise.html index 15abbb8..72568c3 100644 --- a/xen-dev-utils/functions/dotPrecise.html +++ b/xen-dev-utils/functions/dotPrecise.html @@ -3,4 +3,4 @@

    Parameters

    Returns number

    The dot product.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/extendedEuclid-1.html b/xen-dev-utils/functions/extendedEuclid-1.html index 4b02c9e..f08a7c0 100644 --- a/xen-dev-utils/functions/extendedEuclid-1.html +++ b/xen-dev-utils/functions/extendedEuclid-1.html @@ -5,4 +5,4 @@

    Parameters

    • a: number

      The first integer.

    • b: number

      The second integer.

    Returns ExtendedEuclid

    Bézout coefficients, gcd and quotients.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/eye.html b/xen-dev-utils/functions/eye.html new file mode 100644 index 0000000..d262c64 --- /dev/null +++ b/xen-dev-utils/functions/eye.html @@ -0,0 +1,6 @@ +eye | xen-dev-utils

    Function eye

    • Return a 2-D array with ones on the diagonal and zeros elsewhere.

      +

      Parameters

      • N: number

        Number of rows in the output.

        +
      • Optional M: number

        Number of columns in the output.

        +
      • k: number = 0

        Index of the diagonal.

        +

      Returns number[][]

      An array where all elements are equal to zero, except for the k-th diagonal, whose values are equal to one.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/falsifyConstantStructure.html b/xen-dev-utils/functions/falsifyConstantStructure.html index 31475c8..1122a87 100644 --- a/xen-dev-utils/functions/falsifyConstantStructure.html +++ b/xen-dev-utils/functions/falsifyConstantStructure.html @@ -1,4 +1,4 @@ falsifyConstantStructure | xen-dev-utils

    Function falsifyConstantStructure

    • Determine if an equally tempered scale has constant structure i.e. you can tell the interval class from the size of an interval.

      Parameters

      • steps: number[]

        Musical intervals measured in steps not including the implicit 0 at the start, but including the interval of repetition at the end.

      Returns [[number, number], [number, number]] | null

      A pair of pairs of indices that have the same stepspan but different subtension. null if the scale has constant structure.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/fareyInterior.html b/xen-dev-utils/functions/fareyInterior.html index 6dd4ae2..98e990b 100644 --- a/xen-dev-utils/functions/fareyInterior.html +++ b/xen-dev-utils/functions/fareyInterior.html @@ -1,4 +1,4 @@ fareyInterior | xen-dev-utils

    Function fareyInterior

    • Create an iterator over the interior of n'th Farey sequence. (All fractions between 0 and 1 exclusive.)

      Parameters

      • maxDenominator: number

        Maximum denominator in the sequence.

      Returns Generator<Fraction, undefined, undefined>

      Yields

      Fractions in ascending order starting from 1/maxDenominator and ending at (maxDenominator-1)/maxDenominator.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/fareySequence.html b/xen-dev-utils/functions/fareySequence.html index 3f4d11e..1350e5b 100644 --- a/xen-dev-utils/functions/fareySequence.html +++ b/xen-dev-utils/functions/fareySequence.html @@ -1,4 +1,4 @@ fareySequence | xen-dev-utils

    Function fareySequence

    • Create an iterator over the n'th Farey sequence. (All fractions between 0 and 1 inclusive.)

      Parameters

      • maxDenominator: number

        Maximum denominator in the sequence.

      Returns Generator<Fraction, undefined, undefined>

      Yields

      Fractions in ascending order starting from 0/1 and ending at 1/1.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalAdd.html b/xen-dev-utils/functions/fractionalAdd.html new file mode 100644 index 0000000..d76f7b7 --- /dev/null +++ b/xen-dev-utils/functions/fractionalAdd.html @@ -0,0 +1,5 @@ +fractionalAdd | xen-dev-utils

    Function fractionalAdd

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalDet.html b/xen-dev-utils/functions/fractionalDet.html new file mode 100644 index 0000000..955543d --- /dev/null +++ b/xen-dev-utils/functions/fractionalDet.html @@ -0,0 +1,4 @@ +fractionalDet | xen-dev-utils

    Function fractionalDet

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalDot.html b/xen-dev-utils/functions/fractionalDot.html new file mode 100644 index 0000000..43eed46 --- /dev/null +++ b/xen-dev-utils/functions/fractionalDot.html @@ -0,0 +1,5 @@ +fractionalDot | xen-dev-utils

    Function fractionalDot

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalEye.html b/xen-dev-utils/functions/fractionalEye.html new file mode 100644 index 0000000..5aec29f --- /dev/null +++ b/xen-dev-utils/functions/fractionalEye.html @@ -0,0 +1,6 @@ +fractionalEye | xen-dev-utils

    Function fractionalEye

    • Return a 2-D array with ones on the diagonal and zeros elsewhere.

      +

      Parameters

      • N: number

        Number of rows in the output.

        +
      • Optional M: number

        Number of columns in the output.

        +
      • k: number = 0

        Index of the diagonal.

        +

      Returns FractionalMonzo[]

      An array where all elements are equal to zero, except for the k-th diagonal, whose values are equal to one.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalGram.html b/xen-dev-utils/functions/fractionalGram.html new file mode 100644 index 0000000..0f46240 --- /dev/null +++ b/xen-dev-utils/functions/fractionalGram.html @@ -0,0 +1,4 @@ +fractionalGram | xen-dev-utils

    Function fractionalGram

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalInv.html b/xen-dev-utils/functions/fractionalInv.html new file mode 100644 index 0000000..3c23ae7 --- /dev/null +++ b/xen-dev-utils/functions/fractionalInv.html @@ -0,0 +1,5 @@ +fractionalInv | xen-dev-utils

    Function fractionalInv

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalLenstraLenstraLovasz.html b/xen-dev-utils/functions/fractionalLenstraLenstraLovasz.html new file mode 100644 index 0000000..43dda2e --- /dev/null +++ b/xen-dev-utils/functions/fractionalLenstraLenstraLovasz.html @@ -0,0 +1,6 @@ +fractionalLenstraLenstraLovasz | xen-dev-utils

    Function fractionalLenstraLenstraLovasz

    • Preform Lenstra-Lenstra-Lovász basis reduction using rational numbers.

      +

      Parameters

      • basis: ProtoFractionalMonzo[]

        Array of rational basis elements.

        +
      • delta: FractionValue = '3/4'

        Lovász coefficient.

        +
      • maxIterations: number = 10000

        Maximum number of iterations to perform.

        +

      Returns FractionalLLLResult

      The basis processed to be short and nearly orthogonal alongside Gram-Schmidt coefficients.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalMatadd.html b/xen-dev-utils/functions/fractionalMatadd.html new file mode 100644 index 0000000..9b6b040 --- /dev/null +++ b/xen-dev-utils/functions/fractionalMatadd.html @@ -0,0 +1,5 @@ +fractionalMatadd | xen-dev-utils

    Function fractionalMatadd

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalMatmul.html b/xen-dev-utils/functions/fractionalMatmul.html new file mode 100644 index 0000000..25560d0 --- /dev/null +++ b/xen-dev-utils/functions/fractionalMatmul.html @@ -0,0 +1,5 @@ +fractionalMatmul | xen-dev-utils

    Function fractionalMatmul

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalMatmul_.html b/xen-dev-utils/functions/fractionalMatmul_.html new file mode 100644 index 0000000..e950c09 --- /dev/null +++ b/xen-dev-utils/functions/fractionalMatmul_.html @@ -0,0 +1 @@ +fractionalMatmul_ | xen-dev-utils

    Function fractionalMatmul_

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalMatscale.html b/xen-dev-utils/functions/fractionalMatscale.html new file mode 100644 index 0000000..5cb463f --- /dev/null +++ b/xen-dev-utils/functions/fractionalMatscale.html @@ -0,0 +1,5 @@ +fractionalMatscale | xen-dev-utils

    Function fractionalMatscale

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalMatsub.html b/xen-dev-utils/functions/fractionalMatsub.html new file mode 100644 index 0000000..6734345 --- /dev/null +++ b/xen-dev-utils/functions/fractionalMatsub.html @@ -0,0 +1,5 @@ +fractionalMatsub | xen-dev-utils

    Function fractionalMatsub

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalMonzosEqual.html b/xen-dev-utils/functions/fractionalMonzosEqual.html new file mode 100644 index 0000000..d24e9aa --- /dev/null +++ b/xen-dev-utils/functions/fractionalMonzosEqual.html @@ -0,0 +1,5 @@ +fractionalMonzosEqual | xen-dev-utils

    Function fractionalMonzosEqual

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalNorm.html b/xen-dev-utils/functions/fractionalNorm.html new file mode 100644 index 0000000..1e6ccc9 --- /dev/null +++ b/xen-dev-utils/functions/fractionalNorm.html @@ -0,0 +1,5 @@ +fractionalNorm | xen-dev-utils

    Function fractionalNorm

    • Calculate the norm (vector length) of an array of rational numbers.

      +

      Parameters

      • array: ProtoFractionalMonzo

        The array to measure.

        +
      • type: "L2" | "taxicab" | "maximum" = 'L2'

        Type of measurement. (Euclidean norm can be obtained using L2 and calling .sqrt() on the result.)

        +

      Returns Fraction

      The length of the vector.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalScale.html b/xen-dev-utils/functions/fractionalScale.html new file mode 100644 index 0000000..bdb977c --- /dev/null +++ b/xen-dev-utils/functions/fractionalScale.html @@ -0,0 +1,5 @@ +fractionalScale | xen-dev-utils

    Function fractionalScale

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalSub.html b/xen-dev-utils/functions/fractionalSub.html new file mode 100644 index 0000000..314cd0a --- /dev/null +++ b/xen-dev-utils/functions/fractionalSub.html @@ -0,0 +1,5 @@ +fractionalSub | xen-dev-utils

    Function fractionalSub

    \ No newline at end of file diff --git a/xen-dev-utils/functions/fractionalTranspose.html b/xen-dev-utils/functions/fractionalTranspose.html new file mode 100644 index 0000000..17350ce --- /dev/null +++ b/xen-dev-utils/functions/fractionalTranspose.html @@ -0,0 +1,4 @@ +fractionalTranspose | xen-dev-utils

    Function fractionalTranspose

    \ No newline at end of file diff --git a/xen-dev-utils/functions/frequencyToCentOffset.html b/xen-dev-utils/functions/frequencyToCentOffset.html index e16184c..4dea501 100644 --- a/xen-dev-utils/functions/frequencyToCentOffset.html +++ b/xen-dev-utils/functions/frequencyToCentOffset.html @@ -4,4 +4,4 @@

    Parameters

    • frequency: number

      Musical frequency.

    • baseFrequency: number = 440

      Reference frequency.

    Returns number

    Musical pitch in additive representation as a cents offset from reference.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/frequencyToMtsBytes.html b/xen-dev-utils/functions/frequencyToMtsBytes.html index ca739da..13a612a 100644 --- a/xen-dev-utils/functions/frequencyToMtsBytes.html +++ b/xen-dev-utils/functions/frequencyToMtsBytes.html @@ -1,4 +1,4 @@ frequencyToMtsBytes | xen-dev-utils

    Function frequencyToMtsBytes

    • Convert frequency to 3-byte MTS value

      Parameters

      • frequency: number

        Frequency in Hertz.

      Returns Uint8Array

      Uint8Array of length 3

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/ftom.html b/xen-dev-utils/functions/ftom.html index 77419ac..91bdcbf 100644 --- a/xen-dev-utils/functions/ftom.html +++ b/xen-dev-utils/functions/ftom.html @@ -1,4 +1,4 @@ ftom | xen-dev-utils

    Function ftom

    • Convert frequency to MIDI note number and pitch offset measured in cents.

      Parameters

      • frequency: number

        Frequency in Hertz.

      Returns [number, number]

      [MIDI note number, pitch offset in cents]

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/ftomts.html b/xen-dev-utils/functions/ftomts.html index d9cb97f..552785c 100644 --- a/xen-dev-utils/functions/ftomts.html +++ b/xen-dev-utils/functions/ftomts.html @@ -1,4 +1,4 @@ ftomts | xen-dev-utils

    Function ftomts

    • Convert frequency to MTS number (semitones with A440=69).

      Parameters

      • frequency: number

        Frequency in Hertz.

      • ignoreLimit: boolean = false

      Returns number

      MTS value

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/gcd.html b/xen-dev-utils/functions/gcd.html index 52b19a2..d6d894e 100644 --- a/xen-dev-utils/functions/gcd.html +++ b/xen-dev-utils/functions/gcd.html @@ -4,4 +4,4 @@

    Parameters

    • a: number

      The first integer.

    • b: number

      The second integer.

    Returns number

    The largest integer that divides a and b.

    -
  • Parameters

    • a: bigint
    • b: bigint

    Returns bigint

  • \ No newline at end of file +
  • Parameters

    • a: bigint
    • b: bigint

    Returns bigint

  • \ No newline at end of file diff --git a/xen-dev-utils/functions/getConvergents.html b/xen-dev-utils/functions/getConvergents.html index 3eb6f29..b8afa7a 100644 --- a/xen-dev-utils/functions/getConvergents.html +++ b/xen-dev-utils/functions/getConvergents.html @@ -7,4 +7,4 @@
  • includeSemiconvergents: boolean = false

    Include semiconvergents.

  • includeNonMonotonic: boolean = false

    Include non-monotonically improving approximations.

  • Returns Fraction[]

    An array of (semi)convergents.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/gram.html b/xen-dev-utils/functions/gram.html new file mode 100644 index 0000000..c37af80 --- /dev/null +++ b/xen-dev-utils/functions/gram.html @@ -0,0 +1,5 @@ +gram | xen-dev-utils

    Function gram

    • Perform Gram–Schmidt process without normalization.

      +

      Parameters

      • basis: number[][]

        Array of basis elements.

        +
      • epsilon: number = 1e-12

        Threshold for zero.

        +

      Returns GramResult

      The orthogonalized basis and its dual (duals of near-zero basis elements are coerced to zero).

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/hasMarginConstantStructure.html b/xen-dev-utils/functions/hasMarginConstantStructure.html index 8d99910..952737f 100644 --- a/xen-dev-utils/functions/hasMarginConstantStructure.html +++ b/xen-dev-utils/functions/hasMarginConstantStructure.html @@ -2,4 +2,4 @@

    Parameters

    • scaleCents: number[]

      Musical intervals measured in cents not including the implicit 0 at the start, but including the interval of repetition at the end.

    • margin: number

      Margin of equivalence between two intervals measured in cents.

    Returns boolean

    true if the scale definitely has constant structure. (A false result may convert to true using a smaller margin.)

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/hnf.html b/xen-dev-utils/functions/hnf.html new file mode 100644 index 0000000..a45202d --- /dev/null +++ b/xen-dev-utils/functions/hnf.html @@ -0,0 +1,4 @@ +hnf | xen-dev-utils

    Function hnf

    • Compute the Hermite normal form of a matrix of integers.

      +

      Type Parameters

      • T extends number | bigint

      Parameters

      • A: T[][]

        The input matrix.

        +

      Returns T[][]

      The input in Hermite normal form.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/integerDet.html b/xen-dev-utils/functions/integerDet.html new file mode 100644 index 0000000..4a2df43 --- /dev/null +++ b/xen-dev-utils/functions/integerDet.html @@ -0,0 +1,4 @@ +integerDet | xen-dev-utils

    Function integerDet

    • Compute the determinant of a matrix of integers.

      +

      Type Parameters

      • T extends number | bigint

      Parameters

      • A: T[][]

        The input matrix.

        +

      Returns T

      The determinant.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/inv.html b/xen-dev-utils/functions/inv.html new file mode 100644 index 0000000..e5b4c75 --- /dev/null +++ b/xen-dev-utils/functions/inv.html @@ -0,0 +1,5 @@ +inv | xen-dev-utils

    Function inv

    • Compute the (multiplicative) inverse of a matrix.

      +

      Parameters

      • matrix: number[][]

        Matrix to be inverted.

        +

      Returns number[][]

      The multiplicative inverse.

      +

      Throws

      An error if the matrix is not square or not invertible.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/isPrime.html b/xen-dev-utils/functions/isPrime.html index 6dbf093..cba58f0 100644 --- a/xen-dev-utils/functions/isPrime.html +++ b/xen-dev-utils/functions/isPrime.html @@ -1,4 +1,4 @@ isPrime | xen-dev-utils

    Function isPrime

    • Check a number for primality.

      Parameters

      • n: number

        Number to check.

      Returns boolean

      True if the number is prime, false otherwise.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/iterCombinations.html b/xen-dev-utils/functions/iterCombinations.html index 20371b6..e2eca0c 100644 --- a/xen-dev-utils/functions/iterCombinations.html +++ b/xen-dev-utils/functions/iterCombinations.html @@ -1,4 +1,4 @@ iterCombinations | xen-dev-utils

    Function iterCombinations

    • Get all possible combinations of elements in a set.

      Type Parameters

      • T

      Parameters

      • set: T[]

        Array of objects of any type. They are treated as unique.

      Returns Generator<T[], number, undefined>

      Generator of arrays representing all possible non-empty combinations of elements in a set.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/iterKCombinations.html b/xen-dev-utils/functions/iterKCombinations.html index b1019b1..228f9ca 100644 --- a/xen-dev-utils/functions/iterKCombinations.html +++ b/xen-dev-utils/functions/iterKCombinations.html @@ -2,4 +2,4 @@

    Type Parameters

    • T

    Parameters

    • set: T[]

      Array of objects of any type. They are treated as unique.

    • k: number

      Size of combinations to search for.

    Returns Generator<T[], number, undefined>

    Generator of found combinations, size of a combination is k.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/iteratedEuclid.html b/xen-dev-utils/functions/iteratedEuclid.html index 6279dc9..7ac9485 100644 --- a/xen-dev-utils/functions/iteratedEuclid.html +++ b/xen-dev-utils/functions/iteratedEuclid.html @@ -1,4 +1,4 @@ iteratedEuclid | xen-dev-utils

    Function iteratedEuclid

    • Iterated (extended) Euclidean algorithm.

      Parameters

      • params: Iterable<number>

        An iterable of integers.

      Returns number[]

      Bézout coefficients of the parameters.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/kCombinations.html b/xen-dev-utils/functions/kCombinations.html index c95862b..85083b6 100644 --- a/xen-dev-utils/functions/kCombinations.html +++ b/xen-dev-utils/functions/kCombinations.html @@ -5,4 +5,4 @@

    Type Parameters

    • T

    Parameters

    • set: T[]

      Array of objects of any type. They are treated as unique.

    • k: number

      Size of combinations to search for.

    Returns T[][]

    Array of found non-empty combinations, size of a combination is k.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/kernel.html b/xen-dev-utils/functions/kernel.html new file mode 100644 index 0000000..1c0d26e --- /dev/null +++ b/xen-dev-utils/functions/kernel.html @@ -0,0 +1,4 @@ +kernel | xen-dev-utils

    Function kernel

    • Find the left kernel (nullspace) of the input matrix.

      +

      Type Parameters

      • T extends number | bigint

      Parameters

      • A: T[][]

        The input matrix.

        +

      Returns T[][]

      The kernel matrix.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/lcm.html b/xen-dev-utils/functions/lcm.html index 7b7821b..9dfa40f 100644 --- a/xen-dev-utils/functions/lcm.html +++ b/xen-dev-utils/functions/lcm.html @@ -4,4 +4,4 @@

    Parameters

    • a: number

      The first integer.

    • b: number

      The second integer.

    Returns number

    The smallest integer that both a and b divide.

    -
  • Parameters

    • a: bigint
    • b: bigint

    Returns bigint

  • \ No newline at end of file +
  • Parameters

    • a: bigint
    • b: bigint

    Returns bigint

  • \ No newline at end of file diff --git a/xen-dev-utils/functions/lenstraLenstraLovasz.html b/xen-dev-utils/functions/lenstraLenstraLovasz.html new file mode 100644 index 0000000..1192325 --- /dev/null +++ b/xen-dev-utils/functions/lenstraLenstraLovasz.html @@ -0,0 +1,7 @@ +lenstraLenstraLovasz | xen-dev-utils

    Function lenstraLenstraLovasz

    • Preform Lenstra-Lenstra-Lovász basis reduction.

      +

      Parameters

      • basis: number[][]

        Array of basis elements.

        +
      • delta: number = 0.75

        Lovász coefficient.

        +
      • epsilon: number = 1e-12

        Threshold for zero.

        +
      • maxIterations: number = 10000

        Maximum number of iterations to perform.

        +

      Returns LLLResult

      The basis processed to be short and nearly orthogonal alongside Gram-Schmidt coefficients.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/matadd.html b/xen-dev-utils/functions/matadd.html new file mode 100644 index 0000000..e41dcac --- /dev/null +++ b/xen-dev-utils/functions/matadd.html @@ -0,0 +1,5 @@ +matadd | xen-dev-utils

    Function matadd

    • Add two matrices.

      +

      Parameters

      • A: number[][]

        The first matrix.

        +
      • B: number[][]

        The second matrix.

        +

      Returns number[][]

      The sum.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/matmul.html b/xen-dev-utils/functions/matmul.html new file mode 100644 index 0000000..5857acb --- /dev/null +++ b/xen-dev-utils/functions/matmul.html @@ -0,0 +1,5 @@ +matmul | xen-dev-utils

    Function matmul

    • Compute the matrix product of two matrices or vectors.

      +

      Parameters

      • A: number[]

        The left operand.

        +
      • B: number[]

        The right operand.

        +

      Returns number

      The matrix product of the operands.

      +
    • Parameters

      • A: number[]
      • B: number[][]

      Returns number[]

    • Parameters

      • A: number[][]
      • B: number[]

      Returns number[]

    • Parameters

      • A: number[][]
      • B: number[][]

      Returns number[][]

    \ No newline at end of file diff --git a/xen-dev-utils/functions/matscale.html b/xen-dev-utils/functions/matscale.html new file mode 100644 index 0000000..98b4e00 --- /dev/null +++ b/xen-dev-utils/functions/matscale.html @@ -0,0 +1,5 @@ +matscale | xen-dev-utils

    Function matscale

    • Scale a matrix by a scalar.

      +

      Parameters

      • matrix: number[][]

        The matrix to scale.

        +
      • amount: number

        The amount to scale by.

        +

      Returns number[][]

      The scalar multiple.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/matsub.html b/xen-dev-utils/functions/matsub.html new file mode 100644 index 0000000..ec2e2cb --- /dev/null +++ b/xen-dev-utils/functions/matsub.html @@ -0,0 +1,5 @@ +matsub | xen-dev-utils

    Function matsub

    • Subtract two matrices.

      +

      Parameters

      • A: number[][]

        The matrix to subtract from.

        +
      • B: number[][]

        The matrix to subtract by.

        +

      Returns number[][]

      The difference.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/minor.html b/xen-dev-utils/functions/minor.html new file mode 100644 index 0000000..13f7758 --- /dev/null +++ b/xen-dev-utils/functions/minor.html @@ -0,0 +1,6 @@ +minor | xen-dev-utils

    Function minor

    • Obtain the minor a matrix.

      +

      Parameters

      • matrix: any[][]

        The input matrix.

        +
      • i: number

        The row to remove.

        +
      • j: number

        The column to remove.

        +

      Returns any[][]

      The spliced matrix.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/mmod.html b/xen-dev-utils/functions/mmod.html index f0f8d6c..ba299e1 100644 --- a/xen-dev-utils/functions/mmod.html +++ b/xen-dev-utils/functions/mmod.html @@ -2,4 +2,4 @@

    Parameters

    • a: number

      The dividend.

    • b: number

      The divisor.

    Returns number

    The remainder of Euclidean division of a by b.

    -
  • Parameters

    • a: bigint
    • b: bigint

    Returns bigint

  • \ No newline at end of file +
  • Parameters

    • a: bigint
    • b: bigint

    Returns bigint

  • \ No newline at end of file diff --git a/xen-dev-utils/functions/modInv.html b/xen-dev-utils/functions/modInv.html new file mode 100644 index 0000000..a62a8a8 --- /dev/null +++ b/xen-dev-utils/functions/modInv.html @@ -0,0 +1,6 @@ +modInv | xen-dev-utils

    Function modInv

    • Find modular inverse of a (mod b).

      +

      Parameters

      • a: number

        Number to find modular inverse of.

        +
      • b: number

        Modulus.

        +
      • strict: boolean = true

        Ensure that a * modInv(a, b) = 1 (mod b). If strict = false we have a * modInv(a, b) = gdc(a, b) (mod b) instead.

        +

      Returns number

      The modular inverse in the range {0, 1, ..., b - 1}.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/modc.html b/xen-dev-utils/functions/modc.html new file mode 100644 index 0000000..4795644 --- /dev/null +++ b/xen-dev-utils/functions/modc.html @@ -0,0 +1,5 @@ +modc | xen-dev-utils

    Function modc

    • Ceiling modulo.

      +

      Parameters

      • a: number

        The dividend.

        +
      • b: number

        The divisor.

        +

      Returns number

      The remainder of Euclidean division of a by b where b modc b === b.

      +
    • Parameters

      • a: bigint
      • b: bigint

      Returns bigint

    \ No newline at end of file diff --git a/xen-dev-utils/functions/monzoToBigInt.html b/xen-dev-utils/functions/monzoToBigInt.html index e2e44b5..81f4d58 100644 --- a/xen-dev-utils/functions/monzoToBigInt.html +++ b/xen-dev-utils/functions/monzoToBigInt.html @@ -1,4 +1,4 @@ monzoToBigInt | xen-dev-utils

    Function monzoToBigInt

    • Convert a monzo to the BigInt it represents.

      Parameters

      • monzo: Iterable<number>

        Iterable of prime exponents.

      Returns bigint

      BigInt representation of the monzo.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/monzoToBigNumeratorDenominator.html b/xen-dev-utils/functions/monzoToBigNumeratorDenominator.html index 1f440e7..f4c8882 100644 --- a/xen-dev-utils/functions/monzoToBigNumeratorDenominator.html +++ b/xen-dev-utils/functions/monzoToBigNumeratorDenominator.html @@ -1,4 +1,4 @@ monzoToBigNumeratorDenominator | xen-dev-utils

    Function monzoToBigNumeratorDenominator

    • Convert a monzo to the BigInt fraction it represents.

      Parameters

      • monzo: Iterable<number>

        Iterable of prime exponents.

      Returns {
          denominator: bigint;
          numerator: bigint;
      }

      Record with keys 'numerator' and 'denominator containing BigInts.

      -
      • denominator: bigint
      • numerator: bigint
    \ No newline at end of file +
    • denominator: bigint
    • numerator: bigint
    \ No newline at end of file diff --git a/xen-dev-utils/functions/monzoToCents.html b/xen-dev-utils/functions/monzoToCents.html index 0b2d010..e147f61 100644 --- a/xen-dev-utils/functions/monzoToCents.html +++ b/xen-dev-utils/functions/monzoToCents.html @@ -2,4 +2,4 @@ Monzos representing small rational numbers (commas) are measured accurately.

    Parameters

    • monzo: Monzo

      Array or prime exponents, possibly fractional.

    Returns number

    The size of the represented number in cents (1200ths of an octave).

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/monzoToFraction.html b/xen-dev-utils/functions/monzoToFraction.html index 8a1ef04..83723d1 100644 --- a/xen-dev-utils/functions/monzoToFraction.html +++ b/xen-dev-utils/functions/monzoToFraction.html @@ -1,4 +1,4 @@ monzoToFraction | xen-dev-utils

    Function monzoToFraction

    • Convert a monzo to the fraction it represents.

      Parameters

      • monzo: Iterable<number>

        Iterable of prime exponents.

      Returns Fraction

      Fractional representation of the monzo.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/monzosEqual.html b/xen-dev-utils/functions/monzosEqual.html index 86dd17d..6337395 100644 --- a/xen-dev-utils/functions/monzosEqual.html +++ b/xen-dev-utils/functions/monzosEqual.html @@ -2,4 +2,4 @@

    Parameters

    • a: Monzo

      The first monzo.

    • b: Monzo

      The second monzo.

    Returns boolean

    true if the two values are equal when interpreted as fractions.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/mtof.html b/xen-dev-utils/functions/mtof.html index fe41dca..370a65d 100644 --- a/xen-dev-utils/functions/mtof.html +++ b/xen-dev-utils/functions/mtof.html @@ -1,4 +1,4 @@ mtof | xen-dev-utils

    Function mtof

    • Convert MIDI note number to frequency.

      Parameters

      • index: number

        MIDI note number or MTS value.

      Returns number

      Frequency in Hertz.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/mtsBytesToFrequency.html b/xen-dev-utils/functions/mtsBytesToFrequency.html index cf0c9ec..f5f56fe 100644 --- a/xen-dev-utils/functions/mtsBytesToFrequency.html +++ b/xen-dev-utils/functions/mtsBytesToFrequency.html @@ -1,4 +1,4 @@ mtsBytesToFrequency | xen-dev-utils

    Function mtsBytesToFrequency

    • Convert 3-byte MTS value to frequency

      Parameters

      • mtsBytes: Uint8Array

        Uint8Array of 3-bytes of 7-bit MTS values

      Returns number

      frequency Frequency in Hertz

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/mtsBytesToHex.html b/xen-dev-utils/functions/mtsBytesToHex.html index 2cf7061..4629f9e 100644 --- a/xen-dev-utils/functions/mtsBytesToHex.html +++ b/xen-dev-utils/functions/mtsBytesToHex.html @@ -2,4 +2,4 @@

    Parameters

    • mtsBytes: Uint8Array

      Uint8Array of 3-bytes of 7-bit MTS values

    Returns String

    String representation of MTS value in hexadecimal can be used in MIDI messages

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/mtsBytesToMts.html b/xen-dev-utils/functions/mtsBytesToMts.html index 669b01e..5ad8944 100644 --- a/xen-dev-utils/functions/mtsBytesToMts.html +++ b/xen-dev-utils/functions/mtsBytesToMts.html @@ -1,4 +1,4 @@ mtsBytesToMts | xen-dev-utils

    Function mtsBytesToMts

    • Convert 3-byte MTS value to frequency

      Parameters

      • mtsBytes: Uint8Array

        Uint8Array of 3-bytes of 7-bit MTS values

      Returns number

      frequency Frequency in Hertz

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/mtsToMtsBytes.html b/xen-dev-utils/functions/mtsToMtsBytes.html index 1db26f6..8f18bc6 100644 --- a/xen-dev-utils/functions/mtsToMtsBytes.html +++ b/xen-dev-utils/functions/mtsToMtsBytes.html @@ -1,4 +1,4 @@ mtsToMtsBytes | xen-dev-utils

    Function mtsToMtsBytes

    • Convert MTS pitch value to 3-byte representation

      Parameters

      • mtsValue: number

        MTS pitch value

      Returns Uint8Array

      Uint8Array 3-byte of 7-bit MTS data

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/natsToCents.html b/xen-dev-utils/functions/natsToCents.html index c2eb8b2..987bc5c 100644 --- a/xen-dev-utils/functions/natsToCents.html +++ b/xen-dev-utils/functions/natsToCents.html @@ -1,4 +1,4 @@ natsToCents | xen-dev-utils

    Function natsToCents

    • Convert natural units to cents.

      Parameters

      • nats: number

        Musical interval in natural units.

      Returns number

      Musical interval in cents.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/natsToSemitones.html b/xen-dev-utils/functions/natsToSemitones.html index 75b7bd1..27a8512 100644 --- a/xen-dev-utils/functions/natsToSemitones.html +++ b/xen-dev-utils/functions/natsToSemitones.html @@ -1,4 +1,4 @@ natsToSemitones | xen-dev-utils

    Function natsToSemitones

    • Convert natural units to cents.

      Parameters

      • nats: number

        Musical interval in natural units.

      Returns number

      Musical interval in semitones.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/nearestPlane.html b/xen-dev-utils/functions/nearestPlane.html new file mode 100644 index 0000000..c9843df --- /dev/null +++ b/xen-dev-utils/functions/nearestPlane.html @@ -0,0 +1,6 @@ +nearestPlane | xen-dev-utils

    Function nearestPlane

    • Solve approximate CVP using Babai's nearest plane algorithm.

      +

      Parameters

      • v: number[]

        Vector to reduce.

        +
      • basis: number[][]

        LLL basis to reduce with.

        +
      • Optional dual: number[][]

        Optional precalculated geometric duals of the orthogonalized basis.

        +

      Returns Monzo

      The reduced vector.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/norm.html b/xen-dev-utils/functions/norm.html index b43f620..41e8358 100644 --- a/xen-dev-utils/functions/norm.html +++ b/xen-dev-utils/functions/norm.html @@ -1,5 +1,5 @@ norm | xen-dev-utils

    Function norm

    • Calculate the norm (vector length) of an array of real numbers.

      Parameters

      • array: NumberArray

        The array to measure.

        -
      • type: "euclidean" | "taxicab" | "maximum" = 'euclidean'

        Type of measurement.

        +
      • type: "L2" | "taxicab" | "maximum" | "euclidean" = 'euclidean'

        Type of measurement.

      Returns number

      The length of the vector.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/nthPrime.html b/xen-dev-utils/functions/nthPrime.html index e42e432..1b01375 100644 --- a/xen-dev-utils/functions/nthPrime.html +++ b/xen-dev-utils/functions/nthPrime.html @@ -1,4 +1,4 @@ nthPrime | xen-dev-utils

    Function nthPrime

    • Obtain the nth odd prime.

      Parameters

      • n: number

        1-based ordinal of the nth odd prime, or zero to obtain prime two.

      Returns number

      The nth odd prime number or 2 if n === 0.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/padMatrix.html b/xen-dev-utils/functions/padMatrix.html new file mode 100644 index 0000000..16f243b --- /dev/null +++ b/xen-dev-utils/functions/padMatrix.html @@ -0,0 +1,4 @@ +padMatrix | xen-dev-utils

    Function padMatrix

    • Fix a 2-D matrix to have full rows (pad with zeros).

      +

      Type Parameters

      • T extends number | bigint

      Parameters

      • M: T[][]

        Input matrix.

        +

      Returns {
          M: T[][];
          height: number;
          one: number | bigint;
          width: number;
          zero: T;
      }

      Height, width, the padded matrix and the corresponding 0 or 0n and 1 or 1n.

      +
      • M: T[][]
      • height: number
      • one: number | bigint
      • width: number
      • zero: T
    \ No newline at end of file diff --git a/xen-dev-utils/functions/preimage.html b/xen-dev-utils/functions/preimage.html new file mode 100644 index 0000000..93702ac --- /dev/null +++ b/xen-dev-utils/functions/preimage.html @@ -0,0 +1,4 @@ +preimage | xen-dev-utils

    Function preimage

    • Find the preimage X of A such that AX = I.

      +

      Type Parameters

      • T extends number | bigint

      Parameters

      • A: T[][]

        The input matrix.

        +

      Returns T[][]

      The preimage.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/primeFactorize.html b/xen-dev-utils/functions/primeFactorize.html index 62d59f5..e6e532c 100644 --- a/xen-dev-utils/functions/primeFactorize.html +++ b/xen-dev-utils/functions/primeFactorize.html @@ -1,4 +1,4 @@ primeFactorize | xen-dev-utils

    Function primeFactorize

    • Factorize a number into a Map instace with prime numbers as keys and their multiplicity as values.

      Parameters

      Returns Map<number, number>

      A sparse monzo.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/primeLimit.html b/xen-dev-utils/functions/primeLimit.html index a5a83f7..341274c 100644 --- a/xen-dev-utils/functions/primeLimit.html +++ b/xen-dev-utils/functions/primeLimit.html @@ -3,4 +3,4 @@
  • asOrdinal: boolean = false

    Return the limit as an ordinal instead of a prime. (1 is #0, 2 is #1, 3 is #2, 5 is #3, etc.)

  • maxLimit: number = 7919

    Maximum prime limit to consider.

  • Returns number

    The largest prime in the factorization of the input. Infinity if above the maximum limit. NaN if not applicable.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/primeRange.html b/xen-dev-utils/functions/primeRange.html index be33c7e..32cf35e 100644 --- a/xen-dev-utils/functions/primeRange.html +++ b/xen-dev-utils/functions/primeRange.html @@ -2,4 +2,4 @@

    Parameters

    • start: number

      1-based ordinal of the nth odd prime to start from, or zero to include prime two.

    • Optional end: number

      Range end. end - start elements are returned.

    Returns number[]

    The primes in the range.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/primes-1.html b/xen-dev-utils/functions/primes-1.html index a8a91f1..2594b73 100644 --- a/xen-dev-utils/functions/primes-1.html +++ b/xen-dev-utils/functions/primes-1.html @@ -2,4 +2,4 @@

    Parameters

    • start: number

      Smallest prime number to include (or the next smallest prime).

    • Optional end: number

      Largest prime number to include (or the previous largest prime).

    Returns number[]

    An array of primes p in ascending order such that start <= p <= end.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/pruneZeroRows.html b/xen-dev-utils/functions/pruneZeroRows.html new file mode 100644 index 0000000..19563f3 --- /dev/null +++ b/xen-dev-utils/functions/pruneZeroRows.html @@ -0,0 +1,2 @@ +pruneZeroRows | xen-dev-utils

    Function pruneZeroRows

    • Prune rows filled with falsy values from a 2-D matrix.

      +

      Parameters

      • A: any[][]

      Returns void

    \ No newline at end of file diff --git a/xen-dev-utils/functions/rescale.html b/xen-dev-utils/functions/rescale.html index 2b9feec..7302289 100644 --- a/xen-dev-utils/functions/rescale.html +++ b/xen-dev-utils/functions/rescale.html @@ -2,4 +2,4 @@

    Parameters

    • target: Monzo

      The monzo to rescale.

    • amount: number

      The amount to scale by.

    Returns Monzo

    The (modified) target monzo.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/respell.html b/xen-dev-utils/functions/respell.html new file mode 100644 index 0000000..f044d21 --- /dev/null +++ b/xen-dev-utils/functions/respell.html @@ -0,0 +1,6 @@ +respell | xen-dev-utils

    Function respell

    • Respell a monzo represting a rational number to a simpler form.

      +

      Parameters

      • monzo: Monzo

        Array of prime exponents to simplify.

        +
      • commas: Monzo[]

        Monzos representing near-unisons to simplify by. Should be LLL reduced to work properly.

        +
      • Optional commaOrthoDuals: Monzo[]

        Optional precalculated geometric duals of the orthogonalized comma basis.

        +

      Returns Monzo

      An array of prime exponents representing a simpler rational number.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/scale.html b/xen-dev-utils/functions/scale.html index 4c4f16a..d1488fc 100644 --- a/xen-dev-utils/functions/scale.html +++ b/xen-dev-utils/functions/scale.html @@ -2,4 +2,4 @@

    Parameters

    • monzo: Monzo

      The monzo to scale.

    • amount: number

      The amount to scale by.

    Returns number[]

    The scalar multiple.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/semitonesToNats.html b/xen-dev-utils/functions/semitonesToNats.html index 7b33cc5..abc5db9 100644 --- a/xen-dev-utils/functions/semitonesToNats.html +++ b/xen-dev-utils/functions/semitonesToNats.html @@ -1,4 +1,4 @@ semitonesToNats | xen-dev-utils

    Function semitonesToNats

    • Convert semitones to natural units.

      Parameters

      • semitones: number

        Musical interval in semitones.

      Returns number

      Musical interval in natural units.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/solveDiophantine.html b/xen-dev-utils/functions/solveDiophantine.html new file mode 100644 index 0000000..f05cc75 --- /dev/null +++ b/xen-dev-utils/functions/solveDiophantine.html @@ -0,0 +1,5 @@ +solveDiophantine | xen-dev-utils

    Function solveDiophantine

    • Solve Ax = b in the integers.

      +

      Parameters

      • A: number[][]

        Coefficients of unknowns.

        +
      • b: number[][]

        Target vector or a matrix of column vectors.

        +

      Returns number[][]

      A vector mapped to the target vector by A or a matrix of row vectors.

      +
    • Parameters

      • A: number[][]
      • b: number[]

      Returns number[]

    \ No newline at end of file diff --git a/xen-dev-utils/functions/sub.html b/xen-dev-utils/functions/sub.html index 14c0e55..c060c98 100644 --- a/xen-dev-utils/functions/sub.html +++ b/xen-dev-utils/functions/sub.html @@ -2,4 +2,4 @@

    Parameters

    • a: Monzo

      The first monzo.

    • b: Monzo

      The second monzo.

    Returns Monzo

    A monzo that represents the division of the two numbers represented by a and b.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/sum.html b/xen-dev-utils/functions/sum.html index 5196ec5..d873a03 100644 --- a/xen-dev-utils/functions/sum.html +++ b/xen-dev-utils/functions/sum.html @@ -1,4 +1,4 @@ sum | xen-dev-utils

    Function sum

    • Accurately add up elements from an iterable using Shewchuk's algorithm.

      Parameters

      • iterable: Iterable<number>

        Numbers to sum together.

      Returns number

      The sum of the elements.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/tenneyHeight.html b/xen-dev-utils/functions/tenneyHeight.html index 881a3f2..ab00627 100644 --- a/xen-dev-utils/functions/tenneyHeight.html +++ b/xen-dev-utils/functions/tenneyHeight.html @@ -1,4 +1,4 @@ tenneyHeight | xen-dev-utils

    Function tenneyHeight

    • Given fraction p/q calculate log(abs(p*q)).

      Parameters

      Returns number

      The Tenney-height of the number.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/toMonzo.html b/xen-dev-utils/functions/toMonzo.html index 7077b4c..bcf0861 100644 --- a/xen-dev-utils/functions/toMonzo.html +++ b/xen-dev-utils/functions/toMonzo.html @@ -1,4 +1,4 @@ toMonzo | xen-dev-utils

    Function toMonzo

    • Extract the exponents of the prime factors of a rational number.

      Parameters

      Returns Monzo

      The monzo representing n.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/toMonzoAndResidual.html b/xen-dev-utils/functions/toMonzoAndResidual.html index 32aff7b..7170e73 100644 --- a/xen-dev-utils/functions/toMonzoAndResidual.html +++ b/xen-dev-utils/functions/toMonzoAndResidual.html @@ -2,4 +2,4 @@

    Parameters

    • n: bigint

      Rational number to convert to a monzo.

    • numberOfComponents: number

      Number of components in the result.

    Returns [Monzo, bigint]

    The monzo representing n and a multiplicative residue that cannot be represented in the given limit.

    -
  • Parameters

    Returns [Monzo, Fraction]

  • \ No newline at end of file +
  • Parameters

    Returns [Monzo, Fraction]

  • \ No newline at end of file diff --git a/xen-dev-utils/functions/transpose.html b/xen-dev-utils/functions/transpose.html new file mode 100644 index 0000000..b1a4490 --- /dev/null +++ b/xen-dev-utils/functions/transpose.html @@ -0,0 +1,4 @@ +transpose | xen-dev-utils

    Function transpose

    • Transpose a 2-D matrix (swap rows and columns).

      +

      Type Parameters

      • T extends number | bigint

      Parameters

      • matrix: T[][]

        Matrix to transpose.

        +

      Returns T[][]

      The transpose.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/unapplyWeights.html b/xen-dev-utils/functions/unapplyWeights.html new file mode 100644 index 0000000..b614b4c --- /dev/null +++ b/xen-dev-utils/functions/unapplyWeights.html @@ -0,0 +1,5 @@ +unapplyWeights | xen-dev-utils

    Function unapplyWeights

    • Divide two monzos component-wise.

      +

      Parameters

      • monzo: Monzo

        The first monzo.

        +
      • weights: Monzo

        The second monzo. Missing values interpreted as 1 (no change).

        +

      Returns number[]

      The first monzo unweighted by the second.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/valueToCents.html b/xen-dev-utils/functions/valueToCents.html index 7466ab5..c964c3c 100644 --- a/xen-dev-utils/functions/valueToCents.html +++ b/xen-dev-utils/functions/valueToCents.html @@ -3,4 +3,4 @@

    Parameters

    • value: number

      Musical interval in multiplicative representation.

    Returns number

    Musical interval in additive representation measured in cents.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/functions/wilsonHeight.html b/xen-dev-utils/functions/wilsonHeight.html index 012323a..d9121e4 100644 --- a/xen-dev-utils/functions/wilsonHeight.html +++ b/xen-dev-utils/functions/wilsonHeight.html @@ -1,4 +1,4 @@ wilsonHeight | xen-dev-utils

    Function wilsonHeight

    • Given fraction p/q calculate sopfr(p) + sopfr(q), ignoring sign.

      Parameters

      • value: FractionValue | Monzo | Map<number, number>

        Rational number, an array of its prime exponents or a Map of its prime exponents.

      Returns number

      Sum of prime factors with repetition of p*q.

      -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/interfaces/AnyArray.html b/xen-dev-utils/interfaces/AnyArray.html index 055430e..74e1f4b 100644 --- a/xen-dev-utils/interfaces/AnyArray.html +++ b/xen-dev-utils/interfaces/AnyArray.html @@ -1,2 +1,2 @@ -AnyArray | xen-dev-utils

    Interface AnyArray

    interface AnyArray {
        length: number;
        [key: number]: any;
    }

    Indexable

    [key: number]: any

    Properties

    Properties

    length: number
    \ No newline at end of file +AnyArray | xen-dev-utils

    Interface AnyArray

    interface AnyArray {
        length: number;
        [key: number]: any;
    }

    Indexable

    [key: number]: any

    Properties

    Properties

    length: number
    \ No newline at end of file diff --git a/xen-dev-utils/interfaces/NumberArray.html b/xen-dev-utils/interfaces/NumberArray.html index 5b0d70d..502e8ba 100644 --- a/xen-dev-utils/interfaces/NumberArray.html +++ b/xen-dev-utils/interfaces/NumberArray.html @@ -1,2 +1,2 @@ -NumberArray | xen-dev-utils

    Interface NumberArray

    interface NumberArray {
        length: number;
        [key: number]: number;
    }

    Indexable

    [key: number]: number

    Properties

    Properties

    length: number
    \ No newline at end of file +NumberArray | xen-dev-utils

    Interface NumberArray

    interface NumberArray {
        length: number;
        [key: number]: number;
    }

    Indexable

    [key: number]: number

    Properties

    Properties

    length: number
    \ No newline at end of file diff --git a/xen-dev-utils/modules.html b/xen-dev-utils/modules.html index 10fac12..72ceec7 100644 --- a/xen-dev-utils/modules.html +++ b/xen-dev-utils/modules.html @@ -4,7 +4,13 @@ NumberArray

    Type Aliases

    Variables

    Functions

    \ No newline at end of file diff --git a/xen-dev-utils/types/ExtendedEuclid.html b/xen-dev-utils/types/ExtendedEuclid.html index be0cc8f..11052b5 100644 --- a/xen-dev-utils/types/ExtendedEuclid.html +++ b/xen-dev-utils/types/ExtendedEuclid.html @@ -4,4 +4,4 @@
  • gcd: number

    Greatest common divisor of the parameters.

  • quotientA: number

    Quotient of the first parameter when divided by the gcd

  • quotientB: number

    Quotient of the second parameter when divided by the gcd

    -
  • \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/types/FractionValue.html b/xen-dev-utils/types/FractionValue.html index 9644644..6217fdd 100644 --- a/xen-dev-utils/types/FractionValue.html +++ b/xen-dev-utils/types/FractionValue.html @@ -1 +1 @@ -FractionValue | xen-dev-utils

    Type alias FractionValue

    FractionValue: Fraction | UnsignedFraction | number | string
    \ No newline at end of file +FractionValue | xen-dev-utils

    Type alias FractionValue

    FractionValue: Fraction | UnsignedFraction | number | string
    \ No newline at end of file diff --git a/xen-dev-utils/types/FractionalGramResult.html b/xen-dev-utils/types/FractionalGramResult.html new file mode 100644 index 0000000..9d1fdf6 --- /dev/null +++ b/xen-dev-utils/types/FractionalGramResult.html @@ -0,0 +1,5 @@ +FractionalGramResult | xen-dev-utils

    Type alias FractionalGramResult

    FractionalGramResult: {
        dual: FractionalMonzo[];
        ortho: FractionalMonzo[];
        squaredLengths: Fraction[];
    }

    Result of Gram–Schmidt process without normalization.

    +

    Type declaration

    • dual: FractionalMonzo[]

      Geometric duals of the orthogonal basis.

      +
    • ortho: FractionalMonzo[]

      Orthogonal basis with the leading basis element intact.

      +
    • squaredLengths: Fraction[]

      Squared lengths of the orthogonal basis.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/types/FractionalLLLResult.html b/xen-dev-utils/types/FractionalLLLResult.html new file mode 100644 index 0000000..6fac5f8 --- /dev/null +++ b/xen-dev-utils/types/FractionalLLLResult.html @@ -0,0 +1,4 @@ +FractionalLLLResult | xen-dev-utils

    Type alias FractionalLLLResult

    FractionalLLLResult: {
        basis: FractionalMonzo[];
        gram: FractionalGramResult;
    }

    Result of Lenstra-Lenstra-Lovász basis reduction.

    +

    Type declaration

    \ No newline at end of file diff --git a/xen-dev-utils/types/FractionalMonzo.html b/xen-dev-utils/types/FractionalMonzo.html new file mode 100644 index 0000000..3751cde --- /dev/null +++ b/xen-dev-utils/types/FractionalMonzo.html @@ -0,0 +1,2 @@ +FractionalMonzo | xen-dev-utils

    Type alias FractionalMonzo

    FractionalMonzo: Fraction[]

    Array of rational numbers representing the exponents of prime numbers in the unique factorization of a radical number i.e. n-th root.

    +
    \ No newline at end of file diff --git a/xen-dev-utils/types/GramResult.html b/xen-dev-utils/types/GramResult.html new file mode 100644 index 0000000..ce1850f --- /dev/null +++ b/xen-dev-utils/types/GramResult.html @@ -0,0 +1,5 @@ +GramResult | xen-dev-utils

    Type alias GramResult

    GramResult: {
        dual: number[][];
        ortho: number[][];
        squaredLengths: number[];
    }

    Result of Gram–Schmidt process without normalization.

    +

    Type declaration

    • dual: number[][]

      Geometric duals of the orthogonal basis.

      +
    • ortho: number[][]

      Orthogonal basis with the leading basis element intact.

      +
    • squaredLengths: number[]

      Squared lengths of the orthogonal basis.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/types/LLLResult.html b/xen-dev-utils/types/LLLResult.html new file mode 100644 index 0000000..a0799d7 --- /dev/null +++ b/xen-dev-utils/types/LLLResult.html @@ -0,0 +1,4 @@ +LLLResult | xen-dev-utils

    Type alias LLLResult

    LLLResult: {
        basis: number[][];
        gram: GramResult;
    }

    Result of Lenstra-Lenstra-Lovász basis reduction.

    +

    Type declaration

    • basis: number[][]

      Basis that's short and nearly orthogonal.

      +
    • gram: GramResult

      Gram-Schmidt process results.

      +
    \ No newline at end of file diff --git a/xen-dev-utils/types/Monzo.html b/xen-dev-utils/types/Monzo.html index d902a33..3c3b501 100644 --- a/xen-dev-utils/types/Monzo.html +++ b/xen-dev-utils/types/Monzo.html @@ -1,2 +1,2 @@ Monzo | xen-dev-utils

    Type alias Monzo

    Monzo: number[]

    Array of integers representing the exponents of prime numbers in the unique factorization of a rational number.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/types/ProtoFractionalMonzo.html b/xen-dev-utils/types/ProtoFractionalMonzo.html new file mode 100644 index 0000000..4548e54 --- /dev/null +++ b/xen-dev-utils/types/ProtoFractionalMonzo.html @@ -0,0 +1,2 @@ +ProtoFractionalMonzo | xen-dev-utils

    Type alias ProtoFractionalMonzo

    ProtoFractionalMonzo: FractionValue[]

    Array of rational-looking numbers suitable as arguments for methods that work with fractional monzos.

    +
    \ No newline at end of file diff --git a/xen-dev-utils/types/UnsignedFraction.html b/xen-dev-utils/types/UnsignedFraction.html index dfe6cd7..b2c5acc 100644 --- a/xen-dev-utils/types/UnsignedFraction.html +++ b/xen-dev-utils/types/UnsignedFraction.html @@ -1 +1 @@ -UnsignedFraction | xen-dev-utils

    Type alias UnsignedFraction

    UnsignedFraction: {
        d: number;
        n: number;
    }

    Type declaration

    • d: number
    • n: number
    \ No newline at end of file +UnsignedFraction | xen-dev-utils

    Type alias UnsignedFraction

    UnsignedFraction: {
        d: number;
        n: number;
    }

    Type declaration

    • d: number
    • n: number
    \ No newline at end of file diff --git a/xen-dev-utils/variables/BIG_INT_PRIMES.html b/xen-dev-utils/variables/BIG_INT_PRIMES.html index 3301072..17fdeef 100644 --- a/xen-dev-utils/variables/BIG_INT_PRIMES.html +++ b/xen-dev-utils/variables/BIG_INT_PRIMES.html @@ -1,2 +1,2 @@ BIG_INT_PRIMES | xen-dev-utils

    Variable BIG_INT_PRIMESConst

    BIG_INT_PRIMES: bigint[] = ...

    BigInt representation of the primes.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/variables/LOG_PRIMES.html b/xen-dev-utils/variables/LOG_PRIMES.html index d88ff55..266cca4 100644 --- a/xen-dev-utils/variables/LOG_PRIMES.html +++ b/xen-dev-utils/variables/LOG_PRIMES.html @@ -1,2 +1,2 @@ LOG_PRIMES | xen-dev-utils

    Variable LOG_PRIMESConst

    LOG_PRIMES: number[] = ...

    Logarithms of prime numbers up to ln(7919).

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/variables/PRIMES.html b/xen-dev-utils/variables/PRIMES.html index 6c154db..1917dc6 100644 --- a/xen-dev-utils/variables/PRIMES.html +++ b/xen-dev-utils/variables/PRIMES.html @@ -1,2 +1,2 @@ PRIMES | xen-dev-utils

    Variable PRIMESConst

    PRIMES: number[] = ...

    Prime numbers up to 7919.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-dev-utils/variables/PRIME_CENTS.html b/xen-dev-utils/variables/PRIME_CENTS.html index 172eb96..410e427 100644 --- a/xen-dev-utils/variables/PRIME_CENTS.html +++ b/xen-dev-utils/variables/PRIME_CENTS.html @@ -1,2 +1,2 @@ PRIME_CENTS | xen-dev-utils

    Variable PRIME_CENTSConst

    PRIME_CENTS: number[] = ...

    Prime number harmonics in additive representation measured in cents up to harmonic 7919 ≈ 15541.3 cents.

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-midi/assets/icons.js b/xen-midi/assets/icons.js new file mode 100644 index 0000000..b79c9e8 --- /dev/null +++ b/xen-midi/assets/icons.js @@ -0,0 +1,15 @@ +(function(svg) { + svg.innerHTML = ``; + svg.style.display = 'none'; + if (location.protocol === 'file:') { + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateUseElements); + else updateUseElements() + function updateUseElements() { + document.querySelectorAll('use').forEach(el => { + if (el.getAttribute('href').includes('#icon-')) { + el.setAttribute('href', el.getAttribute('href').replace(/.*#/, '#')); + } + }); + } + } +})(document.body.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))) \ No newline at end of file diff --git a/xen-midi/assets/icons.svg b/xen-midi/assets/icons.svg new file mode 100644 index 0000000..7dead61 --- /dev/null +++ b/xen-midi/assets/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xen-midi/assets/main.js b/xen-midi/assets/main.js index d0aa8d5..d6f1388 100644 --- a/xen-midi/assets/main.js +++ b/xen-midi/assets/main.js @@ -1,8 +1,8 @@ "use strict"; -"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +"use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(console.log("Show page"),document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){console.log("Scorlling");let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ve(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ne(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ve(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ne(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/xen-midi/assets/style.css b/xen-midi/assets/style.css index 07a385b..778b949 100644 --- a/xen-midi/assets/style.css +++ b/xen-midi/assets/style.css @@ -29,7 +29,7 @@ --light-color-ts-constructor-signature: var(--light-color-ts-constructor); --light-color-ts-parameter: var(--light-color-ts-variable); /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); + --light-color-ts-type-parameter: #a55c0e; --light-color-ts-accessor: var(--light-color-ts-property); --light-color-ts-get-signature: var(--light-color-ts-accessor); --light-color-ts-set-signature: var(--light-color-ts-accessor); @@ -69,7 +69,7 @@ --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); --dark-color-ts-parameter: var(--dark-color-ts-variable); /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); + --dark-color-ts-type-parameter: #e07d13; --dark-color-ts-accessor: var(--dark-color-ts-property); --dark-color-ts-get-signature: var(--dark-color-ts-accessor); --dark-color-ts-set-signature: var(--dark-color-ts-accessor); @@ -266,12 +266,12 @@ h6 { line-height: 1.2; } -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { +h1 > a:not(.link), +h2 > a:not(.link), +h3 > a:not(.link), +h4 > a:not(.link), +h5 > a:not(.link), +h6 > a:not(.link) { text-decoration: none; color: var(--color-text); } @@ -327,17 +327,14 @@ dd { } /* Footer */ -.tsd-generator { +footer { border-top: 1px solid var(--color-accent); padding-top: 1rem; padding-bottom: 1rem; max-height: 3.5rem; } - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; +.tsd-generator { + margin: 0 1em; } .container-main { @@ -405,7 +402,8 @@ dd { } body { background: var(--color-background); - font-family: "Segoe UI", sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; color: var(--color-text); } @@ -649,6 +647,28 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { font-weight: bold; } +.tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); +} +.tsd-full-hierarchy, +.tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; +} +.tsd-full-hierarchy ul { + padding-left: 1.5rem; +} +.tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} + .tsd-panel-group.tsd-index-group { margin-bottom: 0; } @@ -714,12 +734,15 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } .tsd-navigation > a, .tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); + width: calc(100% - 0.25rem); + display: flex; + align-items: center; } .tsd-navigation a, .tsd-navigation summary > span, .tsd-page-navigation a { - display: inline-flex; + display: flex; + width: calc(100% - 0.25rem); align-items: center; padding: 0.25rem; color: var(--color-text); @@ -759,11 +782,6 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-left: -1.5rem; } -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} - .tsd-page-navigation ul { padding-left: 1.75rem; } diff --git a/xen-midi/classes/MidiIn.html b/xen-midi/classes/MidiIn.html index 1a70d0f..de8ce1d 100644 --- a/xen-midi/classes/MidiIn.html +++ b/xen-midi/classes/MidiIn.html @@ -1,24 +1,25 @@ -MidiIn | xen-midi

    Class MidiIn

    Wrapper for webmidi.js input. +MidiIn | xen-midi

    Class MidiIn

    Wrapper for webmidi.js input. Listens on multiple channels.

    -

    Constructors

    • Construct a new wrapper for a webmidi.js input device.

      -

      Parameters

      • callback: NoteOnCallback

        Function to call when a note-on event is received on any of the available channels.

        -
      • channels: Set<number>

        Channels to listen on.

        -
      • Optional log: ((msg) => void)

        Logging function.

        -
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      Returns MidiIn

    Properties

    _noteOff: ((event) => void)

    Type declaration

      • (event): void
      • Parameters

        • event: NoteMessageEvent

        Returns void

    _noteOn: ((event) => void)

    Type declaration

      • (event): void
      • Parameters

        • event: NoteMessageEvent

        Returns void

    callback: NoteOnCallback
    channels: Set<number>
    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteOffMap: Map<number, ((rawRelease) => void)>

    Type declaration

      • (rawRelease): void
      • Parameters

        • rawRelease: number

        Returns void

    Methods

    • Fire global note-off.

      -

      Returns void

    • Make this wrapper (and your callback) respond to note-on/off events from this MIDI input.

      -

      Parameters

      • input: Input

        MIDI input to listen to.

        -

      Returns void

    • Parameters

      • event: NoteMessageEvent

      Returns void

    • Parameters

      • event: NoteMessageEvent

      Returns void

    • Make this wrapper (and your callback) stop responding to note-on/off events from this MIDI input.

      -

      Parameters

      • input: Input

        MIDI input that was listened to.

        -

      Returns void

    Generated using TypeDoc

    \ No newline at end of file +

    Constructors

    • Construct a new wrapper for a webmidi.js input device.

      +

      Parameters

      • callback: NoteOnCallback

        Function to call when a note-on event is received on any of the available channels.

        +
      • channels: Set<number>

        Channels to listen on.

        +
      • Optional log: ((msg) => void)

        Logging function.

        +
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      Returns MidiIn

    Properties

    _noteOff: ((event) => void)

    Type declaration

      • (event): void
      • Parameters

        • event: NoteMessageEvent

        Returns void

    _noteOn: ((event) => void)

    Type declaration

      • (event): void
      • Parameters

        • event: NoteMessageEvent

        Returns void

    callback: NoteOnCallback
    channels: Set<number>
    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    noteOffMap: Map<number, ((rawRelease) => void)>

    Note-off map from (noteNumber + (midiChannel - 1) * 128) to callbacks.

    +

    Type declaration

      • (rawRelease): void
      • Parameters

        • rawRelease: number

        Returns void

    Methods

    • Fire global note-off.

      +

      Returns void

    • Make this wrapper (and your callback) respond to note-on/off events from this MIDI input.

      +

      Parameters

      • input: Input

        MIDI input to listen to.

        +

      Returns void

    • Parameters

      • event: NoteMessageEvent

      Returns void

    • Parameters

      • event: NoteMessageEvent

      Returns void

    • Make this wrapper (and your callback) stop responding to note-on/off events from this MIDI input.

      +

      Parameters

      • input: Input

        MIDI input that was listened to.

        +

      Returns void

    \ No newline at end of file diff --git a/xen-midi/classes/MidiOut.html b/xen-midi/classes/MidiOut.html index b5c4fec..df0f175 100644 --- a/xen-midi/classes/MidiOut.html +++ b/xen-midi/classes/MidiOut.html @@ -1,30 +1,30 @@ -MidiOut | xen-midi

    Class MidiOut

    Wrapper for a webmidi.js output. +MidiOut | xen-midi

    Class MidiOut

    Wrapper for a webmidi.js output. Uses multiple channels to achieve polyphonic microtuning.

    -

    Constructors

    • Constuct a new wrapper for a webmidi.js output.

      -

      Parameters

      • output: null | Output

        Output device or null if you need a dummy out.

        -
      • channels: Set<number>

        Channels to use for sending pitch bent MIDI notes. Number of channels determines maximum microtonal polyphony.

        -
      • Optional log: ((msg) => void)

        Logging function.

        -
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      Returns MidiOut

    Properties

    channels: Set<number>
    lastEventTime: number
    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    output: null | Output
    voices: Voice[]

    Methods

    • Clear scheduled notes that have not yet been played. +

    Constructors

    • Constuct a new wrapper for a webmidi.js output.

      +

      Parameters

      • output: null | Output

        Output device or null if you need a dummy out.

        +
      • channels: Set<number>

        Channels to use for sending pitch bent MIDI notes. Number of channels determines maximum microtonal polyphony.

        +
      • Optional log: ((msg) => void)

        Logging function.

        +
          • (msg): void
          • Parameters

            • msg: string

            Returns void

      Returns MidiOut

    Properties

    channels: Set<number>
    lastEventTime: number
    log: ((msg) => void)

    Type declaration

      • (msg): void
      • Parameters

        • msg: string

        Returns void

    output: null | Output
    voices: Voice[]

    Methods

    • Schedule a series of notes to be played at a later time. +

      Returns void

    • Schedule a series of notes to be played at a later time. Please note that this reserves the channels until all notes have finished playing.

      -

      Parameters

      • notes: Note[]

        Notes to be played.

        -

      Returns void

    • Select a voice that's using a cents offset combatible channel or the oldest voice if nothing can be re-used.

      -

      Parameters

      • centsOffset: number

        Cents offset (pitch-bend) from 12edo.

        +

        Parameters

        • notes: Note[]

          Notes to be played.

          +

        Returns void

    • Select a voice that's using a cents offset compatible channel or the oldest voice if nothing can be re-used.

      +

      Parameters

      • centsOffset: number

        Cents offset (pitch-bend) from 12edo.

      Returns Voice

      A voice for the next note-on event.

      -
    • Send a note-on event and pitch-bend to the output device in one of the available channels.

      -

      Parameters

      • frequency: number

        Frequency of the note in Hertz (Hz).

        -
      • Optional rawAttack: number

        Attack velocity of the note from 0 to 127.

        -
      • Optional time: number

      Returns ((rawRelease?, time?) => void)

      A callback for sending a corresponding note off in the correct channel.

      -
        • (rawRelease?, time?): void
        • Parameters

          • Optional rawRelease: number
          • Optional time: number

          Returns void

    • Returns void

    Generated using TypeDoc

    \ No newline at end of file +
    • Send a note-on event and pitch-bend to the output device on one of the available channels.

      +

      Parameters

      • frequency: number

        Frequency of the note in Hertz (Hz).

        +
      • Optional rawAttack: number

        Attack velocity of the note from 0 to 127.

        +
      • Optional time: number

      Returns ((rawRelease?, time?) => void)

      A callback for sending a corresponding note off on the correct channel.

      +
        • (rawRelease?, time?): void
        • Parameters

          • Optional rawRelease: number
          • Optional time: number

          Returns void

    • Returns void

    \ No newline at end of file diff --git a/xen-midi/functions/midiKeyInfo-1.html b/xen-midi/functions/midiKeyInfo-1.html index 65d9a94..cb85cb3 100644 --- a/xen-midi/functions/midiKeyInfo-1.html +++ b/xen-midi/functions/midiKeyInfo-1.html @@ -1,4 +1,4 @@ -midiKeyInfo | xen-midi

    Function midiKeyInfo

    • Get information about a MIDI key.

      -

      Parameters

    \ No newline at end of file diff --git a/xen-midi/index.html b/xen-midi/index.html index 7b2781b..33e496b 100644 --- a/xen-midi/index.html +++ b/xen-midi/index.html @@ -1,4 +1,4 @@ -xen-midi

    xen-midi

    xen-midi

    Free-pitch polyphonic MIDI I/O based on webmidi.js using multi-channel pitch-bend

    +xen-midi

    xen-midi

    xen-midi

    Free-pitch polyphonic MIDI I/O based on webmidi.js using multi-channel pitch-bend

    Installation

    npm i
     

    Documentation

    Documentation is hosted at the project Github pages.

    @@ -7,4 +7,4 @@

    Example

    import {WebMidi} from 'webmidi';
    import {MidiOut} from 'xen-midi';

    async function play() {
    await WebMidi.enable();

    // Set maximum microtonal polyphony to 4 (the number of channels reserved).
    const channels = new Set([1, 2, 3, 4]);
    const midiOut = new MidiOut(WebMidi.outputs[1], channels);

    // Play a just intonation 4:5:6 major chord.
    midiOut.playNotes([
    {
    frequency: 440, // Frequency in Hz
    rawAttack: 80, // Attack velocity from 0 to 127
    rawRelease: 80, // Release velocity from 0 to 127
    time: "+0", // Relative time starting from now
    duration: 500, // Time is measured in ms
    },
    // Attack and release default to 64.
    {
    frequency: 550,
    time: "+100",
    duration: 500,
    },
    {
    frequency: 660,
    time: "+200",
    duration: 500,
    }
    ]);
    }

    play();
    -

    Generated using TypeDoc

    \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-midi/modules.html b/xen-midi/modules.html index ce6c939..8da7792 100644 --- a/xen-midi/modules.html +++ b/xen-midi/modules.html @@ -1,10 +1,10 @@ -xen-midi

    xen-midi

    Index

    Classes

    Type Aliases

    Variables

    Functions

    Generated using TypeDoc

    \ No newline at end of file +xen-midi

    xen-midi

    Index

    Classes

    Type Aliases

    Variables

    Functions

    \ No newline at end of file diff --git a/xen-midi/types/MidiKeyInfo.html b/xen-midi/types/MidiKeyInfo.html index dbaca3c..5e8c3a3 100644 --- a/xen-midi/types/MidiKeyInfo.html +++ b/xen-midi/types/MidiKeyInfo.html @@ -1,5 +1,5 @@ -MidiKeyInfo | xen-midi

    Type alias MidiKeyInfo

    MidiKeyInfo: {
        flatOf?: undefined;
        sharpOf?: undefined;
        whiteNumber: number;
    } | {
        flatOf: number;
        sharpOf: number;
        whiteNumber?: undefined;
    }

    Information about a MIDI key.

    +MidiKeyInfo | xen-midi

    Type alias MidiKeyInfo

    MidiKeyInfo: {
        flatOf?: undefined;
        sharpOf?: undefined;
        whiteNumber: number;
    } | {
        flatOf: number;
        sharpOf: number;
        whiteNumber?: undefined;
    }

    Information about a MIDI key.

    Type declaration

    • Optional flatOf?: undefined
    • Optional sharpOf?: undefined
    • whiteNumber: number

      Contiguous index of the key with other white keys.

    Type declaration

    • flatOf: number

      This black key is a flat of that white key.

    • sharpOf: number

      This black key is a sharp of that white key.

      -
    • Optional whiteNumber?: undefined

    Generated using TypeDoc

    \ No newline at end of file +
  • Optional whiteNumber?: undefined
  • \ No newline at end of file diff --git a/xen-midi/types/Note.html b/xen-midi/types/Note.html index 6ba77bf..76a14e2 100644 --- a/xen-midi/types/Note.html +++ b/xen-midi/types/Note.html @@ -1,8 +1,8 @@ -Note | xen-midi

    Type alias Note

    Note: {
        duration: DOMHighResTimeStamp;
        frequency: number;
        rawAttack?: number;
        rawRelease?: number;
        time: DOMHighResTimeStamp | string;
    }

    Free-pitch MIDI note to be played at a later time.

    -

    Type declaration

    • duration: DOMHighResTimeStamp

      Note duration in milliseconds (ms).

      +Note | xen-midi

      Type alias Note

      Note: {
          duration: DOMHighResTimeStamp;
          frequency: number;
          rawAttack?: number;
          rawRelease?: number;
          time: DOMHighResTimeStamp | string;
      }

      Free-pitch MIDI note to be played at a later time.

      +

      Type declaration

      • duration: DOMHighResTimeStamp

        Note duration in milliseconds (ms).

      • frequency: number

        Frequency in Hertz (Hz)

      • Optional rawAttack?: number

        Attack velocity from 0 to 127.

      • Optional rawRelease?: number

        Release velocity from 0 to 127.

        -
      • time: DOMHighResTimeStamp | string

        Note-on time in milliseconds (ms) as measured by WebMidi.time. +

      • time: DOMHighResTimeStamp | string

        Note-on time in milliseconds (ms) as measured by WebMidi.time. If time is a string prefixed with "+" and followed by a number, the message will be delayed by that many milliseconds.

        -

      Generated using TypeDoc

      \ No newline at end of file +
    \ No newline at end of file diff --git a/xen-midi/types/NoteOff.html b/xen-midi/types/NoteOff.html index debaf8b..779c879 100644 --- a/xen-midi/types/NoteOff.html +++ b/xen-midi/types/NoteOff.html @@ -1,2 +1,2 @@ -NoteOff | xen-midi

    Type alias NoteOff

    NoteOff: typeof __type

    Returned by MIDI note on. Turns the note off when called.

    -

    Generated using TypeDoc

    \ No newline at end of file +NoteOff | xen-midi

    Type alias NoteOff

    NoteOff: typeof __type

    Returned by MIDI note on. Turns the note off when called.

    +
    \ No newline at end of file diff --git a/xen-midi/types/NoteOnCallback.html b/xen-midi/types/NoteOnCallback.html index ef942a8..1449ba6 100644 --- a/xen-midi/types/NoteOnCallback.html +++ b/xen-midi/types/NoteOnCallback.html @@ -1,4 +1,4 @@ -NoteOnCallback | xen-midi

    Type alias NoteOnCallback

    NoteOnCallback: ((index, rawAttack) => NoteOff)

    Type declaration

      • (index, rawAttack): NoteOff
      • Function to call when a MIDI note-on event is received (e.g. for turning on your synth). +NoteOnCallback | xen-midi

        Type alias NoteOnCallback

        NoteOnCallback: ((index, rawAttack, channel) => NoteOff)

        Function to call when a MIDI note-on event is received (e.g. for turning on your synth). Attack velocity is from 0 to 127. Must return a note-off callback (e.g. for turning off your synth).

        -

        Parameters

        • index: number
        • rawAttack: number

        Returns NoteOff

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

      • (index, rawAttack, channel): NoteOff
      • Parameters

        • index: number
        • rawAttack: number
        • channel: number

        Returns NoteOff

    \ No newline at end of file diff --git a/xen-midi/types/Voice.html b/xen-midi/types/Voice.html index f7a65b4..2c9e617 100644 --- a/xen-midi/types/Voice.html +++ b/xen-midi/types/Voice.html @@ -1,3 +1,3 @@ -Voice | xen-midi

    Type alias Voice

    Voice: {
        age: number;
        centsOffset: number;
        channel: number;
    }

    Abstraction for a pitch-bent midi channel. +Voice | xen-midi

    Type alias Voice

    Voice: {
        age: number;
        centsOffset: number;
        channel: number;
    }

    Abstraction for a pitch-bent midi channel. Polyphonic in pure octaves and 12edo in general.

    -

    Type declaration

    • age: number
    • centsOffset: number
    • channel: number

    Generated using TypeDoc

    \ No newline at end of file +

    Type declaration

    • age: number
    • centsOffset: number
    • channel: number
    \ No newline at end of file diff --git a/xen-midi/variables/BEND_RANGE_IN_SEMITONES.html b/xen-midi/variables/BEND_RANGE_IN_SEMITONES.html index 1f14936..cd43db8 100644 --- a/xen-midi/variables/BEND_RANGE_IN_SEMITONES.html +++ b/xen-midi/variables/BEND_RANGE_IN_SEMITONES.html @@ -1,2 +1,2 @@ -BEND_RANGE_IN_SEMITONES | xen-midi

    Variable BEND_RANGE_IN_SEMITONESConst

    BEND_RANGE_IN_SEMITONES: 2 = 2

    Pitch bend range measured in semitones (+-).

    -

    Generated using TypeDoc

    \ No newline at end of file +BEND_RANGE_IN_SEMITONES | xen-midi

    Variable BEND_RANGE_IN_SEMITONESConst

    BEND_RANGE_IN_SEMITONES: 2 = 2

    Pitch bend range measured in semitones (+-).

    +
    \ No newline at end of file