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 {};
