chipchune.furnace.data_types

class ChipInfo:

Information on a single chip.

ChipInfo( type: chipchune.furnace.enums.ChipType, flags: Dict[str, Any] = <factory>, panning: float = 0.0, surround: float = 0.0, volume: float = 1.0)
flags: Dict[str, Any]
panning: float = 0.0
surround: float = 0.0

Chip front/rear balance.

volume: float = 1.0
class ModuleMeta:

Module metadata.

ModuleMeta( name: str = '', name_jp: str = '', author: str = '', author_jp: str = '', album: str = '', album_jp: str = '', sys_name: str = 'Sega Genesis/Mega Drive', sys_name_jp: str = '', comment: str = '', version: int = 0, tuning: float = 440.0)
name: str = ''
name_jp: str = ''
author: str = ''
author_jp: str = ''
album: str = ''

Can also be the game name or container name.

album_jp: str = ''
sys_name: str = 'Sega Genesis/Mega Drive'
sys_name_jp: str = ''
comment: str = ''
version: int = 0
tuning: float = 440.0
class TimingInfo:

Timing information for a single subsong.

TimingInfo( highlight: Tuple[int, int] = (4, 16), speed: Tuple[int, int] = (0, 0), virtual_tempo: Tuple[int, int] = (150, 150))
arp_speed = 1
clock_speed = 60.0
highlight: Tuple[int, int] = (4, 16)
speed: Tuple[int, int] = (0, 0)
timebase = 1
virtual_tempo: Tuple[int, int] = (150, 150)
class ChipList:

Information about chips used in the module.

ChipList( list: List[ChipInfo] = <factory>, master_volume: float = 2.0)
list: List[ChipInfo]
master_volume: float = 2.0
class ChannelDisplayInfo:

Relating to channel display in Pattern and Order windows.

ChannelDisplayInfo( name: str = '', abbreviation: str = '', collapsed: bool = False, shown: bool = True)
name: str = ''
abbreviation: str = ''
collapsed: bool = False
shown: bool = True
class ModuleCompatFlags:

Module compatibility flags, a.k.a. "The Motherload"

Default values correspond with fileOps.cpp in the furnace src.

