UNPKG

@tonaljs/note

Version:

Parse and manipulate music notes in scientific notation

160 lines 3.67 kB
// index.ts import { freqToMidi, midiToNoteName } from "@tonaljs/midi"; import { distance as _dist, transpose as _tr } from "@tonaljs/pitch-distance"; import { note as props } from "@tonaljs/pitch-note"; var NAMES = ["C", "D", "E", "F", "G", "A", "B"]; var toName = (n) => n.name; var onlyNotes = (array) => array.map(props).filter((n) => !n.empty); function names(array) { if (array === void 0) { return NAMES.slice(); } else if (!Array.isArray(array)) { return []; } else { return onlyNotes(array).map(toName); } } var get = props; var name = (note) => get(note).name; var pitchClass = (note) => get(note).pc; var accidentals = (note) => get(note).acc; var octave = (note) => get(note).oct; var midi = (note) => get(note).midi; var freq = (note) => get(note).freq; var chroma = (note) => get(note).chroma; function fromMidi(midi2) { return midiToNoteName(midi2); } function fromFreq(freq2) { return midiToNoteName(freqToMidi(freq2)); } function fromFreqSharps(freq2) { return midiToNoteName(freqToMidi(freq2), { sharps: true }); } function fromMidiSharps(midi2) { return midiToNoteName(midi2, { sharps: true }); } var distance = _dist; var transpose = _tr; var tr = _tr; var transposeBy = (interval) => (note) => transpose(note, interval); var trBy = transposeBy; var transposeFrom = (note) => (interval) => transpose(note, interval); var trFrom = transposeFrom; function transposeFifths(noteName, fifths) { return transpose(noteName, [fifths, 0]); } var trFifths = transposeFifths; function transposeOctaves(noteName, octaves) { return transpose(noteName, [0, octaves]); } var ascending = (a, b) => a.height - b.height; var descending = (a, b) => b.height - a.height; function sortedNames(notes, comparator) { comparator = comparator || ascending; return onlyNotes(notes).sort(comparator).map(toName); } function sortedUniqNames(notes) { return sortedNames(notes, ascending).filter( (n, i, a) => i === 0 || n !== a[i - 1] ); } var simplify = (noteName) => { const note = get(noteName); if (note.empty) { return ""; } return midiToNoteName(note.midi || note.chroma, { sharps: note.alt > 0, pitchClass: note.midi === null }); }; function enharmonic(noteName, destName) { const src = get(noteName); if (src.empty) { return ""; } const dest = get( destName || midiToNoteName(src.midi || src.chroma, { sharps: src.alt < 0, pitchClass: true }) ); if (dest.empty || dest.chroma !== src.chroma) { return ""; } if (src.oct === void 0) { return dest.pc; } const srcChroma = src.chroma - src.alt; const destChroma = dest.chroma - dest.alt; const destOctOffset = srcChroma > 11 || destChroma < 0 ? -1 : srcChroma < 0 || destChroma > 11 ? 1 : 0; const destOct = src.oct + destOctOffset; return dest.pc + destOct; } var index_default = { names, get, name, pitchClass, accidentals, octave, midi, ascending, descending, distance, sortedNames, sortedUniqNames, fromMidi, fromMidiSharps, freq, fromFreq, fromFreqSharps, chroma, transpose, tr, transposeBy, trBy, transposeFrom, trFrom, transposeFifths, transposeOctaves, trFifths, simplify, enharmonic }; export { accidentals, ascending, chroma, index_default as default, descending, distance, enharmonic, freq, fromFreq, fromFreqSharps, fromMidi, fromMidiSharps, get, midi, name, names, octave, pitchClass, simplify, sortedNames, sortedUniqNames, tr, trBy, trFifths, trFrom, transpose, transposeBy, transposeFifths, transposeFrom, transposeOctaves }; //# sourceMappingURL=index.mjs.map