Find a file
tildearrow e8163b71e2 try to unglitch the sample loops
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2022-01-25 03:24:32 -05:00
.github/workflows Init GitHub Action CI 2022-01-21 13:47:09 +01:00
demos update demos/README.md 2022-01-21 15:35:18 -05:00
extern dirent: use custom UTF-16 to UTF-8 converter 2022-01-20 04:52:20 -05:00
papers store FM macros in file 2022-01-22 22:21:21 -05:00
res VGM export: Arcade sample looping 2022-01-24 17:13:47 -05:00
scripts update mac release script 2022-01-21 15:34:06 -05:00
src try to unglitch the sample loops 2022-01-25 03:24:32 -05:00
test add furnace test suite 2022-01-22 23:50:26 -05:00
.gitignore add furnace test suite 2022-01-22 23:50:26 -05:00
.gitmodules use docking branch 2021-12-13 20:55:40 -05:00
CMakeLists.txt VGM export: Arcade sample looping 2022-01-24 17:13:47 -05:00
LICENSE add license 2021-05-13 03:37:04 -05:00
README.md now release 0.4.5 for real 2022-01-19 17:10:21 -05:00

Furnace

screenshot

this is a work-in-progress chiptune tracker compatible with DefleMask modules (.dmf).

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!
  • clean-room design (zero reverse-engineered code and zero decompilation; using official DMF specs, guesswork and ABX tests only)
  • bug/quirk implementation for increased playback accuracy
  • accurate emulation cores whether possible (Nuked, MAME, SameBoy, Mednafen PCE, puNES, reSID, Stella and ymfm)
  • additional features on top:
    • SSG envelopes in Neo Geo
    • full duty/cutoff range in C64
    • ability to change tempo mid-song with Cxxx effect (xxx between 000 and 3fff)
  • open-source. GPLv2.

downloads

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

help

check out the documentation. it's mostly incomplete, but has details on effects.

developer info

dependencies

  • CMake
  • SDL2
  • zlib
  • JACK (optional)

SDL2 and zlib are included as submodules.

compilation

your typical CMake project. clone (including submodules) and:

Windows using MSVC

no longer tested! as of now tildearrow uses MinGW for Windows builds...

from the developer tools command prompt:

mkdir build
cd build
cmake ..
msbuild ALL_BUILD.vcxproj

macOS and Linux

mkdir build
cd build
cmake ..
make

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.

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.

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.

my song sounds very odd at a certain point

file a bug report. use the Issues page.

it's probably another playback inaccuracy.

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

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

my C64 song sounds terrible after saving as .dmf!

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

how do I solo channels?

right click on the channel name.