Source: midi/file/index.js

const fs = require('fs');
const MidiFileParser = require('./parser');
const MidiFileSerializer = require('./serializer');

/**
 * Read and write MIDI files.
 */
class MidiFile {
  /**
   *
   * @param filepath
   */
  constructor(filepath) {
    this.filepath = filepath;
  }

  /**
   *
   * @returns {Promise}
   */
  read() {
    return new Promise((resolve, reject) => {
      fs.readFile(this.filepath, (error, buffer) => {
        if (error) reject(error);
        const arrayBuffer = new Uint8Array(buffer).buffer;
        const parser = new MidiFileParser(arrayBuffer);
        resolve(parser.toJSON());
      });
    });
  }

  /**
   *
   * @param midiJSON
   * @returns {Promise}
   */
  write(midiJSON) {
    return new Promise((resolve, reject) => {
      fs.writeFile(this.filepath, new MidiFileSerializer(midiJSON).toBuffer(), error => {
        if (error) reject(error);
        resolve();
      });
    });
  }
}

module.exports = MidiFile;