| /** | |
| * Reads VLQ From a MIDI byte array | |
| * @param MIDIbyteArray {IndexedByteArray} | |
| * @returns {number} | |
| */ | |
| export function readVariableLengthQuantity(MIDIbyteArray) | |
| { | |
| let out = 0; | |
| while (MIDIbyteArray) | |
| { | |
| const byte = MIDIbyteArray[MIDIbyteArray.currentIndex++]; | |
| // extract the first 7 bytes | |
| out = (out << 7) | (byte & 127); | |
| // if the last byte isn't 1, stop reading | |
| if ((byte >> 7) !== 1) | |
| { | |
| break; | |
| } | |
| } | |
| return out; | |
| } | |
| /** | |
| * Write a VLQ from a number to a byte array | |
| * @param number {number} | |
| * @returns {number[]} | |
| */ | |
| export function writeVariableLengthQuantity(number) | |
| { | |
| // Add the first byte | |
| let bytes = [number & 127]; | |
| number >>= 7; | |
| // Continue processing the remaining bytes | |
| while (number > 0) | |
| { | |
| bytes.unshift((number & 127) | 128); | |
| number >>= 7; | |
| } | |
| return bytes; | |
| } |