@strudel/repl
Version:
Strudel REPL as a Web Component
1,806 lines • 75.8 kB
JavaScript
import { _ as V, B as Am, Q as O, R as B1, A as c1, S as Mm, T as k1, U as At, V as M1, W as Nt, X as Nm } from "./index-8QCD6763.js";
var k = (m, t) => Array(Math.abs(t) + 1).join(m);
function b(m, t, n) {
return function(...e) {
return console.warn(`${m} is deprecated. Use ${t}.`), n.apply(this, e);
};
}
function J(m) {
return m !== null && typeof m == "object" && typeof m.name == "string";
}
function Q(m) {
return m !== null && typeof m == "object" && typeof m.step == "number" && typeof m.alt == "number";
}
var Im = [0, 2, 4, -1, 1, 3, 5], $m = Im.map(
(m) => Math.floor(m * 7 / 12)
);
function l1(m) {
const { step: t, alt: n, oct: e, dir: r = 1 } = m, o = Im[t] + 7 * n;
if (e === void 0)
return [r * o];
const M = e - $m[t] - 4 * n;
return [r * o, r * M];
}
var It = [3, 0, 4, 1, 5, 2, 6];
function f1(m) {
const [t, n, e] = m, r = It[$t(t)], o = Math.floor((t + 1) / 7);
if (n === void 0)
return { step: r, alt: o, dir: e };
const M = n + 4 * o + $m[r];
return { step: r, alt: o, oct: M, dir: e };
}
function $t(m) {
const t = (m + 1) % 7;
return t < 0 ? 7 + t : t;
}
var jm = { empty: !0, name: "", pc: "", acc: "" }, Pm = /* @__PURE__ */ new Map(), q1 = (m) => "CDEFGAB".charAt(m), z = (m) => m < 0 ? k("b", -m) : k("#", m), W = (m) => m[0] === "b" ? -m.length : m.length;
function u(m) {
const t = JSON.stringify(m), n = Pm.get(t);
if (n)
return n;
const e = typeof m == "string" ? Tt(m) : Q(m) ? u(_t(m)) : J(m) ? u(m.name) : jm;
return Pm.set(t, e), e;
}
var jt = /^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\d*)\s*(.*)$/;
function h1(m) {
const t = jt.exec(m);
return [t[1].toUpperCase(), t[2].replace(/x/g, "##"), t[3], t[4]];
}
function L1(m) {
return u(f1(m));
}
var St = (m, t) => (m % t + t) % t, w1 = [0, 2, 4, 5, 7, 9, 11];
function Tt(m) {
const t = h1(m);
if (t[0] === "" || t[3] !== "")
return jm;
const n = t[0], e = t[1], r = t[2], o = (n.charCodeAt(0) + 3) % 7, M = W(e), P = r.length ? +r : void 0, a = l1({ step: o, alt: M, oct: P }), i = n + e + r, s = n + e, d = (w1[o] + M + 120) % 12, c = P === void 0 ? St(w1[o] + M, 12) - 12 * 99 : w1[o] + M + 12 * (P + 1), l = c >= 0 && c <= 127 ? c : null, p = P === void 0 ? null : Math.pow(2, (c - 69) / 12) * 440;
return {
empty: !1,
acc: e,
alt: M,
chroma: d,
coord: a,
freq: p,
height: c,
letter: n,
midi: l,
name: i,
oct: P,
pc: s,
step: o
};
}
function _t(m) {
const { step: t, alt: n, oct: e } = m, r = q1(t);
if (!r)
return "";
const o = r + z(n);
return e || e === 0 ? o + e : o;
}
var F1 = { empty: !0, name: "", acc: "" }, Ct = "([-+]?\\d+)(d{1,4}|m|M|P|A{1,4})", Vt = "(AA|A|P|M|m|d|dd)([-+]?\\d+)", wt = new RegExp(
"^" + Ct + "|" + Vt + "$"
);
function H1(m) {
const t = wt.exec(`${m}`);
return t === null ? ["", ""] : t[1] ? [t[1], t[2]] : [t[4], t[3]];
}
var am = {};
function f(m) {
return typeof m == "string" ? am[m] || (am[m] = Dt(m)) : Q(m) ? f(xt(m)) : J(m) ? f(m.name) : F1;
}
var im = [0, 2, 4, 5, 7, 9, 11], Sm = "PMMPPMM";
function Dt(m) {
const t = H1(m);
if (t[0] === "")
return F1;
const n = +t[0], e = t[1], r = (Math.abs(n) - 1) % 7, o = Sm[r];
if (o === "M" && e === "P")
return F1;
const M = o === "M" ? "majorable" : "perfectable", P = "" + n + e, a = n < 0 ? -1 : 1, i = n === 8 || n === -8 ? n : a * (r + 1), s = Et(M, e), d = Math.floor((Math.abs(n) - 1) / 7), c = a * (im[r] + s + 12 * d), l = (a * (im[r] + s) % 12 + 12) % 12, p = l1({ step: r, alt: s, oct: d, dir: a });
return {
empty: !1,
name: P,
num: n,
q: e,
step: r,
alt: s,
dir: a,
type: M,
simple: i,
semitones: c,
chroma: l,
coord: p,
oct: d
};
}
function Y(m, t) {
const [n, e = 0] = m, r = n * 7 + e * 12 < 0, o = t || r ? [-n, -e, -1] : [n, e, 1];
return f(f1(o));
}
function Et(m, t) {
return t === "M" && m === "majorable" || t === "P" && m === "perfectable" ? 0 : t === "m" && m === "majorable" ? -1 : /^A+$/.test(t) ? t.length : /^d+$/.test(t) ? -1 * (m === "perfectable" ? t.length : t.length + 1) : 0;
}
function xt(m) {
const { step: t, alt: n, oct: e = 0, dir: r } = m;
if (!r)
return "";
const o = t + 1 + 7 * e, M = o === 0 ? t + 1 : o, P = r < 0 ? "-" : "", a = Sm[t] === "M" ? "majorable" : "perfectable";
return P + M + kt(a, n);
}
function kt(m, t) {
return t === 0 ? m === "majorable" ? "M" : "P" : t === -1 && m === "majorable" ? "m" : t > 0 ? k("A", t) : k("d", m === "perfectable" ? t : t + 1);
}
function h(m, t) {
const n = u(m), e = Array.isArray(t) ? t : f(t).coord;
if (n.empty || !e || e.length < 2)
return "";
const r = n.coord, o = r.length === 1 ? [r[0] + e[0]] : [r[0] + e[0], r[1] + e[1]];
return L1(o).name;
}
function G(m, t) {
const n = m.length;
return (e) => {
if (!t)
return "";
const r = e < 0 ? (n - -e % n) % n : e % n, o = Math.floor(e / n), M = h(t, [0, o]);
return h(M, m[r]);
};
}
function B(m, t) {
const n = u(m), e = u(t);
if (n.empty || e.empty)
return "";
const r = n.coord, o = e.coord, M = o[0] - r[0], P = r.length === 2 && o.length === 2 ? o[1] - r[1] : -Math.floor(M * 7 / 12), a = e.height === n.height && e.midi !== null && n.midi !== null && n.step > e.step;
return Y([M, P], a).name;
}
const Tm = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
accToAlt: W,
altToAcc: z,
coordToInterval: Y,
coordToNote: L1,
decode: f1,
deprecate: b,
distance: B,
encode: l1,
fillStr: k,
interval: f,
isNamed: J,
isPitch: Q,
note: u,
stepToLetter: q1,
tokenizeInterval: H1,
tokenizeNote: h1,
tonicIntervalsTransposer: G,
transpose: h
}, Symbol.toStringTag, { value: "Module" }));
var sm = (m, t) => Array(t + 1).join(m), Ft = /^(_{1,}|=|\^{1,}|)([abcdefgABCDEFG])([,']*)$/;
function _m(m) {
const t = Ft.exec(m);
return t ? [t[1], t[2], t[3]] : ["", "", ""];
}
function u1(m) {
const [t, n, e] = _m(m);
if (n === "")
return "";
let r = 4;
for (let M = 0; M < e.length; M++)
r += e.charAt(M) === "," ? -1 : 1;
const o = t[0] === "_" ? t.replace(/_/g, "b") : t[0] === "^" ? t.replace(/\^/g, "#") : "";
return n.charCodeAt(0) > 96 ? n.toUpperCase() + o + (r + 1) : n + o + r;
}
function Cm(m) {
const t = u(m);
if (t.empty || !t.oct && t.oct !== 0)
return "";
const { letter: n, acc: e, oct: r } = t, o = e[0] === "b" ? e.replace(/b/g, "_") : e.replace(/#/g, "^"), M = r > 4 ? n.toLowerCase() : n, P = r === 5 ? "" : r > 4 ? sm("'", r - 5) : sm(",", 4 - r);
return o + M + P;
}
function Rt(m, t) {
return Cm(h(u1(m), t));
}
function Ot(m, t) {
return B(u1(m), u1(t));
}
var zt = {
abcToScientificNotation: u1,
scientificToAbcNotation: Cm,
tokenize: _m,
transpose: Rt,
distance: Ot
};
function Gt(m, t) {
const n = [];
for (; t--; n[t] = t + m)
;
return n;
}
function Bt(m, t) {
const n = [];
for (; t--; n[t] = m - t)
;
return n;
}
function qt(m, t) {
return m < t ? Gt(m, t - m + 1) : Bt(m, m - t + 1);
}
function Lt(m, t) {
const n = t.length, e = (m % n + n) % n;
return t.slice(e, n).concat(t.slice(0, e));
}
function Ht(m) {
return m.filter((t) => t === 0 || t);
}
function Vm(m) {
return m.map((n) => u(n)).filter((n) => !n.empty).sort((n, e) => n.height - e.height).map((n) => n.name);
}
function Ut(m) {
return Vm(m).filter((t, n, e) => n === 0 || t !== e[n - 1]);
}
function Xt(m, t = Math.random) {
let n, e, r = m.length;
for (; r; )
n = Math.floor(t() * r--), e = m[r], m[r] = m[n], m[n] = e;
return m;
}
function wm(m) {
return m.length === 0 ? [[]] : wm(m.slice(1)).reduce((t, n) => t.concat(
m.map((e, r) => {
const o = n.slice();
return o.splice(r, 0, m[0]), o;
})
), []);
}
const Kt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
compact: Ht,
permutations: wm,
range: qt,
rotate: Lt,
shuffle: Xt,
sortedNoteNames: Vm,
sortedUniqNoteNames: Ut
}, Symbol.toStringTag, { value: "Module" }));
function Jt(m, t) {
const n = [];
for (; t--; n[t] = t + m)
;
return n;
}
function Qt(m, t) {
const n = [];
for (; t--; n[t] = m - t)
;
return n;
}
function p1(m, t) {
return m < t ? Jt(m, t - m + 1) : Qt(m, m - t + 1);
}
function q(m, t) {
const n = t.length, e = (m % n + n) % n;
return t.slice(e, n).concat(t.slice(0, e));
}
function U1(m) {
return m.filter((t) => t === 0 || t);
}
function Wt(m, t = Math.random) {
let n, e, r = m.length;
for (; r; )
n = Math.floor(t() * r--), e = m[r], m[r] = m[n], m[n] = e;
return m;
}
function Dm(m) {
return m.length === 0 ? [[]] : Dm(m.slice(1)).reduce((t, n) => t.concat(
m.map((e, r) => {
const o = n.slice();
return o.splice(r, 0, m[0]), o;
})
), []);
}
var Yt = {
compact: U1,
permutations: Dm,
range: p1,
rotate: q,
shuffle: Wt
}, w = {
empty: !0,
name: "",
setNum: 0,
chroma: "000000000000",
normalized: "000000000000",
intervals: []
}, X1 = (m) => Number(m).toString(2), cm = (m) => parseInt(m, 2), Zt = /^[01]{12}$/;
function K1(m) {
return Zt.test(m);
}
var mn = (m) => typeof m == "number" && m >= 0 && m <= 4095, tn = (m) => m && K1(m.chroma), um = { [w.chroma]: w };
function v(m) {
const t = K1(m) ? m : mn(m) ? X1(m) : Array.isArray(m) ? dn(m) : tn(m) ? m.chroma : w.chroma;
return um[t] = um[t] || un(t);
}
var nn = b("Pcset.pcset", "Pcset.get", v), Em = (m) => v(m).chroma, en = (m) => v(m).intervals, rn = (m) => v(m).setNum, on = [
"1P",
"2m",
"2M",
"3m",
"3M",
"4P",
"5d",
"5P",
"6m",
"6M",
"7m",
"7M"
];
function Mn(m) {
const t = [];
for (let n = 0; n < 12; n++)
m.charAt(n) === "1" && t.push(on[n]);
return t;
}
function Pn() {
return p1(2048, 4095).map(X1);
}
function J1(m, t = !0) {
const e = v(m).chroma.split("");
return U1(
e.map((r, o) => {
const M = q(o, e);
return t && M[0] === "0" ? null : M.join("");
})
);
}
function an(m, t) {
return v(m).setNum === v(t).setNum;
}
function v1(m) {
const t = v(m).setNum;
return (n) => {
const e = v(n).setNum;
return t && t !== e && (e & t) === e;
};
}
function g1(m) {
const t = v(m).setNum;
return (n) => {
const e = v(n).setNum;
return t && t !== e && (e | t) === e;
};
}
function xm(m) {
const t = v(m);
return (n) => {
const e = u(n);
return t && !e.empty && t.chroma.charAt(e.chroma) === "1";
};
}
function sn(m) {
const t = xm(m);
return (n) => n.filter(t);
}
var km = {
get: v,
chroma: Em,
num: rn,
intervals: en,
chromas: Pn,
isSupersetOf: g1,
isSubsetOf: v1,
isNoteIncludedIn: xm,
isEqual: an,
filter: sn,
modes: J1,
pcset: nn
};
function cn(m) {
const t = m.split("");
return t.map((n, e) => q(e, t).join(""));
}
function un(m) {
const t = cm(m), n = cn(m).map(cm).filter((o) => o >= 2048).sort()[0], e = X1(n), r = Mn(m);
return {
empty: !1,
name: "",
setNum: t,
chroma: m,
normalized: e,
intervals: r
};
}
function dn(m) {
if (m.length === 0)
return w.chroma;
let t;
const n = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (let e = 0; e < m.length; e++)
t = u(m[e]), t.empty && (t = f(m[e])), t.empty || (n[t.chroma] = 1);
return n.join("");
}
var ln = [
["1P 3M 5P", "major", "M ^ maj"],
["1P 3M 5P 7M", "major seventh", "maj7 Δ ma7 M7 Maj7 ^7"],
["1P 3M 5P 7M 9M", "major ninth", "maj9 Δ9 ^9"],
["1P 3M 5P 7M 9M 13M", "major thirteenth", "maj13 Maj13 ^13"],
["1P 3M 5P 6M", "sixth", "6 add6 add13 M6"],
["1P 3M 5P 6M 9M", "sixth/ninth", "6/9 69 M69"],
["1P 3M 6m 7M", "major seventh flat sixth", "M7b6 ^7b6"],
[
"1P 3M 5P 7M 11A",
"major seventh sharp eleventh",
"maj#4 Δ#4 Δ#11 M7#11 ^7#11 maj7#11"
],
["1P 3m 5P", "minor", "m min -"],
["1P 3m 5P 7m", "minor seventh", "m7 min7 mi7 -7"],
[
"1P 3m 5P 7M",
"minor/major seventh",
"m/ma7 m/maj7 mM7 mMaj7 m/M7 -Δ7 mΔ -^7"
],
["1P 3m 5P 6M", "minor sixth", "m6 -6"],
["1P 3m 5P 7m 9M", "minor ninth", "m9 -9"],
["1P 3m 5P 7M 9M", "minor/major ninth", "mM9 mMaj9 -^9"],
["1P 3m 5P 7m 9M 11P", "minor eleventh", "m11 -11"],
["1P 3m 5P 7m 9M 13M", "minor thirteenth", "m13 -13"],
["1P 3m 5d", "diminished", "dim ° o"],
["1P 3m 5d 7d", "diminished seventh", "dim7 °7 o7"],
["1P 3m 5d 7m", "half-diminished", "m7b5 ø -7b5 h7 h"],
["1P 3M 5P 7m", "dominant seventh", "7 dom"],
["1P 3M 5P 7m 9M", "dominant ninth", "9"],
["1P 3M 5P 7m 9M 13M", "dominant thirteenth", "13"],
["1P 3M 5P 7m 11A", "lydian dominant seventh", "7#11 7#4"],
["1P 3M 5P 7m 9m", "dominant flat ninth", "7b9"],
["1P 3M 5P 7m 9A", "dominant sharp ninth", "7#9"],
["1P 3M 7m 9m", "altered", "alt7"],
["1P 4P 5P", "suspended fourth", "sus4 sus"],
["1P 2M 5P", "suspended second", "sus2"],
["1P 4P 5P 7m", "suspended fourth seventh", "7sus4 7sus"],
["1P 5P 7m 9M 11P", "eleventh", "11"],
[
"1P 4P 5P 7m 9m",
"suspended fourth flat ninth",
"b9sus phryg 7b9sus 7b9sus4"
],
["1P 5P", "fifth", "5"],
["1P 3M 5A", "augmented", "aug + +5 ^#5"],
["1P 3m 5A", "minor augmented", "m#5 -#5 m+"],
["1P 3M 5A 7M", "augmented seventh", "maj7#5 maj7+5 +maj7 ^7#5"],
[
"1P 3M 5P 7M 9M 11A",
"major sharp eleventh (lydian)",
"maj9#11 Δ9#11 ^9#11"
],
["1P 2M 4P 5P", "", "sus24 sus4add9"],
["1P 3M 5A 7M 9M", "", "maj9#5 Maj9#5"],
["1P 3M 5A 7m", "", "7#5 +7 7+ 7aug aug7"],
["1P 3M 5A 7m 9A", "", "7#5#9 7#9#5 7alt"],
["1P 3M 5A 7m 9M", "", "9#5 9+"],
["1P 3M 5A 7m 9M 11A", "", "9#5#11"],
["1P 3M 5A 7m 9m", "", "7#5b9 7b9#5"],
["1P 3M 5A 7m 9m 11A", "", "7#5b9#11"],
["1P 3M 5A 9A", "", "+add#9"],
["1P 3M 5A 9M", "", "M#5add9 +add9"],
["1P 3M 5P 6M 11A", "", "M6#11 M6b5 6#11 6b5"],
["1P 3M 5P 6M 7M 9M", "", "M7add13"],
["1P 3M 5P 6M 9M 11A", "", "69#11"],
["1P 3m 5P 6M 9M", "", "m69 -69"],
["1P 3M 5P 6m 7m", "", "7b6"],
["1P 3M 5P 7M 9A 11A", "", "maj7#9#11"],
["1P 3M 5P 7M 9M 11A 13M", "", "M13#11 maj13#11 M13+4 M13#4"],
["1P 3M 5P 7M 9m", "", "M7b9"],
["1P 3M 5P 7m 11A 13m", "", "7#11b13 7b5b13"],
["1P 3M 5P 7m 13M", "", "7add6 67 7add13"],
["1P 3M 5P 7m 9A 11A", "", "7#9#11 7b5#9 7#9b5"],
["1P 3M 5P 7m 9A 11A 13M", "", "13#9#11"],
["1P 3M 5P 7m 9A 11A 13m", "", "7#9#11b13"],
["1P 3M 5P 7m 9A 13M", "", "13#9"],
["1P 3M 5P 7m 9A 13m", "", "7#9b13"],
["1P 3M 5P 7m 9M 11A", "", "9#11 9+4 9#4"],
["1P 3M 5P 7m 9M 11A 13M", "", "13#11 13+4 13#4"],
["1P 3M 5P 7m 9M 11A 13m", "", "9#11b13 9b5b13"],
["1P 3M 5P 7m 9m 11A", "", "7b9#11 7b5b9 7b9b5"],
["1P 3M 5P 7m 9m 11A 13M", "", "13b9#11"],
["1P 3M 5P 7m 9m 11A 13m", "", "7b9b13#11 7b9#11b13 7b5b9b13"],
["1P 3M 5P 7m 9m 13M", "", "13b9"],
["1P 3M 5P 7m 9m 13m", "", "7b9b13"],
["1P 3M 5P 7m 9m 9A", "", "7b9#9"],
["1P 3M 5P 9M", "", "Madd9 2 add9 add2"],
["1P 3M 5P 9m", "", "Maddb9"],
["1P 3M 5d", "", "Mb5"],
["1P 3M 5d 6M 7m 9M", "", "13b5"],
["1P 3M 5d 7M", "", "M7b5"],
["1P 3M 5d 7M 9M", "", "M9b5"],
["1P 3M 5d 7m", "", "7b5"],
["1P 3M 5d 7m 9M", "", "9b5"],
["1P 3M 7m", "", "7no5"],
["1P 3M 7m 13m", "", "7b13"],
["1P 3M 7m 9M", "", "9no5"],
["1P 3M 7m 9M 13M", "", "13no5"],
["1P 3M 7m 9M 13m", "", "9b13"],
["1P 3m 4P 5P", "", "madd4"],
["1P 3m 5P 6m 7M", "", "mMaj7b6"],
["1P 3m 5P 6m 7M 9M", "", "mMaj9b6"],
["1P 3m 5P 7m 11P", "", "m7add11 m7add4"],
["1P 3m 5P 9M", "", "madd9"],
["1P 3m 5d 6M 7M", "", "o7M7"],
["1P 3m 5d 7M", "", "oM7"],
["1P 3m 6m 7M", "", "mb6M7"],
["1P 3m 6m 7m", "", "m7#5"],
["1P 3m 6m 7m 9M", "", "m9#5"],
["1P 3m 5A 7m 9M 11P", "", "m11A"],
["1P 3m 6m 9m", "", "mb6b9"],
["1P 2M 3m 5d 7m", "", "m9b5"],
["1P 4P 5A 7M", "", "M7#5sus4"],
["1P 4P 5A 7M 9M", "", "M9#5sus4"],
["1P 4P 5A 7m", "", "7#5sus4"],
["1P 4P 5P 7M", "", "M7sus4"],
["1P 4P 5P 7M 9M", "", "M9sus4"],
["1P 4P 5P 7m 9M", "", "9sus4 9sus"],
["1P 4P 5P 7m 9M 13M", "", "13sus4 13sus"],
["1P 4P 5P 7m 9m 13m", "", "7sus4b9b13 7b9b13sus4"],
["1P 4P 7m 10m", "", "4 quartal"],
["1P 5P 7m 9m 11P", "", "11b9"]
], fn = ln, hn = {
...w,
name: "",
quality: "Unknown",
intervals: [],
aliases: []
}, L = [], _ = {};
function Q1(m) {
return _[m] || hn;
}
var pn = b("ChordType.chordType", "ChordType.get", Q1);
function vn() {
return L.map((m) => m.name).filter((m) => m);
}
function gn() {
return L.map((m) => m.aliases[0]).filter((m) => m);
}
function bn() {
return Object.keys(_);
}
function H() {
return L.slice();
}
var yn = b("ChordType.entries", "ChordType.all", H);
function An() {
L = [], _ = {};
}
function Fm(m, t, n) {
const e = In(m), r = {
...v(m),
name: n || "",
quality: e,
intervals: m,
aliases: t
};
L.push(r), r.name && (_[r.name] = r), _[r.setNum] = r, _[r.chroma] = r, r.aliases.forEach((o) => Nn(r, o));
}
function Nn(m, t) {
_[t] = m;
}
function In(m) {
const t = (n) => m.indexOf(n) !== -1;
return t("5A") ? "Augmented" : t("3M") ? "Major" : t("5d") ? "Diminished" : t("3m") ? "Minor" : "Unknown";
}
fn.forEach(
([m, t, n]) => Fm(m.split(" "), n.split(" "), t)
);
L.sort((m, t) => m.setNum - t.setNum);
var Rm = {
names: vn,
symbols: gn,
get: Q1,
all: H,
add: Fm,
removeAll: An,
keys: bn,
entries: yn,
chordType: pn
}, $n = (m) => {
const t = m.reduce((n, e) => {
const r = u(e).chroma;
return r !== void 0 && (n[r] = n[r] || u(e).name), n;
}, {});
return (n) => t[n];
};
function jn(m, t = {}) {
const n = m.map((r) => u(r).pc).filter((r) => r);
return u.length === 0 ? [] : Dn(n, 1, t).filter((r) => r.weight).sort((r, o) => o.weight - r.weight).map((r) => r.name);
}
var b1 = {
anyThirds: 384,
perfectFifth: 16,
nonPerfectFifths: 40,
anySeventh: 3
}, y1 = (m) => (t) => !!(t & m), Sn = y1(b1.anyThirds), Tn = y1(b1.perfectFifth), _n = y1(b1.anySeventh), Cn = y1(b1.nonPerfectFifths);
function Vn(m) {
const t = parseInt(m.chroma, 2);
return Sn(t) && Tn(t) && _n(t);
}
function wn(m) {
const t = parseInt(m, 2);
return Cn(t) ? m : (t | 16).toString(2);
}
function Dn(m, t, n) {
const e = m[0], r = u(e).chroma, o = $n(m), M = J1(m, !1), P = [];
return M.forEach((a, i) => {
const s = n.assumePerfectFifth && wn(a);
H().filter((c) => n.assumePerfectFifth && Vn(c) ? c.chroma === s : c.chroma === a).forEach((c) => {
const l = c.aliases[0], p = o(i);
i !== r ? P.push({
weight: 0.5 * t,
name: `${p}${l}/${e}`
}) : P.push({ weight: 1 * t, name: `${p}${l}` });
});
}), P;
}
var En = [
["1P 2M 3M 5P 6M", "major pentatonic", "pentatonic"],
["1P 2M 3M 4P 5P 6M 7M", "major", "ionian"],
["1P 2M 3m 4P 5P 6m 7m", "minor", "aeolian"],
["1P 2M 3m 3M 5P 6M", "major blues"],
["1P 3m 4P 5d 5P 7m", "minor blues", "blues"],
["1P 2M 3m 4P 5P 6M 7M", "melodic minor"],
["1P 2M 3m 4P 5P 6m 7M", "harmonic minor"],
["1P 2M 3M 4P 5P 6M 7m 7M", "bebop"],
["1P 2M 3m 4P 5d 6m 6M 7M", "diminished", "whole-half diminished"],
["1P 2M 3m 4P 5P 6M 7m", "dorian"],
["1P 2M 3M 4A 5P 6M 7M", "lydian"],
["1P 2M 3M 4P 5P 6M 7m", "mixolydian", "dominant"],
["1P 2m 3m 4P 5P 6m 7m", "phrygian"],
["1P 2m 3m 4P 5d 6m 7m", "locrian"],
["1P 3M 4P 5P 7M", "ionian pentatonic"],
["1P 3M 4P 5P 7m", "mixolydian pentatonic", "indian"],
["1P 2M 4P 5P 6M", "ritusen"],
["1P 2M 4P 5P 7m", "egyptian"],
["1P 3M 4P 5d 7m", "neopolitan major pentatonic"],
["1P 3m 4P 5P 6m", "vietnamese 1"],
["1P 2m 3m 5P 6m", "pelog"],
["1P 2m 4P 5P 6m", "kumoijoshi"],
["1P 2M 3m 5P 6m", "hirajoshi"],
["1P 2m 4P 5d 7m", "iwato"],
["1P 2m 4P 5P 7m", "in-sen"],
["1P 3M 4A 5P 7M", "lydian pentatonic", "chinese"],
["1P 3m 4P 6m 7m", "malkos raga"],
["1P 3m 4P 5d 7m", "locrian pentatonic", "minor seven flat five pentatonic"],
["1P 3m 4P 5P 7m", "minor pentatonic", "vietnamese 2"],
["1P 3m 4P 5P 6M", "minor six pentatonic"],
["1P 2M 3m 5P 6M", "flat three pentatonic", "kumoi"],
["1P 2M 3M 5P 6m", "flat six pentatonic"],
["1P 2m 3M 5P 6M", "scriabin"],
["1P 3M 5d 6m 7m", "whole tone pentatonic"],
["1P 3M 4A 5A 7M", "lydian #5P pentatonic"],
["1P 3M 4A 5P 7m", "lydian dominant pentatonic"],
["1P 3m 4P 5P 7M", "minor #7M pentatonic"],
["1P 3m 4d 5d 7m", "super locrian pentatonic"],
["1P 2M 3m 4P 5P 7M", "minor hexatonic"],
["1P 2A 3M 5P 5A 7M", "augmented"],
["1P 2M 4P 5P 6M 7m", "piongio"],
["1P 2m 3M 4A 6M 7m", "prometheus neopolitan"],
["1P 2M 3M 4A 6M 7m", "prometheus"],
["1P 2m 3M 5d 6m 7m", "mystery #1"],
["1P 2m 3M 4P 5A 6M", "six tone symmetric"],
["1P 2M 3M 4A 5A 6A", "whole tone", "messiaen's mode #1"],
["1P 2m 4P 4A 5P 7M", "messiaen's mode #5"],
["1P 2M 3M 4P 5d 6m 7m", "locrian major", "arabian"],
["1P 2m 3M 4A 5P 6m 7M", "double harmonic lydian"],
[
"1P 2m 2A 3M 4A 6m 7m",
"altered",
"super locrian",
"diminished whole tone",
"pomeroy"
],
["1P 2M 3m 4P 5d 6m 7m", "locrian #2", "half-diminished", "aeolian b5"],
[
"1P 2M 3M 4P 5P 6m 7m",
"mixolydian b6",
"melodic minor fifth mode",
"hindu"
],
["1P 2M 3M 4A 5P 6M 7m", "lydian dominant", "lydian b7", "overtone"],
["1P 2M 3M 4A 5A 6M 7M", "lydian augmented"],
[
"1P 2m 3m 4P 5P 6M 7m",
"dorian b2",
"phrygian #6",
"melodic minor second mode"
],
[
"1P 2m 3m 4d 5d 6m 7d",
"ultralocrian",
"superlocrian bb7",
"superlocrian diminished"
],
["1P 2m 3m 4P 5d 6M 7m", "locrian 6", "locrian natural 6", "locrian sharp 6"],
["1P 2A 3M 4P 5P 5A 7M", "augmented heptatonic"],
[
"1P 2M 3m 4A 5P 6M 7m",
"dorian #4",
"ukrainian dorian",
"romanian minor",
"altered dorian"
],
["1P 2M 3m 4A 5P 6M 7M", "lydian diminished"],
["1P 2M 3M 4A 5A 7m 7M", "leading whole tone"],
["1P 2M 3M 4A 5P 6m 7m", "lydian minor"],
["1P 2m 3M 4P 5P 6m 7m", "phrygian dominant", "spanish", "phrygian major"],
["1P 2m 3m 4P 5P 6m 7M", "balinese"],
["1P 2m 3m 4P 5P 6M 7M", "neopolitan major"],
["1P 2M 3M 4P 5P 6m 7M", "harmonic major"],
["1P 2m 3M 4P 5P 6m 7M", "double harmonic major", "gypsy"],
["1P 2M 3m 4A 5P 6m 7M", "hungarian minor"],
["1P 2A 3M 4A 5P 6M 7m", "hungarian major"],
["1P 2m 3M 4P 5d 6M 7m", "oriental"],
["1P 2m 3m 3M 4A 5P 7m", "flamenco"],
["1P 2m 3m 4A 5P 6m 7M", "todi raga"],
["1P 2m 3M 4P 5d 6m 7M", "persian"],
["1P 2m 3M 5d 6m 7m 7M", "enigmatic"],
[
"1P 2M 3M 4P 5A 6M 7M",
"major augmented",
"major #5",
"ionian augmented",
"ionian #5"
],
["1P 2A 3M 4A 5P 6M 7M", "lydian #9"],
["1P 2m 2M 4P 4A 5P 6m 7M", "messiaen's mode #4"],
["1P 2m 3M 4P 4A 5P 6m 7M", "purvi raga"],
["1P 2m 3m 3M 4P 5P 6m 7m", "spanish heptatonic"],
["1P 2M 3m 3M 4P 5P 6M 7m", "bebop minor"],
["1P 2M 3M 4P 5P 5A 6M 7M", "bebop major"],
["1P 2m 3m 4P 5d 5P 6m 7m", "bebop locrian"],
["1P 2M 3m 4P 5P 6m 7m 7M", "minor bebop"],
["1P 2M 3M 4P 5d 5P 6M 7M", "ichikosucho"],
["1P 2M 3m 4P 5P 6m 6M 7M", "minor six diminished"],
[
"1P 2m 3m 3M 4A 5P 6M 7m",
"half-whole diminished",
"dominant diminished",
"messiaen's mode #2"
],
["1P 3m 3M 4P 5P 6M 7m 7M", "kafi raga"],
["1P 2M 3M 4P 4A 5A 6A 7M", "messiaen's mode #6"],
["1P 2M 3m 3M 4P 5d 5P 6M 7m", "composite blues"],
["1P 2M 3m 3M 4A 5P 6m 7m 7M", "messiaen's mode #3"],
["1P 2m 2M 3m 4P 4A 5P 6m 6M 7M", "messiaen's mode #7"],
["1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M", "chromatic"]
], xn = En, kn = {
...w,
intervals: [],
aliases: []
}, A1 = [], C = {};
function Om() {
return A1.map((m) => m.name);
}
function N1(m) {
return C[m] || kn;
}
var Fn = b(
"ScaleDictionary.scaleType",
"ScaleType.get",
N1
);
function U() {
return A1.slice();
}
var Rn = b(
"ScaleDictionary.entries",
"ScaleType.all",
U
);
function On() {
return Object.keys(C);
}
function zn() {
A1 = [], C = {};
}
function zm(m, t, n = []) {
const e = { ...v(m), name: t, intervals: m, aliases: n };
return A1.push(e), C[e.name] = e, C[e.setNum] = e, C[e.chroma] = e, e.aliases.forEach((r) => Gn(e, r)), e;
}
function Gn(m, t) {
C[t] = m;
}
xn.forEach(
([m, t, ...n]) => zm(m.split(" "), t, n)
);
var Gm = {
names: Om,
get: N1,
all: U,
add: zm,
removeAll: zn,
keys: On,
entries: Rn,
scaleType: Fn
}, R1 = {
empty: !0,
name: "",
symbol: "",
root: "",
rootDegree: 0,
type: "",
tonic: null,
setNum: NaN,
quality: "Unknown",
chroma: "",
normalized: "",
aliases: [],
notes: [],
intervals: []
}, Bn = /^(6|64|7|9|11|13)$/;
function I1(m) {
const [t, n, e, r] = h1(m);
return t === "" ? ["", m] : t === "A" && r === "ug" ? ["", "aug"] : !r && (e === "4" || e === "5") ? [t + n, e] : Bn.test(e) ? [t + n, e + r] : [t + n + e, r];
}
function E(m) {
if (m === "")
return R1;
if (Array.isArray(m) && m.length === 2)
return P1(m[1], m[0]);
{
const [t, n] = I1(m), e = P1(n, t);
return e.empty ? P1(m) : e;
}
}
function P1(m, t, n) {
const e = Q1(m), r = u(t || ""), o = u(n || "");
if (e.empty || t && r.empty || n && o.empty)
return R1;
const M = B(r.pc, o.pc), P = e.intervals.indexOf(M) + 1;
if (!o.empty && !P)
return R1;
const a = Array.from(e.intervals);
for (let c = 1; c < P; c++) {
const l = a[0][0], p = a[0][1], T = parseInt(l, 10) + 7;
a.push(`${T}${p}`), a.shift();
}
const i = r.empty ? [] : a.map((c) => h(r, c));
m = e.aliases.indexOf(m) !== -1 ? m : e.aliases[0];
const s = `${r.empty ? "" : r.pc}${m}${o.empty || P <= 1 ? "" : "/" + o.pc}`, d = `${t ? r.pc + " " : ""}${e.name}${P > 1 && n ? " over " + o.pc : ""}`;
return {
...e,
name: d,
symbol: s,
type: e.name,
root: o.name,
intervals: a,
rootDegree: P,
tonic: r.name,
notes: i
};
}
var qn = b("Chord.chord", "Chord.get", E);
function Ln(m, t) {
const [n, e] = I1(m);
return n ? h(n, t) + e : m;
}
function Hn(m) {
const t = E(m), n = g1(t.chroma);
return U().filter((e) => n(e.chroma)).map((e) => e.name);
}
function Un(m) {
const t = E(m), n = g1(t.chroma);
return H().filter((e) => n(e.chroma)).map((e) => t.tonic + e.aliases[0]);
}
function Xn(m) {
const t = E(m), n = v1(t.chroma);
return H().filter((e) => n(e.chroma)).map((e) => t.tonic + e.aliases[0]);
}
function Kn(m) {
const { intervals: t, tonic: n } = E(m), e = G(t, n);
return (r) => r ? e(r > 0 ? r - 1 : r) : "";
}
function Jn(m) {
const { intervals: t, tonic: n } = E(m);
return G(t, n);
}
var Qn = {
getChord: P1,
get: E,
detect: jn,
chordScales: Hn,
extended: Un,
reduced: Xn,
tokenize: I1,
transpose: Ln,
degrees: Kn,
steps: Jn,
chord: qn
}, Wn = [
[
0.125,
"dl",
["large", "duplex longa", "maxima", "octuple", "octuple whole"]
],
[0.25, "l", ["long", "longa"]],
[0.5, "d", ["double whole", "double", "breve"]],
[1, "w", ["whole", "semibreve"]],
[2, "h", ["half", "minim"]],
[4, "q", ["quarter", "crotchet"]],
[8, "e", ["eighth", "quaver"]],
[16, "s", ["sixteenth", "semiquaver"]],
[32, "t", ["thirty-second", "demisemiquaver"]],
[64, "sf", ["sixty-fourth", "hemidemisemiquaver"]],
[128, "h", ["hundred twenty-eighth"]],
[256, "th", ["two hundred fifty-sixth"]]
], Yn = Wn, $1 = [];
Yn.forEach(
([m, t, n]) => Me(m, t, n)
);
var Zn = {
empty: !0,
name: "",
value: 0,
fraction: [0, 0],
shorthand: "",
dots: "",
names: []
};
function me() {
return $1.reduce((m, t) => (t.names.forEach((n) => m.push(n)), m), []);
}
function te() {
return $1.map((m) => m.shorthand);
}
var ne = /^([^.]+)(\.*)$/;
function W1(m) {
const [t, n, e] = ne.exec(m) || [], r = $1.find(
(P) => P.shorthand === n || P.names.includes(n)
);
if (!r)
return Zn;
const o = Pe(r.fraction, e.length), M = o[0] / o[1];
return { ...r, name: m, dots: e, value: M, fraction: o };
}
var ee = (m) => W1(m).value, re = (m) => W1(m).fraction, oe = { names: me, shorthands: te, get: W1, value: ee, fraction: re };
function Me(m, t, n) {
$1.push({
empty: !1,
dots: "",
name: "",
value: 1 / m,
fraction: m < 1 ? [1 / m, 1] : [1, m],
shorthand: t,
names: n
});
}
function Pe(m, t) {
const n = Math.pow(2, t);
let e = m[0] * n, r = m[1] * n;
const o = e;
for (let M = 0; M < t; M++)
e += o / Math.pow(2, M + 1);
for (; e % 2 === 0 && r % 2 === 0; )
e /= 2, r /= 2;
return [e, r];
}
function ae() {
return "1P 2M 3M 4P 5P 6m 7m".split(" ");
}
var Bm = f, ie = (m) => f(m).name, se = (m) => f(m).semitones, ce = (m) => f(m).q, ue = (m) => f(m).num;
function qm(m) {
const t = f(m);
return t.empty ? "" : t.simple + t.q;
}
function de(m) {
const t = f(m);
if (t.empty)
return "";
const n = (7 - t.step) % 7, e = t.type === "perfectable" ? -t.alt : -(t.alt + 1);
return f({ step: n, alt: e, oct: t.oct, dir: t.dir }).name;
}
var le = [1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7], fe = "P m M m M P d P m M m M".split(" ");
function he(m) {
const t = m < 0 ? -1 : 1, n = Math.abs(m), e = n % 12, r = Math.floor(n / 12);
return t * (le[e] + 7 * r) + fe[e];
}
var pe = B, Lm = Um((m, t) => [m[0] + t[0], m[1] + t[1]]), ve = (m) => (t) => Lm(m, t), ge = Um((m, t) => [m[0] - t[0], m[1] - t[1]]);
function Hm(m, t) {
const n = Bm(m);
if (n.empty)
return "";
const [e, r, o] = n.coord;
return Y([e + t, r, o]).name;
}
var F = {
names: ae,
get: Bm,
name: ie,
num: ue,
semitones: se,
quality: ce,
fromSemitones: he,
distance: pe,
invert: de,
simplify: qm,
add: Lm,
addTo: ve,
substract: ge,
transposeFifths: Hm
};
function Um(m) {
return (t, n) => {
const e = f(t).coord, r = f(n).coord;
if (e && r) {
const o = m(e, r);
return Y(o).name;
}
};
}
function Xm(m) {
return +m >= 0 && +m <= 127;
}
function Km(m) {
if (Xm(m))
return +m;
const t = u(m);
return t.empty ? null : t.midi;
}
function be(m, t = 440) {
return Math.pow(2, (m - 69) / 12) * t;
}
var ye = Math.log(2), Ae = Math.log(440);
function Y1(m) {
const t = 12 * (Math.log(m) - Ae) / ye + 69;
return Math.round(t * 100) / 100;
}
var Ne = "C C# D D# E F F# G G# A A# B".split(" "), Ie = "C Db D Eb E F Gb G Ab A Bb B".split(" ");
function S(m, t = {}) {
if (isNaN(m) || m === -1 / 0 || m === 1 / 0)
return "";
m = Math.round(m);
const e = (t.sharps === !0 ? Ne : Ie)[m % 12];
if (t.pitchClass)
return e;
const r = Math.floor(m / 12) - 1;
return e + r;
}
function Z1(m) {
return m % 12;
}
function $e(m) {
return m.split("").reduce((t, n, e) => (e < 12 && n === "1" && t.push(e), t), []);
}
function je(m) {
return m.map(Z1).sort((t, n) => t - n).filter((t, n, e) => n === 0 || t !== e[n - 1]);
}
function mm(m) {
return Array.isArray(m) ? je(m) : $e(m);
}
function Se(m) {
const t = mm(m);
return (n) => {
const e = Z1(n);
for (let r = 0; r < 12; r++) {
if (t.includes(e + r))
return n + r;
if (t.includes(e - r))
return n - r;
}
};
}
function Jm(m, t) {
const n = mm(m), e = n.length;
return (r) => {
const o = r < 0 ? (e - -r % e) % e : r % e, M = Math.floor(r / e);
return n[o] + M * 12 + t;
};
}
function Te(m, t) {
const n = Jm(m, t);
return (e) => {
if (e !== 0)
return n(e > 0 ? e - 1 : e);
};
}
var _e = {
chroma: Z1,
freqToMidi: Y1,
isMidi: Xm,
midiToFreq: be,
midiToNoteName: S,
pcsetNearest: Se,
pcset: mm,
pcsetDegrees: Te,
pcsetSteps: Jm,
toMidi: Km
}, Ce = ["C", "D", "E", "F", "G", "A", "B"], Qm = (m) => m.name, Wm = (m) => m.map(u).filter((t) => !t.empty);
function Ve(m) {
return m === void 0 ? Ce.slice() : Array.isArray(m) ? Wm(m).map(Qm) : [];
}
var A = u, we = (m) => A(m).name, De = (m) => A(m).pc, Ee = (m) => A(m).acc, xe = (m) => A(m).oct, ke = (m) => A(m).midi, Fe = (m) => A(m).freq, Re = (m) => A(m).chroma;
function Ym(m) {
return S(m);
}
function Oe(m) {
return S(Y1(m));
}
function ze(m) {
return S(Y1(m), { sharps: !0 });
}
function Ge(m) {
return S(m, { sharps: !0 });
}
var Z = h, Be = h, Zm = (m) => (t) => Z(t, m), qe = Zm, mt = (m) => (t) => Z(m, t), Le = mt;
function d1(m, t) {
return Z(m, [t, 0]);
}
var He = d1;
function Ue(m, t) {
return Z(m, [0, t]);
}
var tm = (m, t) => m.height - t.height, Xe = (m, t) => t.height - m.height;
function tt(m, t) {
return t = t || tm, Wm(m).sort(t).map(Qm);
}
function nt(m) {
return tt(m, tm).filter(
(t, n, e) => n === 0 || t !== e[n - 1]
);
}
var Ke = (m) => {
const t = A(m);
return t.empty ? "" : S(t.midi || t.chroma, {
sharps: t.alt > 0,
pitchClass: t.midi === null
});
};
function et(m, t) {
const n = A(m);
if (n.empty)
return "";
const e = A(
t || S(n.midi || n.chroma, {
sharps: n.alt < 0,
pitchClass: !0
})
);
if (e.empty || e.chroma !== n.chroma)
return "";
if (n.oct === void 0)
return e.pc;
const r = n.chroma - n.alt, o = e.chroma - e.alt, M = r > 11 || o < 0 ? -1 : r < 0 || o > 11 ? 1 : 0, P = n.oct + M;
return e.pc + P;
}
var j = {
names: Ve,
get: A,
name: we,
pitchClass: De,
accidentals: Ee,
octave: xe,
midi: ke,
ascending: tm,
descending: Xe,
sortedNames: tt,
sortedUniqNames: nt,
fromMidi: Ym,
fromMidiSharps: Ge,
freq: Fe,
fromFreq: Oe,
fromFreqSharps: ze,
chroma: Re,
transpose: Z,
tr: Be,
transposeBy: Zm,
trBy: qe,
transposeFrom: mt,
trFrom: Le,
transposeFifths: d1,
transposeOctaves: Ue,
trFifths: He,
simplify: Ke,
enharmonic: et
}, rt = { empty: !0, name: "", chordType: "" }, dm = {};
function $(m) {
return typeof m == "string" ? dm[m] || (dm[m] = tr(m)) : typeof m == "number" ? $(j1[m] || "") : Q(m) ? We(m) : J(m) ? $(m.name) : rt;
}
var Je = b(
"RomanNumeral.romanNumeral",
"RomanNumeral.get",
$
);
function Qe(m = !0) {
return (m ? j1 : mr).slice();
}
function We(m) {
return $(z(m.alt) + j1[m.step]);
}
var Ye = /^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/;
function Ze(m) {
return Ye.exec(m) || ["", "", "", ""];
}
var ot = "I II III IV V VI VII", j1 = ot.split(" "), mr = ot.toLowerCase().split(" ");
function tr(m) {
const [t, n, e, r] = Ze(m);
if (!e)
return rt;
const o = e.toUpperCase(), M = j1.indexOf(o), P = W(n), a = 1;
return {
empty: !1,
name: t,
roman: e,
interval: f({ step: M, alt: P, dir: a }).name,
acc: n,
chordType: r,
alt: P,
step: M,
major: e === o,
oct: 0,
dir: a
};
}
var nr = {
names: Qe,
get: $,
romanNumeral: Je
}, g = Object.freeze([]), Mt = {
type: "major",
tonic: "",
alteration: 0,
keySignature: ""
}, a1 = {
tonic: "",
grades: g,
intervals: g,
scale: g,
triads: g,
chords: g,
chordsHarmonicFunction: g,
chordScales: g
}, er = {
...Mt,
...a1,
type: "major",
minorRelative: "",
scale: g,
secondaryDominants: g,
secondaryDominantsMinorRelative: g,
substituteDominants: g,
substituteDominantsMinorRelative: g
}, rr = {
...Mt,
type: "minor",
relativeMajor: "",
natural: a1,
harmonic: a1,
melodic: a1
}, D1 = (m, t, n = "") => t.map((e, r) => `${m[r]}${n}${e}`);
function S1(m, t, n, e, r) {
return (o) => {
const M = m.map((a) => $(a).interval || ""), P = M.map((a) => h(o, a));
return {
tonic: o,
grades: m,
intervals: M,
scale: P,
triads: D1(P, t),
chords: D1(P, n),
chordsHarmonicFunction: e.slice(),
chordScales: D1(P, r, " ")
};
};
}
var Pt = (m, t) => {
const n = u(m), e = u(t);
return n.empty || e.empty ? 0 : e.coord[0] - n.coord[0];
}, or = S1(
"I II III IV V VI VII".split(" "),
" m m m dim".split(" "),
"maj7 m7 m7 maj7 7 m7 m7b5".split(" "),
"T SD T SD D T D".split(" "),
"major,dorian,phrygian,lydian,mixolydian,minor,locrian".split(",")
), Mr = S1(
"I II bIII IV V bVI bVII".split(" "),
"m dim m m ".split(" "),
"m7 m7b5 maj7 m7 m7 maj7 7".split(" "),
"T SD T SD D SD SD".split(" "),
"minor,locrian,major,dorian,phrygian,lydian,mixolydian".split(",")
), Pr = S1(
"I II bIII IV V bVI VII".split(" "),
"m dim aug m dim".split(" "),
"mMaj7 m7b5 +maj7 m7 7 maj7 o7".split(" "),
"T SD T SD D SD D".split(" "),
"harmonic minor,locrian 6,major augmented,lydian diminished,phrygian dominant,lydian #9,ultralocrian".split(
","
)
), ar = S1(
"I II bIII IV V VI VII".split(" "),
"m m aug dim dim".split(" "),
"m6 m7 +maj7 7 7 m7b5 m7b5".split(" "),
"T SD T SD D ".split(" "),
"melodic minor,dorian b2,lydian augmented,lydian dominant,mixolydian b6,locrian #2,altered".split(
","
)
);
function ir(m) {
const t = u(m).pc;
if (!t)
return er;
const n = or(t), e = Pt("C", t), r = (o) => {
const M = $(o);
return M.empty ? "" : h(m, M.interval) + M.chordType;
};
return {
...n,
type: "major",
minorRelative: h(t, "-3m"),
alteration: e,
keySignature: z(e),
secondaryDominants: "- VI7 VII7 I7 II7 III7 -".split(" ").map(r),
secondaryDominantsMinorRelative: "- IIIm7b5 IV#m7 Vm7 VIm7 VIIm7b5 -".split(" ").map(r),
substituteDominants: "- bIII7 IV7 bV7 bVI7 bVII7 -".split(" ").map(r),
substituteDominantsMinorRelative: "- IIIm7 Im7 IIbm7 VIm7 IVm7 -".split(" ").map(r)
};
}
function sr(m) {
const t = u(m).pc;
if (!t)
return rr;
const n = Pt("C", t) - 3;
return {
type: "minor",
tonic: t,
relativeMajor: h(t, "3m"),
alteration: n,
keySignature: z(n),
natural: Mr(t),
harmonic: Pr(t),
melodic: ar(t)
};
}
function cr(m) {
return typeof m == "number" ? d1("C", m) : typeof m == "string" && /^b+|#+$/.test(m) ? d1("C", W(m)) : null;
}
var ur = { majorKey: ir, majorTonicFromKeySignature: cr, minorKey: sr }, nm = [
[0, 2773, 0, "ionian", "", "Maj7", "major"],
[1, 2902, 2, "dorian", "m", "m7"],
[2, 3418, 4, "phrygian", "m", "m7"],
[3, 2741, -1, "lydian", "", "Maj7"],
[4, 2774, 1, "mixolydian", "", "7"],
[5, 2906, 3, "aeolian", "m", "m7", "minor"],
[6, 3434, 5, "locrian", "dim", "m7b5"]
], lm = {
...w,
name: "",
alt: 0,
modeNum: NaN,
triad: "",
seventh: "",
aliases: []
}, em = nm.map(hr), O1 = {};
em.forEach((m) => {
O1[m.name] = m, m.aliases.forEach((t) => {
O1[t] = m;
});
});
function D(m) {
return typeof m == "string" ? O1[m.toLowerCase()] || lm : m && m.name ? D(m.name) : lm;
}
var dr = b("Mode.mode", "Mode.get", D);
function at() {
return em.slice();
}
var lr = b("Mode.mode", "Mode.all", at);
function fr() {
return em.map((m) => m.name);
}
function hr(m) {
const [t, n, e, r, o, M, P] = m, a = P ? [P] : [], i = Number(n).toString(2);
return {
empty: !1,
intervals: N1(r).intervals,
modeNum: t,
chroma: i,
normalized: i,
name: r,
setNum: n,
alt: e,
triad: o,
seventh: M,
aliases: a
};
}
function pr(m, t) {
return D(m).intervals.map((n) => h(t, n));
}
function it(m) {
return (t, n) => {
const e = D(t);
if (e.empty)
return [];
const r = q(e.modeNum, m), o = e.intervals.map((M) => h(n, M));
return r.map((M, P) => o[P] + M);
};
}
var vr = it(nm.map((m) => m[4])), gr = it(nm.map((m) => m[5]));
function st(m, t) {
const n = D(t), e = D(m);
return n.empty || e.empty ? "" : qm(Hm("1P", e.alt - n.alt));
}
function br(m, t, n) {
return h(n, st(m, t));
}
var yr = {
get: D,
names: fr,
all: at,
distance: st,
relativeTonic: br,
notes: pr,
triads: vr,
seventhChords: gr,
entries: lr,
mode: dr
};
function Ar(m, t) {
return t.map($).map(
(e) => h(m, f(e)) + e.chordType
);
}
function Nr(m, t) {
return t.map((n) => {
const [e, r] = I1(n), o = B(m, e);
return $(f(o)).name + r;
});
}
var Ir = { fromRomanNumerals: Ar, toRomanNumerals: Nr };
function ct(m) {
const t = U1(
m.map((n) => typeof n == "number" ? n : Km(n))
);
return !m.length || t.length !== m.length ? [] : t.reduce(
(n, e) => {
const r = n[n.length - 1];
return n.concat(p1(r, e).slice(1));
},
[t[0]]
);
}
function $r(m, t) {
return ct(m).map((n) => S(n, t));
}
var jr = { numeric: ct, chromatic: $r }, Sr = {
empty: !0,
name: "",
type: "",
tonic: null,
setNum: NaN,
chroma: "",
normalized: "",
aliases: [],
notes: [],
intervals: []
};
function ut(m) {
if (typeof m != "string")
return ["", ""];
const t = m.indexOf(" "), n = u(m.substring(0, t));
if (n.empty) {
const r = u(m);
return r.empty ? ["", m] : [r.name, ""];
}
const e = m.substring(n.name.length + 1);
return [n.name, e.length ? e : ""];
}
var Tr = Om;
function I(m) {
const t = Array.isArray(m) ? m : ut(m), n = u(t[0]).name, e = N1(t[1]);
if (e.empty)
return Sr;
const r = e.name, o = n ? e.intervals.map((P) => h(n, P)) : [], M = n ? n + " " + r : r;
return { ...e, name: M, type: r, tonic: n, notes: o };
}
var _r = b("Scale.scale", "Scale.get", I);
function Cr(m, t = {}) {
const n = Em(m), e = u(t.tonic ?? m[0] ?? ""), r = e.chroma;
if (r === void 0)
return [];
const o = n.split("");
o[r] = "1";
const M = q(r, o).join(""), P = U().find((i) => i.chroma === M), a = [];
return P && a.push(e.name + " " + P.name), t.match === "exact" || dt(M).forEach((i) => {
a.push(e.name + " " + i);
}), a;
}
function Vr(m) {
const t = I(m), n = v1(t.chroma);
return H().filter((e) => n(e.chroma)).map((e) => e.aliases[0]);
}
function dt(m) {
const t = K1(m) ? m : I(m).chroma, n = g1(t);
return U().filter((e) => n(e.chroma)).map((e) => e.name);
}
function wr(m) {
const t = v1(I(m).chroma);
return U().filter((n) => t(n.chroma)).map((n) => n.name);
}
function lt(m) {
const t = m.map((r) => u(r).pc).filter((r) => r), n = t[0], e = nt(t);
return q(e.indexOf(n), e);
}
function Dr(m) {
const t = I(m);
if (t.empty)
return [];
const n = t.tonic ? t.notes : t.intervals;
return J1(t.chroma).map((e, r) => {
const o = I(e).name;
return o ? [n[r], o] : ["", ""];
}).filter((e) => e[0]);
}
function Er(m) {
const t = Array.isArray(m) ? lt(m) : I(m).notes, n = t.map((e) => u(e).chroma);
return (e) => {
const r = u(typeof e == "number" ? Ym(e) : e), o = r.height;
if (o === void 0)
return;
const M = o % 12, P = n.indexOf(M);
if (P !== -1)
return et(r.name, t[P]);
};
}
function xr(m) {
const t = Er(m);
return (n, e) => {
const r = u(n).height, o = u(e).height;
return r === void 0 || o === void 0 ? [] : p1(r, o).map(t).filter((M) => M);
};
}
function kr(m) {
const { intervals: t, tonic: n } = I(m), e = G(t, n);
return (r) => r ? e(r > 0 ? r - 1 : r) : "";
}
function Fr(m) {
const { intervals: t, tonic: n } = I(m);
return G(t, n);
}
var R = {
degrees: kr,
detect: Cr,
extended: dt,
get: I,
modeNames: Dr,
names: Tr,
rangeOf: xr,
reduced: wr,
scaleChords: Vr,
scaleNotes: lt,
steps: Fr,
tokenize: ut,
scale: _r
}, Rr = {
empty: !0,
name: "",
upper: void 0,
lower: void 0,
type: void 0,
additive: []
}, Or = ["4/4", "3/4", "2/4", "2/2", "12/8", "9/8", "6/8", "3/8"];
function zr() {
return Or.slice();
}
var Gr = /^(\d*\d(?:\+\d)*)\/(\d+)$/, fm = /* @__PURE__ */ new Map();
function Br(m) {
const t = JSON.stringify(m), n = fm.get(t);
if (n)
return n;
const e = Hr(rm(m));
return fm.set(t, e), e;
}
function rm(m) {
if (typeof m == "string") {
const [o, M, P] = Gr.exec(m) || [];
return rm([M, P]);
}
const [t, n] = m, e = +n;
if (typeof t == "number")
return [t, e];
const r = t.split("+").map((o) => +o);
return r.length === 1 ? [r[0], e] : [r, e];
}
var qr = { names: zr, parse: rm, get: Br }, Lr = (m) => Math.log(m) / Math.log(2) % 1 === 0;
function Hr([m, t]) {
const n = Array.isArray(m) ? m.reduce((P, a) => P + a, 0) : m, e = t;
if (n === 0 || e === 0)
return Rr;
const r = Array.isArray(m) ? `${m.join("+")}/${t}` : `${m}/${t}`, o = Array.isArray(m) ? m : [], M = e === 4 || e === 2 ? "simple" : e === 8 && n % 3 === 0 ? "compound" : Lr(e) ? "irregular" : "irrational";
return {
empty: !1,
name: r,
type: M,
upper: n,
lower: e,
additive: o
};
}
var Ur = Tm, Xr = km, Kr = Rm, Jr = Gm;
const Qr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
AbcNotation: zt,
Array: Kt,
Chord: Qn,
ChordDictionary: Kr,
ChordType: Rm,
Collection: Yt,
Core: Tm,
DurationValue: oe,
Interval: F,
Key: ur,
Midi: _e,
Mode: yr,
Note: j,
PcSet: Xr,
Pcset: km,
Progression: Ir,
Range: jr,
RomanNumeral: nr,
Scale: R,
ScaleDictionary: Jr,
ScaleType: Gm,
TimeSignature: qr,
Tonal: Ur,
accToAlt: W,
altToAcc: z,
coordToInterval: Y,
coordToNote: L1,
decode: f1,
deprecate: b,
distance: B,
encode: l1,
fillStr: k,
interval: f,
isNamed: J,
isPitch: Q,
note: u,
stepToLetter: q1,
tokenizeInterval: H1,
tokenizeNote: h1,
tonicIntervalsTransposer: G,
transpose: h
}, Symbol.toStringTag, { value: "Module" })), Wr = ["C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B"], Yr = ["c", "db", "d", "eb", "e", "f", "gb", "g", "ab", "a", "bb", "b"], Zr = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"], mo = { b: -1, "#": 1 }, to = (m) => {
const [t, ...n] = m.split("");
return Yr.indexOf(t.toLowerCase()) + n.reduce((e, r) => e + mo[r], 0);
};
function no(m) {
const t = (m || "").match(/^([A-G][b#]*)([^/]*)[/]?([A-G][b#]*)?$/);
return t ? t.slice(1) : [];
}
const z1 = (m) => m % 12, ft = (m) => {
let t = Number(m);
return isNaN(t) ? F.semitones(m) : t;
}, G1 = (m, t) => {
if (typeof m == "number")
return m;
if (typeof m == "string")
return Am(m, t);
}, eo = (m, t = !1) => {
const n = Math.floor(m / 12) - 1;
return (t ? Zr : Wr)[m % 12] + n;
};
function ro(m, t, n = 1) {
m = m.map((r) => typeof r == "string" ? Am(r) : r);
const e = Math.floor(t / m.length) * n * 12;
return t = V(t, m.length), m[t] + e;
}
function oo(m, t, n) {
let e = 0, r = 1 / 0;
return t.forEach((o, M) => {
const P = Math.abs(o - m);
(!n && P < r || n && P <= r) && (e = M, r = P);
}), e;
}
let E1 = {};
function Mo(m, t, n, e) {
let [r, o] = R.tokenize(t);
const M = G1(r), P = z1(M);
if (!E1[o]) {
let { intervals: c } = R.get(`C ${o}`);
E1[o] = c.map(ft);
}
const a = E1[o];
if (!a)
return null;
let i = M;
if (n) {
n = G1(n, 3);
const c = z1(n), l = V(c - P, 12), p = oo(l, a, e);
m = m + p, i = n - l;
}
const s = Math.floor(m / a.length) * 12;
return m = V(m, a.length), a[m] + i + s;
}
let hm = {
below: (m) => m.slice(-1)[0],
duck: (m) => m.slice(-1)[0],
above: (m) => m[0],
root: (m) => m[0]
};
function Po({ chord: m, dictionary: t, offset: n = 0, n: e, mode: r = "below", anchor: o = "c5", octaves: M = 1 }) {
const [P, a] = no(m), i = to(P);
o = G1(o?.note || o, 4);
const s = z1(o), d = t[a].map(
(N) => (typeof N == "string" ? N.split(" ") : N).map(ft)
);
let c, l, p = d.map((N, C1) => {
const yt = hm[r](N), V1 = V(s - yt - i, 12);
return (c === void 0 || V1 < c) && (c = V1, l = C1), V1;
});
r === "root" && (l = 0);
const T = Math.ceil(n / d.length) * 12, e1 = V(l + n, d.length), r1 = d[e1], y = hm[r](r1), _1 = o - p[e1] + T, om = r1.map((N) => _1 - y + N);
let o1 = om.map((N) => eo(N));
return r === "duck" && (o1 = o1.filter((N, C1) => om[C1] !== o)), e !== void 0 ? [ro(o1, e, M)] : o1;
}
const ao = (m) => (m <= 0 ? -1 : 1) + m * 7 + "P";
function io(m, t) {
t = t.replaceAll(":", " "), m = Math.ceil(m);
let { intervals: n, tonic: e, empty: r } = R.get(t);
if (r && B1(t) || !r && !e)
throw new Error('incomplete scale. Make sure to use ":" instead of spaces, example: .scale("C:major")');
if (r)
throw new Error(`invalid scale "${t}"`);
e = e || "C";
const { pc: o, oct: M = 3 } = j.get(e), P = Math.floor(m / n.length), a = V(m, n.length), i = F.add(n[a], ao(P));
return j.transpose(o + M, i);
}
function pm(m, t, n) {
let [e, r] = R.tokenize(m), { notes: o } = R.get(`${e} ${r}`);
if (o = o.map((l) => j.get(l).pc), t = Number(t), isNaN(t))
throw new Error(`scale offset "${t}" not a number`);
const { pc: M, oct: P = 3 } = j.get(n), a = o.indexOf(M);
if (a === -1)
throw new Error(`note "${n}" is not in scale "${m}"`);
let i = a, s = P, d = M;
const c = Math.sign(t);
for (; Math.abs(i - a) < Math.abs(t); ) {
i += c;
const l = V(i, o.length);
c < 0 && d[0] === "C" && (s += c), d = o[l], c > 0 && d[0] === "C" && (s += c);
}
return d + s;
}
const $o = O("transpose", function(m, t) {
return t.withHap((n) => {
const e = n.value.note ?? n.value;
if (typeof e == "number") {
let M;
typeof m == "number" ? M = m : typeof m == "string" && (M = F.semitones(m) || 0);
const P = e + M;
return typeof n.value == "object" ? n.withValue(() => ({ ...n.value, note: P })) : n.withValue(() => P);
}
if (typeof e != "string" || !B1(e))
return c1(`[tonal] transpose: not a note "${e}"`, "warning"), n;
const r = isNaN(Number(m)) ? String(m) : F.fromSemitones(m), o = j.simplify(j.transpose(e, r));
return typeof n.value == "object" ? n.withValue(() => ({ ...n.value, note: o })) : n.withValue(() => o);
});
}), jo = O("scaleTranspose", function(m, t) {
return t.withHap((n) => {
if (!n.context.scale)
throw new Error("can only use scaleTranspose after .scale");
if (typeof n.value == "object")
return n.withValue(() => ({
...n.value,
note: pm(n.context.scale, Number(m), n.value.note)
}));
if (typeof n.value != "string")
throw new Error("can only use scaleTranspose with notes");
return n.withValue(() => pm(n.context.scale, Number(m), n.value));
});
}), So = O(
"scale",
function(m, t) {
return Array.isArray(m) && (m = m.flat().join(" ")), t.fmap((n) => {
const e = typeof n == "object";
let r = e ? n.n : n;
if (e && delete n.n, B1(r))
return Mm(r);
let o = Number(r), M = 0;
if (isNaN(o)) {
if (r = String(r), !/^[-+]?\d+(#*|b*){1}$/.test(r))
return c1(
`[tonal] invalid scale step "${r}"