Find a file
cam900 cbf20c6320 Merge branch 'master' of https://github.com/tildearrow/furnace into es5506_alt
* 'master' of https://github.com/tildearrow/furnace: (58 commits)
  SMS: early Nuked-PSG modding
  SMS: add modified Nuked-PSG core
  build release and don't strip
  strip MinGW builds
  FDS: a bit more
  FDS: set a post-amp value
  FDS: fix NSFplay core low pass filter precision
  fix .dmf saving
  fix compilation on GCC 12
  Fix multithreading on CI
  Lynx: why did I not commit this
  Lynx: more sample improvements
  Lynx: sample improvements
  Lynx: add sample support!
  GUI: fix wavetable list oversight
  WaveSynth: fix phase modulation - again
  GUI: fix possible wave editor crash
  WaveSynth: fix phase modulation
  Lynx: add phase reset macro
  fix another fucking IGFD crash bug
  ...

# Conflicts:
#	src/gui/insEdit.cpp
#	src/gui/presets.cpp
2022-05-27 13:01:06 +09:00
.github build release and don't strip 2022-05-26 18:17:04 -05:00
android add something 2022-05-08 16:02:38 -05:00
demos Demo Song update: Fixing typo and crediting arranger 2022-04-10 23:03:33 -05:00
extern Merge branch 'master' of https://github.com/tildearrow/furnace into es5506_alt 2022-05-27 13:01:06 +09:00
papers the Namco C163 trial 2022-05-23 16:01:35 -05:00
res dev75 - MIDI input improvements (mostly) 2022-04-01 05:24:35 -05:00
scripts Add MinGW cross-compiler toolchains 2022-04-08 20:16:42 +02:00
src Merge branch 'master' of https://github.com/tildearrow/furnace into es5506_alt 2022-05-27 13:01:06 +09:00
test add furnace test suite 2022-01-22 23:50:26 -05:00
.gitignore update gitignore 2022-05-22 22:36:33 -05:00
.gitmodules de-submodule ImGui 2022-05-18 15:23:10 -05:00
CMakeLists.txt Merge branch 'master' of https://github.com/tildearrow/furnace into es5506_alt 2022-05-27 13:01:06 +09:00
CONTRIBUTING.md update contributing guidelines 2022-05-22 02:22:56 -05:00
LICENSE add license 2021-05-13 03:37:04 -05:00
README.md update readme 2022-05-10 19:40:35 -05:00
TODO.md Merge branch 'master' of https://github.com/tildearrow/furnace into es5506_alt 2022-05-27 13:01:06 +09:00

Furnace Tracker

screenshot

this is a multi-system chiptune tracker.

downloads | discussion/help | developer info | unofficial packages | FAQ


downloads

check out the Releases page. available for Windows, macOS and Linux (AppImage).

see here for unstable developer builds.

features

  • supports the following systems:
    • Sega Genesis
    • Sega Master System
    • Game Boy
    • PC Engine
    • NES
    • Commodore 64
    • Yamaha YM2151 (plus PCM)
    • Neo Geo
    • AY-3-8910 (ZX Spectrum, Atari ST, etc.)
    • Microchip AY8930
    • Philips SAA1099
    • Amiga
    • TIA (Atari 2600/7800)
  • multiple sound chips in a single song!
  • DefleMask compatibility - loads .dmf modules, .dmp instruments and .dmw wavetables
  • clean-room design (guesswork and ABX tests only, no decompilation involved)
  • bug/quirk implementation for increased playback accuracy
  • VGM and audio file export
  • accurate emulation cores whether possible (Nuked, MAME, SameBoy, Mednafen PCE, puNES, reSID, Stella, SAASound and ymfm)
  • additional features on top:
    • FM macros!
    • negative octaves
    • arbitrary pitch samples
    • sample loop points
    • SSG envelopes in Neo Geo
    • full duty/cutoff range in C64
    • ability to change tempo mid-song with Cxxx effect (xxx between 000 and 3ff)
  • open-source under GPLv2 or later.

quick references

unofficial packages

Packaging status

some people have provided packages for Unix/Unix-like distributions. here's a list.


developer info

Build furnace

if you can't download these artifacts (because GitHub requires you to be logged in), go here instead.

