Nebulous Pumpkin Moons

    @rharel/music-note-utils

    1.0.1 • Public • Published

    Build Status Coverage

    Musical Note Utilities

    ...is a little JavaScript library aiming to help you model and manipulate musical notes.

    Installation

    Either require('@rharel/music-note-utils') or include in the browser with <script src="music_note_utils.js"></script>.

    Usage

    var MusicNoteUtilities = require('@rharel/music-note-utils');

    or if in-browser:

    window.MusicNoteUtilities;

    Tuning

    By default, the library operates with the assumption that the frequency of A4 is 440Hz, but this can be changed:

    MusicNoteUtilities.A4_frequency = 442;  // default is 440

    Pitch classes

    The PitchClass enumeration provides useful information about each pitch class A-G, and is also a property of the Note object.

    var PitchClass = MusicNoteUtilities.PitchClass;
    
    // The class' index (0-6, corresponding to A-G).
    PitchClass.A.index;  // 0
    
    // The class' index as a key in an octave
    // (an octave has 12 keys).
    PitchClass.A.index_in_octave;  // 9
    
    // The class' letter symbol
    PitchClass.A.letter;  // "A"
    
    // Gets the class with the specified index.
    var A = PitchClass.with_index(0);  // PitchClass.A

    Accidentals

    The Accidental enumeration provides useful information about possible accidental modifications of a note, and is also a property of the Note object.

    var Accidental = MusicNoteUtilities.Accidental;
    
    // The accidental's implied semi-tone shift.
    Accidental.None.shift;  // 0
    Accidental.Sharp.shift;  // 1
    Accidental.Flat.shift;  // -1
    
    // The accidental's symbol.
    Accidental.None.symbol;  // ""
    Accidental.Sharp.symbol;  // "#"
    Accidental.Flat.symbol;  // "b"

    Notes

    Construction

    Note objects can be created by multiple ways:

    var Note = MusicNoteUtilities.Note;
    
    // From strings:
    var As5 = Note.from_string("A#5");
    
    // From frequencies:
    var A4 = Note.from_frequency(440);
    
    // From indices relative to A4:
    var A3 = Note.from_index(-12);
    
    // From MIDI numbers:
    var A4 = Note.from_midi_number(69);
    
    // Explicitly:
    var Cb5 = Note.C(Accidental.Flat, 5);
    
    // Even more explicitly:
    var Db5 = new Note(PitchClass.D, Accidental.Flat, 5);

    Query and manipulation

    The following properties and methods are available on a Note object:

    var Ab4 = Note.from_string("Ab4");
    var Ab5 = Note.from_string("Ab5");
    
    // Descriptors:
    Ab4.pitch_class;  // PitchClass.A
    Ab4.accidental;  // Accidental.Flat
    Ab4.octave;  // 4
    Ab4.is_accidental();  // true
    Ab4.is_natural();  // false
    Ab4.index();  // -1
    Ab4.C4_index();  // 8 (relative to C4 instead of A4)
    Ab4.midi_number();  // 68
    Ab4.frequency();  // ~415 (in Hz)
    
    // As a string:
    Ab4.to_string();  // "Ab4"
    
    // Cloning:
    var Ab4_clone = Ab4.clone();  // a separate note object
    
    // Equality
    Ab4.equals(Ab4);  // true
    Ab4.equals(Ab5);  // false
    
    // Transposition:
    Ab4.transpose(12).equals(Ab5);  // true
    
    // Variants:
    var A4 = Ab4.natural();
    var As4 = Ab4.sharp();
    Ab4.equals(As4.flat());  // true

    License

    This software is licensed under the MIT License. See the license file for more information.

    Install

    npm i @rharel/music-note-utils

    DownloadsWeekly Downloads

    0

    Version

    1.0.1

    License

    MIT

    Last publish

    Collaborators

    • rharel