furnace-module-interface
Version:
An interface for loading, processing and saving furnace modules in an object-oriented manner. Fully typed via TypeScript.
891 lines (889 loc) • 25.6 kB
TypeScript
declare class BufferReadHelper {
buffer: Buffer;
private position;
constructor(buffer: Buffer);
skipBytes(offset: number): void;
getPosition(offset?: number): number;
setPosition(position: number): void;
getASCII(length: number, position?: number): string;
readString(encoding: BufferEncoding, position?: number): string;
findByte(byte: number, position?: number): number;
readBuffer(length: number, position?: number): Buffer;
readInt8(position?: number): number;
readUInt8(position?: number): number;
readInt16LE(position?: number): number;
readUInt16LE(position?: number): number;
readInt32LE(position?: number): number;
readUInt32LE(position?: number): number;
readFloat32LE(position?: number): number;
}
declare class BufferWriteHelper {
private position;
private buffer;
constructor();
getTrimmedBuffer(): Buffer;
private expandBuffer;
skipBytes(offset: number): void;
getPosition(offset?: number): number;
setPosition(position: number): void;
writeString(str: string, encoding: BufferEncoding, nullTerminated: boolean, position?: number): number;
writeBuffer(buf: Buffer, start: number, length: number, position?: number): number;
writeInt8(value: number, position?: number): number;
writeUInt8(value: number, position?: number): number;
writeInt16LE(value: number, position?: number): number;
writeUInt16LE(value: number, position?: number): number;
writeInt32LE(value: number, position?: number): number;
writeUInt32LE(value: number, position?: number): number;
writeFloat32LE(value: number, position?: number): number;
}
export declare class FurnaceGenericMacro {
data: number[];
valueOffset: number;
mode: number | null;
loop: number | null;
release: number | null;
open: boolean;
constructor();
}
export declare class FurnaceMacroWithHeight extends FurnaceGenericMacro {
height: number | null;
constructor();
}
export declare class FurnaceArpeggioMacro extends FurnaceGenericMacro {
isAbsolute: boolean;
constructor();
}
export declare class FurnaceOperatorMacro extends FurnaceGenericMacro {
operator: number;
constructor(operator: number);
}
export declare enum FurnaceInstrumentTypeEnum {
Standard = 0,
OPMOPN = 1,
GameBoy = 2,
C64 = 3,
Amiga = 4,
PCEngine = 5,
AY38910 = 6,
AY8930 = 7,
TIA = 8,
SAA1099 = 9,
VIC = 10,
PET = 11,
VRC6 = 12,
OPLL = 13,
OPL = 14,
FDS = 15,
VirtualBoy = 16,
Namco163 = 17,
SCC = 18,
OPZ = 19,
POKEY = 20,
PCSpeaker = 21,
WonderSwan = 22,
Lynx = 23,
VERA = 24,
X1010 = 25,
VRC6Saw = 26,
E5506 = 27,
MultiPCM = 28,
SNES = 29,
SoundUnit = 30,
NamcoWSG = 31
}
export declare type FurnaceInstrumentVariables = {
fmInsData: number[];
fmInsOpData: number[];
gbInsData: number[];
gbExtraInsData: number[];
c64InsData: number[];
amigaInsData: number[];
oplDrumsModeData: number[];
namco163InsData: number[];
fdsInsData: number[];
fdsModTable: number[];
opzInsData: number[];
wavetableSynthInsData: number[];
multipcmInsData: number[];
tsuInsData: number[];
gbEnvSeq: number[];
sampleMap: null | {
frequency: number;
sample: number;
}[];
volumeMacro: FurnaceMacroWithHeight;
arpeggioMacro: FurnaceArpeggioMacro;
dutyMacro: FurnaceMacroWithHeight;
waveMacro: FurnaceMacroWithHeight;
pitchMacro: FurnaceGenericMacro | null;
algorithmMacro: FurnaceGenericMacro | null;
feedbackMacro: FurnaceGenericMacro | null;
fmsMacro: FurnaceGenericMacro | null;
amsMacro: FurnaceGenericMacro | null;
leftPanMacro: FurnaceGenericMacro | null;
rightPanMacro: FurnaceGenericMacro | null;
phaseResetMacro: FurnaceGenericMacro | null;
extra1Macro: FurnaceGenericMacro | null;
extra2Macro: FurnaceGenericMacro | null;
extra3Macro: FurnaceGenericMacro | null;
extra4Macro: FurnaceGenericMacro | null;
extra5Macro: FurnaceGenericMacro | null;
extra6Macro: FurnaceGenericMacro | null;
extra7Macro: FurnaceGenericMacro | null;
extra8Macro: FurnaceGenericMacro | null;
amplitudeModulationMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
attackRateMaco: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
decay1RateMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
multipleMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
releaseRateMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
decay2LevelMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
totalLevelMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
detune2Macro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
rateScaleMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
detuneMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
decay2RateMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
ssgegMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
_damMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
_dvbMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
_egtMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
_kslMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
_susMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
_vibMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
_wsMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
_ksrMacro: null | [
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro,
FurnaceOperatorMacro
];
};
export declare class FurnaceInstrument {
static magic: string;
private version;
name: string;
type: FurnaceInstrumentTypeEnum;
private vars;
private constructor();
static create(): FurnaceInstrument;
static fromHelper(helper: BufferReadHelper): FurnaceInstrument;
writeToBuffer(helper: BufferWriteHelper): void;
getView(type: FurnaceInstrumentTypeEnum): FurnaceInstrumentView;
getVersion(): number;
}
export interface FurnaceInstrumentView {
type: FurnaceInstrumentTypeEnum;
}
export declare class FurnaceInstrumentViewStandard implements FurnaceInstrumentView {
private vars;
type: FurnaceInstrumentTypeEnum;
constructor(vars: FurnaceInstrumentVariables);
get volumeMacro(): FurnaceMacroWithHeight;
get noiseModeMacro(): FurnaceMacroWithHeight;
get arpeggioMacro(): FurnaceArpeggioMacro;
get pitchMacro(): FurnaceGenericMacro | null;
get phaseResetMacro(): FurnaceGenericMacro | null;
}
export declare class FurnaceInstrumentViewOPNOPM implements FurnaceInstrumentView {
private vars;
type: FurnaceInstrumentTypeEnum;
operators: FurnaceInstrumentViewOpOPNOPM[];
constructor(vars: FurnaceInstrumentVariables);
get algorithm(): number;
set algorithm(value: number);
get feedback(): number;
set feedback(value: number);
get fms(): number;
set fms(value: number);
get ams(): number;
set ams(value: number);
get operatorCount(): number;
set operatorCount(value: number);
get volumeMacro(): FurnaceMacroWithHeight;
get arpeggioMacro(): FurnaceArpeggioMacro;
get pitchMacro(): FurnaceGenericMacro | null;
get algorithmMacro(): FurnaceGenericMacro | null;
get feedbackMacro(): FurnaceGenericMacro | null;
get fmsMacro(): FurnaceGenericMacro | null;
get amsMacro(): FurnaceGenericMacro | null;
get hardPanMacro(): FurnaceGenericMacro | null;
get phaseResetMacro(): FurnaceGenericMacro | null;
}
export declare class FurnaceInstrumentViewOpOPNOPM {
private offset;
private operator;
private vars;
constructor(offset: number, operator: number, vars: FurnaceInstrumentVariables);
get amplitudeModulation(): number;
set amplitudeModulation(value: number);
get attackRate(): number;
set attackRate(value: number);
get decay1Rate(): number;
set decay1Rate(value: number);
get multiple(): number;
set multiple(value: number);
get releaseRate(): number;
set releaseRate(value: number);
get decay1Level(): number;
set decay1Level(value: number);
get totalLevel(): number;
set totalLevel(value: number);
get rateScale(): number;
set rateScale(value: number);
get detune(): number;
set detune(value: number);
get decay2Rate(): number;
set decay2Rate(value: number);
get ssgeg(): number;
set ssgeg(value: number);
get amplitudeModulationMacro(): FurnaceOperatorMacro | null;
get attackRateMaco(): FurnaceOperatorMacro | null;
get decay1RateMacro(): FurnaceOperatorMacro | null;
get multipleMacro(): FurnaceOperatorMacro | null;
get releaseRateMacro(): FurnaceOperatorMacro | null;
get decay2LevelMacro(): FurnaceOperatorMacro | null;
get totalLevelMacro(): FurnaceOperatorMacro | null;
get rateScaleMacro(): FurnaceOperatorMacro | null;
get detuneMacro(): FurnaceOperatorMacro | null;
get decay2RateMacro(): FurnaceOperatorMacro | null;
get ssgegMacro(): FurnaceOperatorMacro | null;
}
export declare enum FurnaceAmigaModeEnum {
sample = 0,
wavetable = 1
}
export declare class FurnaceInstrumentViewAmiga implements FurnaceInstrumentView {
private vars;
type: FurnaceInstrumentTypeEnum;
constructor(vars: FurnaceInstrumentVariables);
get sampleId(): number | null;
set sampleId(value: number | null);
get mode(): FurnaceAmigaModeEnum;
set mode(value: FurnaceAmigaModeEnum);
get waveLen(): FurnaceAmigaModeEnum;
set waveLen(value: FurnaceAmigaModeEnum);
get waveSize(): FurnaceAmigaModeEnum;
set waveSize(value: FurnaceAmigaModeEnum);
get volumeMacro(): FurnaceMacroWithHeight;
get arpeggioMacro(): FurnaceArpeggioMacro;
get pitchMacro(): FurnaceGenericMacro | null;
get phaseResetMacro(): FurnaceGenericMacro | null;
}
export declare class FurnaceMeta {
static readonly magic = "META";
private version;
toolName: string;
toolVersion: string;
date: Date;
comment: string;
backupFile: string;
extraStrings: string[];
extraInts: number[];
private constructor();
static create(): FurnaceMeta;
static checkFromHelper(helper: BufferReadHelper): FurnaceMeta;
static fromHelper(helper: BufferReadHelper): FurnaceMeta;
writeToBuffer(helper: BufferWriteHelper): void;
}
export declare class FurnaceSample {
static readonly magic = "SMPL";
static readonly magic2 = "SMP2";
name: string;
data: FurnaceSampleFormat;
compatRate: number;
c4Rate: number;
loopStart: number | null;
loopEnd: number | null;
volume: number | null;
pitch: number | null;
precense: [
number,
number,
number,
number
];
private constructor();
static create(): FurnaceSample;
static fromHelper(helper: BufferReadHelper, version: number): FurnaceSample;
private static getFormatMultiply;
private static getFormatFunctionFromId;
writeToBuffer(helper: BufferWriteHelper, version: number): void;
writeToBufferSMP2(helper: BufferWriteHelper): void;
writeToBufferSMPL(helper: BufferWriteHelper, version: number): void;
}
export interface FurnaceSampleFormat {
formatName: string;
formatId: number;
entries: number;
rawBuffer: Buffer;
convertToArray: () => Int16Array;
convertFromArray: (array: Int16Array) => void;
}
export declare class Furnace8bitSample implements FurnaceSampleFormat {
formatName: string;
formatId: number;
entries: number;
rawBuffer: Buffer;
private constructor();
static create(): Furnace8bitSample;
static fromBuffer(buffer: Buffer, length: number): Furnace8bitSample;
convertToArray(): Int16Array;
convertFromArray(array: Int16Array): void;
}
export declare class Furnace16bitSample implements FurnaceSampleFormat {
formatName: string;
formatId: number;
entries: number;
rawBuffer: Buffer;
private constructor();
static create(): Furnace16bitSample;
static fromBuffer(buffer: Buffer, length: number): Furnace16bitSample;
convertToArray(): Int16Array;
convertFromArray(array: Int16Array): void;
}
export declare class FurnaceWavetable {
static readonly magic = "WAVE";
name: string;
min: number;
max: number;
data: Int32Array;
private constructor();
static create(): FurnaceWavetable;
static fromHelper(helper: BufferReadHelper): FurnaceWavetable;
writeToBuffer(helper: BufferWriteHelper): void;
}
export declare class FurnaceInstrumentModule {
static magic: string;
private version;
instruments: FurnaceInstrument[];
wavetables: FurnaceWavetable[];
samples: FurnaceSample[];
meta: FurnaceMeta;
private constructor();
static create(): FurnaceInstrumentModule;
static fromHelper(helper: BufferReadHelper): FurnaceInstrumentModule;
getAsBuffer(): Buffer;
getVersion(): number;
}
export declare function loadSystem(id: number): FurnaceSystem | null;
export declare enum FurnaceSystemEnum {
Null = 0,
Genesis = 2,
GenesisExtended = 66,
YM2612 = 131,
YM2612Extended = 160,
SMS = 3,
YM2612WithDualPCM = 190,
YM2612ExtendedWithDualPCM = 189,
GameBoy = 4,
PCEngine = 5,
NES = 6,
NESVRC7 = 70,
KonamiVRC6 = 136,
KonamiVRC7 = 157
}
export declare enum FurnaceChipEnum {
YM2612 = 131,
YM2612Extended = 160,
DualPCMYM2612 = 190,
DualPCMYM2612Extended = 189,
SN76489 = 3,
GameBoy = 4,
PCEngine = 5,
Ricoh2A03 = 6,
VRC6 = 136,
VRC7 = 157
}
export interface FurnaceSystem {
systemId: FurnaceSystemEnum;
name: string;
chips: FurnaceChip[];
}
export interface FurnaceChip {
chipId: FurnaceChipEnum;
volume: number;
panning: number;
flags: number;
channels: FurnaceChipChannel[];
}
export declare type FurnaceChipChannel = {
longname: string;
shortname: string;
};
export declare class FurnaceSystemSMS implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.SMS;
readonly name = "SMS (SN76489)";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipSN76489 implements FurnaceChip {
readonly chipId = FurnaceChipEnum.SN76489;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnaceSystemGenesis implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.Genesis;
readonly name = "Genesis";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceSystemYM2612 implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.YM2612;
readonly name = "YM2612 alone";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipYM2612 implements FurnaceChip {
readonly chipId = FurnaceChipEnum.YM2612;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnaceSystemYM2612WithDualPCM implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.YM2612WithDualPCM;
readonly name = "YM2612 With Dual PCM";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipYM2612WithDualPCM implements FurnaceChip {
readonly chipId = FurnaceChipEnum.DualPCMYM2612;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnaceSystemGenesisExtended implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.GenesisExtended;
readonly name = "Genesis Extended";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceSystemYM2612Extended implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.YM2612Extended;
readonly name = "YM2612 Extended";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipYM2612Extended implements FurnaceChip {
readonly chipId = FurnaceChipEnum.DualPCMYM2612Extended;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnaceSystemYM2612ExtendedWithDualPCM implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.YM2612ExtendedWithDualPCM;
readonly name = "YM2612 Extended With Dual PCM and CSM";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipYM2612ExtendedWithDualPCM implements FurnaceChip {
readonly chipId = FurnaceChipEnum.DualPCMYM2612Extended;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnaceSystemGameBoy implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.GameBoy;
readonly name = "Game Boy";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipGameBoy implements FurnaceChip {
readonly chipId = FurnaceChipEnum.GameBoy;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnaceSystemPCEngine implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.PCEngine;
readonly name = "PC Engine";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipPCEngine implements FurnaceChip {
readonly chipId = FurnaceChipEnum.PCEngine;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnaceSystemNES implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.NES;
readonly name = "NES";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipRicoh2A03 implements FurnaceChip {
readonly chipId = FurnaceChipEnum.Ricoh2A03;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnaceSystemNESVRC7 implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.NES;
readonly name = "NES With Konami VRC7";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceSystemVRC6 implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.NES;
readonly name = "Konami VRC6";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipVRC6 implements FurnaceChip {
readonly chipId = FurnaceChipEnum.Ricoh2A03;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnaceSystemVRC7 implements FurnaceSystem {
readonly systemId = FurnaceSystemEnum.NES;
readonly name = "Konami VRC7";
readonly chips: FurnaceChip[];
constructor();
}
export declare class FurnaceChipVRC7 implements FurnaceChip {
readonly chipId = FurnaceChipEnum.Ricoh2A03;
readonly channels: {
longname: string;
shortname: string;
}[];
volume: number;
panning: number;
flags: number;
}
export declare class FurnacePattern {
static readonly magic = "PATR";
name: string;
rows: FurnaceRow[];
private constructor();
static create(rows: number, effects: number): FurnacePattern;
static fromHelper(helper: BufferReadHelper, version: number): {
pattern: FurnacePattern;
channel: number;
index: number;
song: number;
};
loadData(helper: BufferReadHelper, version: number, rows: number, effects: number): void;
writeToBuffer(helper: BufferWriteHelper, version: number, channel: number, index: number, song: number): void;
}
export declare class FurnaceRow {
note: null | {
note: number;
octave: number;
};
instrument: number | null;
volume: number | null;
effects: FurnaceEffect[];
constructor(effects: number);
fromHelper(helper: BufferReadHelper): void;
writeToBuffer(helper: BufferWriteHelper): void;
}
export declare type FurnaceEffect = {
id: number | null;
value: number | null;
};
export declare class FurnaceChannelInfo {
longname: string;
shortname: string;
orders: number[];
patterns: (FurnacePattern | null)[];
effects: number;
hidden: boolean;
collapsed: boolean;
constructor();
}
export declare class FurnaceChannel {
private channel;
private info;
private system;
private chip;
constructor(channel: FurnaceChipChannel, info: FurnaceChannelInfo, system: FurnaceSystem, chip: FurnaceChip);
get parentSystem(): FurnaceSystem;
get parentChip(): FurnaceChip;
get longname(): string;
set longname(name: string);
get shortname(): string;
set shortname(name: string);
get defaultLongname(): string;
get defaultShortname(): string;
get activeLongname(): string;
get activeShortname(): string;
get collapsed(): boolean;
get hidden(): boolean;
get effectCount(): number;
get orders(): number[];
get patterns(): (FurnacePattern | null)[];
makePartialCopy(): FurnaceChannel;
create(channel: FurnaceChipChannel, info: FurnaceChannelInfo, system: FurnaceSystem, chip: FurnaceChip): FurnaceChannel;
}
export declare function computeChannelObjects(info: FurnaceInfo, channels: FurnaceChannelInfo[]): FurnaceChannel[];
export declare function computeChannelCount(info: FurnaceInfo): number;
export declare class FurnaceSong {
static readonly magic = "SONG";
private channels;
channelInfo: FurnaceChannelInfo[];
name: string;
comment: string;
timebase: number;
speed1: number;
speed2: number;
rows: number;
initialArpeggioTime: number;
ticksPerSecond: number;
highlightA: number;
highlightB: number;
virtualTempoNumerator: number;
virtualTempoDenominator: number;
private constructor();
static create(): FurnaceSong;
static fromHelper(helper: BufferReadHelper, info: FurnaceInfo, version: number): FurnaceSong;
fetchChannels(helper: BufferReadHelper, version: number, channelCount: number, orderCount: number): void;
writeToBuffer(helper: BufferWriteHelper): void;
writeChannels(helper: BufferWriteHelper): void;
getChannels(info: FurnaceInfo): FurnaceChannel[];
}
export declare type FurnaceInfoMetadata = {
songName: string;
songAuthor: string;
systemName: string;
gameName: string;
};
export declare class FurnaceInfo {
static readonly magic = "INFO";
instruments: FurnaceInstrument[];
wavetables: FurnaceWavetable[];
samples: FurnaceSample[];
songs: FurnaceSong[];
systems: FurnaceSystem[];
flags: FurnaceFlags;
A4Tuning: number;
masterVolume: number;
comment: string;
metadata: FurnaceInfoMetadata;
metadataJP: FurnaceInfoMetadata;
private constructor();
static create(): FurnaceInfo;
static fromHelper(helper: BufferReadHelper, version: number): FurnaceInfo;
writeToBuffer(helper: BufferWriteHelper, version: number): void;
}
export declare type FurnaceFlags = {
limitSlides?: boolean;
pitchMode?: FurnacePitchMode;
loopModality?: FurnaceLoopModality;
properNoiseLayout?: boolean;
waveDutyIsVolume?: boolean;
resetMacroOnPorta?: boolean;
legacyVolumeSlides?: boolean;
compatibleArpeggio?: boolean;
noteOffResetsSlides?: boolean;
targetResetsSlides?: boolean;
arpeggioInhibitsPortamento?: boolean;
wackAlgorithmMacro?: boolean;
brokenShortcutSlides?: boolean;
ignoreDuplicateSlids?: boolean;
stopPortamentoOnNoteOff?: boolean;
continuousVibrato?: boolean;
brokenDacMode?: boolean;
oneTickCut?: boolean;
instrumentChangeDuringPorta?: boolean;
resetNoteBaseOnArpeggioEffectStop?: boolean;
brokenSpeedSelection?: boolean;
noSlideOnFirstTick?: boolean;
nextRowResetArpPos?: boolean;
ignoreJumpAtEnd?: boolean;
buggyPortaAfterSlide?: boolean;
newInsAffectsEnvelope?: boolean;
extChStateIsShared?: boolean;
ignoreDacOutsideOfCh?: boolean;
E1xxE2xxPriorityOverSlide00?: boolean;
newSegaPCM?: boolean;
weirdFnumSlides?: boolean;
SNDutyMacroAlwaysResetsPhase?: boolean;
pitchMacroIsLinear?: boolean;
pitchSlideSpeedInFullLinear?: number;
oldFMOctaveBehavior?: boolean;
disableDACVolume?: boolean;
newVolumeScaling?: boolean;
volumeMacroIsHeld?: boolean;
brokenOutVol?: boolean;
slideStopsOnRepeatedNote?: boolean;
brokenPortaPositionAfterArp?: boolean;
};
export declare enum FurnacePitchMode {
nonLinear = 0,
partialLinear = 1,
fullLinear = 2
}
export declare enum FurnaceLoopModality {
item0 = 0,
item1 = 1,
item2 = 2
}
export declare class FurnaceSongModule {
static magic: string;
private version;
info: FurnaceInfo;
meta: FurnaceMeta;
private constructor();
static create(): FurnaceSongModule;
static fromHelper(helper: BufferReadHelper): FurnaceSongModule;
getAsBuffer(): Buffer;
getVersion(): number;
}
export declare class FurnaceWavetableModule {
static magic: string;
private version;
wavetables: FurnaceWavetable[];
meta: FurnaceMeta;
private constructor();
static create(): FurnaceWavetableModule;
static fromHelper(helper: BufferReadHelper): FurnaceWavetableModule;
getAsBuffer(): Buffer;
getVersion(): number;
}
export declare function deflateBuffer(data: Buffer): Promise<Buffer>;
export declare function inflateBuffer(data: Buffer): Promise<Buffer>;
export declare function loadFurnaceModule(data: Buffer, compressed?: boolean | undefined): Promise<FurnaceSongModule | FurnaceInstrumentModule | FurnaceWavetableModule>;
export declare function getVersionString(version: number): string | undefined;
export declare type EffectNameReturn = {
minversion?: number;
name?: string;
format?: string;
explanation?: string;
parameters: {
[key: string]: string;
}[];
};
export declare function getEffectName(type: FurnaceSystemEnum, effect: number): EffectNameReturn;
export {};