UNPKG

@strudel/repl

Version:
1,806 lines 75.8 kB
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}"