ModuleCompatFlags( limit_slides: bool = False, linear_pitch: chipchune.furnace.enums.LinearPitch = <factory>, loop_modality: chipchune.furnace.enums.LoopModality = <factory>, proper_noise_layout: bool = True, wave_duty_is_volume: bool = False, reset_macro_on_porta: bool = False, legacy_volume_slides: bool = False, compatible_arpeggio: bool = False, note_off_resets_slides: bool = True, target_resets_slides: bool = True, arpeggio_inhibits_portamento: bool = False, wack_algorithm_macro: bool = False, broken_shortcut_slides: bool = False, ignore_duplicates_slides: bool = False, stop_portamento_on_note_off: bool = False, continuous_vibrato: bool = False, broken_dac_mode: bool = False, one_tick_cut: bool = False, instrument_change_allowed_in_porta: bool = True, reset_note_base_on_arpeggio_stop: bool = True, broken_speed_selection: bool = False, no_slides_on_first_tick: bool = False, next_row_reset_arp_pos: bool = False, ignore_jump_at_end: bool = False, buggy_portamento_after_slide: bool = False, gb_ins_affects_env: bool = True, shared_extch_state: bool = True, ignore_outside_dac_mode_change: bool = False, e1e2_takes_priority: bool = False, new_sega_pcm: bool = True, weird_fnum_pitch_slides: bool = False, sn_duty_resets_phase: bool = False, linear_pitch_macro: bool = True, pitch_slide_speed_in_linear: int = 4, old_octave_boundary: bool = False, disable_opn2_dac_volume_control: bool = False, new_volume_scaling: bool = True, volume_macro_lingers: bool = True, broken_out_vol: bool = False, e1e2_stop_on_same_note: bool = False, broken_porta_after_arp: bool = False, sn_no_low_periods: bool = False, cut_delay_effect_policy: chipchune.furnace.enums.DelayBehavior = <factory>, jump_treatment: chipchune.furnace.enums.JumpTreatment = <factory>, auto_sys_name: bool = True, disable_sample_macro: bool = False, broken_out_vol_2: bool = False, old_arp_strategy: bool = False, auto_patchbay: bool = True, broken_porta_during_legato: bool = False, broken_fm_off: bool = False, pre_note_no_effect: bool = False, old_dpcm: bool = False, reset_arp_phase_on_new_note: bool = False, ceil_volume_scaling: bool = False, old_always_set_volume: bool = False, old_sample_offset: bool = False)
limit_slides: bool = False
proper_noise_layout: bool = True
wave_duty_is_volume: bool = False
reset_macro_on_porta: bool = False
legacy_volume_slides: bool = False
compatible_arpeggio: bool = False
note_off_resets_slides: bool = True
target_resets_slides: bool = True
arpeggio_inhibits_portamento: bool = False
wack_algorithm_macro: bool = False
broken_shortcut_slides: bool = False
ignore_duplicates_slides: bool = False
stop_portamento_on_note_off: bool = False
continuous_vibrato: bool = False
broken_dac_mode: bool = False
one_tick_cut: bool = False
instrument_change_allowed_in_porta: bool = True
reset_note_base_on_arpeggio_stop: bool = True
broken_speed_selection: bool = False
no_slides_on_first_tick: bool = False
next_row_reset_arp_pos: bool = False
ignore_jump_at_end: bool = False
buggy_portamento_after_slide: bool = False
gb_ins_affects_env: bool = True
shared_extch_state: bool = True
ignore_outside_dac_mode_change: bool = False
e1e2_takes_priority: bool = False
new_sega_pcm: bool = True
weird_fnum_pitch_slides: bool = False
sn_duty_resets_phase: bool = False
linear_pitch_macro: bool = True
pitch_slide_speed_in_linear: int = 4
old_octave_boundary: bool = False
disable_opn2_dac_volume_control: bool = False
new_volume_scaling: bool = True
volume_macro_lingers: bool = True
broken_out_vol: bool = False
e1e2_stop_on_same_note: bool = False
broken_porta_after_arp: bool = False
sn_no_low_periods: bool = False
cut_delay_effect_policy: chipchune.furnace.enums.DelayBehavior
auto_sys_name: bool = True
disable_sample_macro: bool = False
broken_out_vol_2: bool = False
old_arp_strategy: bool = False
auto_patchbay: bool = True
broken_porta_during_legato: bool = False
broken_fm_off: bool = False
pre_note_no_effect: bool = False
old_dpcm: bool = False
reset_arp_phase_on_new_note: bool = False
ceil_volume_scaling: bool = False
old_always_set_volume: bool = False
old_sample_offset: bool = False
class SubSong:

Information on a single subsong.

SubSong( name: str = '', comment: str = '', speed_pattern: List[int] = <factory>, grooves: List[List[int]] = <factory>, timing: TimingInfo = <factory>, order: Dict[int, List[int]] = <factory>, effect_columns: List[int] = <factory>, channel_display: List[ChannelDisplayInfo] = <factory>)
name: str = ''
comment: str = ''
speed_pattern: List[int]

Maximum 16 entries.

grooves: List[List[int]]
timing: TimingInfo
pattern_length = 64
order: Dict[int, List[int]]
effect_columns: List[int]
channel_display: List[ChannelDisplayInfo]
class FurnaceRow:

Represents a single row in a pattern.

FurnaceRow( note: chipchune.furnace.enums.Note, octave: int, instrument: int, volume: int, effects: List[Tuple[int, int]] = <factory>)
octave: int
instrument: int
volume: int
effects: List[Tuple[int, int]]
def as_clipboard(self) -> str:

Renders the selected row in Furnace clipboard format (without header!)

Returns

Furnace clipboard data (str)

class FurnacePattern:

Represents one pattern in a module.

FurnacePattern( channel: int = 0, index: int = 0, subsong: int = 0, data: List[FurnaceRow] = <factory>, name: str = '')
channel: int = 0
index: int = 0
subsong: int = 0
data: List[FurnaceRow]
name: str = ''
def as_clipboard(self) -> str:

