spessasynth_core
Version:
MIDI and SoundFont2/DLS library with no compromises
77 lines (72 loc) • 1.56 kB
JavaScript
/**
* Reads as little endian
* @param dataArray {IndexedByteArray}
* @param bytesAmount {number}
* @returns {number}
*/
export function readLittleEndian(dataArray, bytesAmount)
{
let out = 0;
for (let i = 0; i < bytesAmount; i++)
{
out |= (dataArray[dataArray.currentIndex++] << i * 8);
}
// make sure it stays unsigned
return out >>> 0;
}
/**
* Writes a number as little endian seems to also work for negative numbers so yay?
* @param dataArray {IndexedByteArray}
* @param number {number}
* @param byteTarget {number}
*/
export function writeLittleEndian(dataArray, number, byteTarget)
{
for (let i = 0; i < byteTarget; i++)
{
dataArray[dataArray.currentIndex++] = (number >> (i * 8)) & 0xFF;
}
}
/**
* @param dataArray {IndexedByteArray}
* @param word {number}
*/
export function writeWord(dataArray, word)
{
dataArray[dataArray.currentIndex++] = word & 0xFF;
dataArray[dataArray.currentIndex++] = word >> 8;
}
/**
* @param dataArray {IndexedByteArray}
* @param dword {number}
*/
export function writeDword(dataArray, dword)
{
writeLittleEndian(dataArray, dword, 4);
}
/**
* @param byte1 {number}
* @param byte2 {number}
* @returns {number}
*/
export function signedInt16(byte1, byte2)
{
let val = (byte2 << 8) | byte1;
if (val > 32767)
{
return val - 65536;
}
return val;
}
/**
* @param byte {number}
* @returns {number}
*/
export function signedInt8(byte)
{
if (byte > 127)
{
return byte - 256;
}
return byte;
}