UNPKG

midi-file-io

Version:

Reads, parses and writes MIDI files. Fork of NHQ's midi-file-parser.

69 lines (68 loc) 1.95 kB
"use strict"; /** * Date: 8/22/19 * Time: 9:27 PM * @license MIT (see project's LICENSE file) */ Object.defineProperty(exports, "__esModule", { value: true }); exports.WriteStream = void 0; class WriteStream { constructor() { this.buffer = Buffer.alloc(0); } get length() { return this.buffer.length; } /** * Appends data just as it is to our buffer */ write(data) { if (data instanceof Buffer) { this.buffer = Buffer.concat([this.buffer, data]); } else if (data instanceof WriteStream) { this.buffer = Buffer.concat([this.buffer, data.buffer]); } else { this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]); } } /** * Writes 8 bit value to our buffer */ writeInt8(value) { const buffer = Buffer.alloc(1); buffer.writeUInt8(value, 0); this.buffer = Buffer.concat([this.buffer, buffer]); } /** * Writes 16 bit int to our buffer */ writeInt16(value) { const buffer = Buffer.alloc(2); buffer.writeInt16BE(value, 0); this.buffer = Buffer.concat([this.buffer, buffer]); } /** * Writes 32 bit int to our buffer */ writeInt32(value) { const buffer = Buffer.alloc(4); buffer.writeInt32BE(value, 0); this.buffer = Buffer.concat([this.buffer, buffer]); } /** * Writes a variable-length integer: a big-endian value in groups of 7 bits with top bit set to signify that another byte follows */ writeVarInt(value) { const stack = []; do { stack.push(value & 0x7f); value = value >> 7; } while (value !== 0); for (let index = stack.length - 1; index > -1; index--) { this.writeInt8((index > 0) ? stack[index] | 0x80 : stack[index]); } } } exports.WriteStream = WriteStream;