NOTE: do not download the project's source as a .zip or .tar.gz as these do not include the project's submodules which are necessary to proceed with building. please instead use Git as shown below.

dependencies

  • CMake
  • SDL2
  • zlib
  • JACK (optional)

SDL2 and zlib are included as submodules.

getting the source

type the following on a terminal/console: (make sure Git is installed)

git clone --recursive https://github.com/tildearrow/furnace.git
cd furnace

(the --recursive parameter ensures submodules are fetched as well)

compilation

your typical CMake project.

Windows using MSVC

as of now tildearrow uses MinGW for Windows builds, but thanks to OPNA2608 this works again!

from the developer tools command prompt:

mkdir build
cd build
cmake ..
msbuild ALL_BUILD.vcxproj

macOS and Linux

mkdir build
cd build
cmake ..
make

Alternatively, build scripts are provided in the scripts/ folder in the root of the repository.

CMake options

To add an option from the command-line: -D<NAME>=<VALUE>
Example: cmake -DBUILD_GUI=OFF -DWARNINGS_ARE_ERRORS=ON ..

Available options:

Name Default Description
BUILD_GUI ON Build the tracker (disable to build only a headless player)
WITH_JACK ON if system-installed JACK detected, otherwise OFF Whether to build with JACK support. Auto-detects if JACK is available
SYSTEM_FMT OFF Use a system-installed version of fmt instead of the vendored one
SYSTEM_LIBSNDFILE OFF Use a system-installed version of libsndfile instead of the vendored one
SYSTEM_ZLIB OFF Use a system-installed version of zlib instead of the vendored one
SYSTEM_SDL2 OFF Use a system-installed version of SDL2 instead of the vendored one
WARNINGS_ARE_ERRORS OFF (but consider enabling this & reporting any errors that arise from it!) Whether warnings in furnace's C++ code should be treated as errors

usage

./furnace

this opens the program.

./furnace -console <file>

this will play a compatible file.

./furnace -console -view commands <file>

this will play a compatible file and enable the commands view.

note that these commands only actually work in Linux environments. on other command lines, such as Windows' Command Prompt, or MacOS Terminal, it may not work correctly.


notes

how do I use Neo Geo SSG envelopes?

the following effects are provided:

  • 22xy: set envelope mode.
    • x sets the envelope shape, which may be one of the following:
      • 0: \___ decay
      • 4: /___ attack once
      • 8: \\\\ saw
      • 9: \___ decay
      • A: \/\/ inverse obelisco
      • B: \¯¯¯ decay once
      • C: //// inverse saw
      • D: /¯¯¯ attack
      • E: /\/\ obelisco
      • F: /___ attack once
    • if y is 1 then the envelope will affect this channel.
  • 23xx: set envelope period low byte.
  • 24xx: set envelope period high byte.
  • 25xx: slide envelope period up.
  • 26xx: slide envelope period down.

a lower envelope period will make the envelope run faster.


frequently asked questions

how do I use C64 absolute filter/duty?

on Instrument Editor in the C64 tab there are two options to toggle these. also provided are two effects:

  • 3xxx: set fine duty.
  • 4xxx: set fine cutoff. xxx range is 000-7ff. additionally, you can change the cutoff and/or duty as a macro inside an instrument by clicking the absolute cutoff macro and/or absolute duty macro checkbox at the bottom of the instrument. (for the filter, you also need to click the checkbox that says volume macro is cutoff macro.)

Q: how do I use PCM on a PCM-capable system?

A: Two possibilities: the recommended way is via creating the "Amiga/Sample" type instrument and assigning sample to it, or via old, Deflemask-compatible method, using 17xx effect

Q: my song sounds very odd at a certain point

A: file a bug report. use the Issues page. it's probably another playback inaccuracy.

Q: my song sounds correct, but it doesn't in DefleMask

A: file a bug report here. it still is a playback inaccuracy.

Q: my C64 song sounds terrible after saving as .dmf!

A: that's a limitation of the DefleMask format. save in Furnace song format instead (.fur).

Q: how do I solo channels?

A: right click on the channel name.


footnotes

copyright (C) 2021-2022 tildearrow and contributors.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

despite the fact this program works with the .dmf file format, it is NOT affiliated with Delek or DefleMask in any way, nor it is a replacement for the original program.