furnace-module-interface
Version:
An interface for loading, processing and saving furnace modules in an object-oriented manner. Fully typed via TypeScript.
46 lines (45 loc) • 1.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FurnaceWavetableModule = void 0;
const bufferHelper_1 = require("./bufferHelper");
const defaults_1 = require("./defaults");
const meta_1 = require("./meta");
const wavetable_1 = require("./wavetable");
class FurnaceWavetableModule {
constructor() {
this.version = defaults_1.defaults.version;
this.wavetables = [wavetable_1.FurnaceWavetable.create(),];
this.meta = meta_1.FurnaceMeta.create();
}
static create() {
return new FurnaceWavetableModule();
}
static fromHelper(helper) {
const mod = FurnaceWavetableModule.create();
if (FurnaceWavetableModule.magic !== helper.getASCII(16)) {
throw new Error("Expected format magic string \"" + FurnaceWavetableModule.magic + "\" when loading a wavetable module.");
}
mod.version = helper.readUInt16LE();
helper.skipBytes(2);
mod.wavetables = [wavetable_1.FurnaceWavetable.fromHelper(helper),];
mod.meta = meta_1.FurnaceMeta.checkFromHelper(helper);
return mod;
}
getAsBuffer() {
const helper = new bufferHelper_1.BufferWriteHelper();
helper.writeString(FurnaceWavetableModule.magic, "ascii", false);
helper.writeUInt16LE(this.version);
helper.skipBytes(2);
if (this.wavetables.length !== 1) {
throw new Error("Expected wavetable module to contain 1 wavetable, but it contains " + this.wavetables.length + "!");
}
this.wavetables[0].writeToBuffer(helper);
this.meta.writeToBuffer(helper);
return helper.getTrimmedBuffer();
}
getVersion() {
return this.version;
}
}
exports.FurnaceWavetableModule = FurnaceWavetableModule;
FurnaceWavetableModule.magic = "-Furnace waveta-";