Renders the selected pattern in Furnace clipboard format.

Returns

Furnace clipboard data

class InputPatchBayEntry(builtins.dict):

A patch that has an "input" connector.

The set that the patch belongs to.

port: int

Which port to connect to.

Inherited Members
builtins.dict
get
setdefault
pop
popitem
keys
items
values
update
fromkeys
clear
copy
class OutputPatchBayEntry(builtins.dict):

A patch that has an "output" connector.

The set that the patch belongs to.

port: int

Which port to connect from.

Inherited Members
builtins.dict
get
setdefault
pop
popitem
keys
items
values
update
fromkeys
clear
copy
class PatchBay:

A single patchbay connection.

PatchBay( source: OutputPatchBayEntry, dest: InputPatchBayEntry)
class InsFeatureAbstract:

Base class for all InsFeature* classes. Not really to be used.

class InsFeatureName(InsFeatureAbstract, builtins.str):

Instrument's name block. Can be used as a string.

InsFeatureName(name: str = '')
name: str = ''
Inherited Members
builtins.str
encode
replace
split
rsplit
join
capitalize
casefold
title
center
count
expandtabs
find
partition
index
ljust
lower
lstrip
rfind
rindex
rjust
rstrip
rpartition
splitlines
strip
swapcase
translate
upper
startswith
endswith
isascii
islower
isupper
istitle
isspace
isdecimal
isdigit
isnumeric
isalpha
isalnum
isidentifier
isprintable
zfill
format
format_map
maketrans
class InsMeta:
InsMeta( version: int = 143, type: chipchune.furnace.enums.InstrumentType = FM_4OP)
version: int = 143
class InsFMOperator:
InsFMOperator( am: bool = False, ar: int = 0, dr: int = 0, mult: int = 0, rr: int = 0, sl: int = 0, tl: int = 0, dt2: int = 0, rs: int = 0, dt: int = 0, d2r: int = 0, ssg_env: int = 0, dam: int = 0, dvb: int = 0, egt: bool = False, ksl: int = 0, sus: bool = False, vib: bool = False, ws: int = 0, ksr: bool = False, enable: bool = True, kvs: int = 2)
am: bool = False
ar: int = 0
dr: int = 0
mult: int = 0
rr: int = 0
sl: int = 0
tl: int = 0
dt2: int = 0
rs: int = 0
dt: int = 0
d2r: int = 0
ssg_env: int = 0
dam: int = 0
dvb: int = 0
egt: bool = False
ksl: int = 0
sus: bool = False
vib: bool = False
ws: int = 0
ksr: bool = False
enable: bool = True
kvs: int = 2
class InsFeatureFM(InsFeatureAbstract):
InsFeatureFM( alg: int = 0, fb: int = 4, fms: int = 0, ams: int = 0, fms2: int = 0, ams2: int = 0, ops: int = 2, opll_preset: int = 0, op_list: List[InsFMOperator] = <factory>)
alg: int = 0
fb: int = 4
fms: int = 0
ams: int = 0
fms2: int = 0
ams2: int = 0
ops: int = 2
opll_preset: int = 0
op_list: List[InsFMOperator]
class SingleMacro:
SingleMacro( kind: Union[chipchune.furnace.enums.MacroCode, chipchune.furnace.enums.OpMacroCode] = <factory>, mode: int = 0, type: chipchune.furnace.enums.MacroType = <factory>, delay: int = 0, speed: int = 1, open: bool = False, data: List[Union[int, chipchune.furnace.enums.MacroItem]] = <factory>)
mode: int = 0
delay: int = 0
speed: int = 1
open: bool = False
data: List[Union[int, chipchune.furnace.enums.MacroItem]]
class InsFeatureMacro(InsFeatureAbstract):
InsFeatureMacro(macros: List[SingleMacro] = <factory>)
macros: List[SingleMacro]
class InsFeatureOpr1Macro(InsFeatureMacro):
InsFeatureOpr1Macro(macros: List[SingleMacro] = <factory>)
Inherited Members
InsFeatureMacro
macros
class InsFeatureOpr2Macro(InsFeatureMacro):
InsFeatureOpr2Macro(macros: List[SingleMacro] = <factory>)
Inherited Members
InsFeatureMacro
macros
class InsFeatureOpr3Macro(InsFeatureMacro):
InsFeatureOpr3Macro(macros: List[SingleMacro] = <factory>)
Inherited Members
InsFeatureMacro
macros
class InsFeatureOpr4Macro(InsFeatureMacro):
InsFeatureOpr4Macro(macros: List[SingleMacro] = <factory>)
Inherited Members
InsFeatureMacro
macros
class GBHwSeq:
GBHwSeq( command: chipchune.furnace.enums.GBHwCommand, data: List[int] = <factory>)
data: List[int]
class InsFeatureGB(InsFeatureAbstract):
InsFeatureGB( env_vol: int = 15, env_dir: int = 0, env_len: int = 2, sound_len: int = 0, soft_env: bool = False, always_init: bool = False, hw_seq: List[GBHwSeq] = <factory>)
env_vol: int = 15
env_dir: int = 0
env_len: int = 2
sound_len: int = 0
soft_env: bool = False
always_init: bool = False
hw_seq: List[GBHwSeq]
class GenericADSR:
GenericADSR(a: int = 0, d: int = 0, s: int = 0, r: int = 0)
a: int = 0
d: int = 0
s: int = 0
r: int = 0
class InsFeatureC64(InsFeatureAbstract):
InsFeatureC64( tri_on: bool = False, saw_on: bool = True, pulse_on: bool = False, noise_on: bool = False, envelope: GenericADSR = <factory>, duty: int = 2048, ring_mod: int = 0, osc_sync: int = 0, to_filter: bool = False, vol_is_cutoff: bool = False, init_filter: bool = False, duty_is_abs: bool = False, filter_is_abs: bool = False, no_test: bool = False, res: int = 0, cut: int = 0, hp: bool = False, lp: bool = False, bp: bool = False, ch3_off: bool = False)
tri_on: bool = False
saw_on: bool = True
pulse_on: bool = False
noise_on: bool = False
envelope: GenericADSR
duty: int = 2048
ring_mod: int = 0
osc_sync: int = 0
to_filter: bool = False
vol_is_cutoff: bool = False
init_filter: bool = False
duty_is_abs: bool = False
filter_is_abs: bool = False
no_test: bool = False
res: int = 0
cut: int = 0
hp: bool = False
lp: bool = False
bp: bool = False
ch3_off: bool = False
class SampleMap:
SampleMap(freq: int = 0, sample_index: int = 0)
freq: int = 0
sample_index: int = 0
class DPCMMap:
DPCMMap(pitch: int = 0, delta: int = 0)
pitch: int = 0
delta: int = 0
class InsFeatureAmiga(InsFeatureAbstract):
InsFeatureAmiga( init_sample: int = 0, use_note_map: bool = False, use_sample: bool = False, use_wave: bool = False, wave_len: int = 31, sample_map: List[SampleMap] = <factory>)
init_sample: int = 0
use_note_map: bool = False
use_sample: bool = False
use_wave: bool = False
wave_len: int = 31
sample_map: List[SampleMap]
class InsFeatureDPCMMap(InsFeatureAbstract):
InsFeatureDPCMMap( use_map: bool = False, sample_map: List[DPCMMap] = <factory>)
use_map: bool = False
sample_map: List[DPCMMap]
class InsFeatureX1010(InsFeatureAbstract):
InsFeatureX1010(bank_slot: int = 0)
bank_slot: int = 0
class InsFeaturePowerNoise(InsFeatureAbstract):
InsFeaturePowerNoise(octave: int = 0)
octave: int = 0
class InsFeatureSID2(InsFeatureAbstract):
InsFeatureSID2(noise_mode: int = 0, wave_mix: int = 0, volume: int = 0)
noise_mode: int = 0
wave_mix: int = 0
volume: int = 0
class InsFeatureN163(InsFeatureAbstract):
InsFeatureN163( wave: int = -1, wave_pos: int = 0, wave_len: int = 32, wave_mode: int = 3)
wave: int = -1
wave_pos: int = 0
wave_len: int = 32
wave_mode: int = 3
class InsFeatureFDS(InsFeatureAbstract):
InsFeatureFDS( mod_speed: int = 0, mod_depth: int = 0, init_table_with_first_wave: bool = False, mod_table: List[int] = <factory>)
mod_speed: int = 0
mod_depth: int = 0
init_table_with_first_wave: bool = False
mod_table: List[int]
class InsFeatureMultiPCM(InsFeatureAbstract):
InsFeatureMultiPCM( ar: int = 15, d1r: int = 15, dl: int = 0, d2r: int = 0, rr: int = 15, rc: int = 15, lfo: int = 0, vib: int = 0, am: int = 0)
ar: int = 15
d1r: int = 15
dl: int = 0
d2r: int = 0
rr: int = 15
rc: int = 15
lfo: int = 0
vib: int = 0
am: int = 0
class InsFeatureWaveSynth(InsFeatureAbstract):
InsFeatureWaveSynth( wave_indices: List[int] = <factory>, rate_divider: int = 1, effect: chipchune.furnace.enums.WaveFX = NONE, enabled: bool = False, global_effect: bool = False, speed: int = 0, params: List[int] = <factory>, one_shot: bool = False)
wave_indices: List[int]
rate_divider: int = 1
enabled: bool = False
global_effect: bool = False
speed: int = 0
params: List[int]
one_shot: bool = False
class InsFeatureSoundUnit(InsFeatureAbstract):
InsFeatureSoundUnit(switch_roles: bool = False)
switch_roles: bool = False
class InsFeatureES5506(InsFeatureAbstract):
InsFeatureES5506( filter_mode: chipchune.furnace.enums.ESFilterMode = LPK2_LPK1, k1: int = 65535, k2: int = 65535, env_count: int = 0, left_volume_ramp: int = 0, right_volume_ramp: int = 0, k1_ramp: int = 0, k2_ramp: int = 0, k1_slow: int = 0, k2_slow: int = 0)
filter_mode: chipchune.furnace.enums.ESFilterMode = LPK2_LPK1
k1: int = 65535
k2: int = 65535
env_count: int = 0
left_volume_ramp: int = 0
right_volume_ramp: int = 0
k1_ramp: int = 0
k2_ramp: int = 0
k1_slow: int = 0
k2_slow: int = 0
class InsFeatureSNES(InsFeatureAbstract):
InsFeatureSNES( use_env: bool = True, sus: chipchune.furnace.enums.SNESSusMode = DIRECT, gain_mode: chipchune.furnace.enums.GainMode = DIRECT, gain: int = 127, d2: int = 0, envelope: GenericADSR = <factory>)
use_env: bool = True
gain_mode: chipchune.furnace.enums.GainMode = DIRECT
gain: int = 127
d2: int = 0
envelope: GenericADSR
class InsFeatureOPLDrums(InsFeatureAbstract):
InsFeatureOPLDrums( fixed_drums: bool = False, kick_freq: int = 1312, snare_hat_freq: int = 1360, tom_top_freq: int = 448)
fixed_drums: bool = False
kick_freq: int = 1312
snare_hat_freq: int = 1360
tom_top_freq: int = 448
class InsFeatureSampleList(_InsFeaturePointerAbstract):

List of pointers to all samples used by this instrument.

InsFeatureSampleList(pointers: Dict[int, int] = <factory>)
class InsFeatureWaveList(_InsFeaturePointerAbstract):

List of pointers to all wave tables used by this instrument.

InsFeatureWaveList(pointers: Dict[int, int] = <factory>)
class WavetableMeta:
WavetableMeta(name: str = '', width: int = 32, height: int = 32)
name: str = ''
width: int = 32
height: int = 32
class SampleMeta:
SampleMeta( name: str = '', length: int = 0, bitdepth: int = 0, loop_start: int = 0, loop_end: int = 0)
name: str = ''
length: int = 0
bitdepth: int = 0
loop_start: int = 0
loop_end: int = 0