furnace-module-interface
Version:
An interface for loading, processing and saving furnace modules in an object-oriented manner. Fully typed via TypeScript.
43 lines (42 loc) • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FurnaceWavetable = void 0;
const defaults_1 = require("./defaults");
class FurnaceWavetable {
constructor() {
this.name = defaults_1.defaults.wavetableName;
this.data = new Int32Array(0);
this.min = defaults_1.defaults.wavetableMin;
this.max = defaults_1.defaults.wavetableMax;
}
static create() {
return new FurnaceWavetable();
}
static fromHelper(helper) {
const mod = FurnaceWavetable.create();
if (FurnaceWavetable.magic !== helper.getASCII(4)) {
throw new Error("Expected format magic string \"" + FurnaceWavetable.magic + "\" when loading a wavetable block.");
}
helper.skipBytes(4);
mod.name = helper.readString("utf-8");
const length = helper.readUInt32LE();
mod.min = helper.readUInt32LE();
mod.max = helper.readUInt32LE();
const buf = helper.readBuffer(length * 4);
mod.data = Int32Array.from(buf);
return mod;
}
writeToBuffer(helper) {
const _begin = helper.getPosition(8);
helper.writeString(FurnaceWavetable.magic, "ascii", false);
helper.skipBytes(4);
helper.writeString(this.name, "utf-8", true);
helper.writeUInt32LE(this.data.length);
helper.writeUInt32LE(this.min);
helper.writeUInt32LE(this.max);
helper.writeBuffer(Buffer.from(this.data), 0, this.data.length * 4);
helper.writeUInt32LE(helper.getPosition() - _begin, _begin - 4);
}
}
exports.FurnaceWavetable = FurnaceWavetable;
FurnaceWavetable.magic = "WAVE";