2023-05-24 07:10:39 +00:00
# Furnace (chiptune tracker)
2021-05-11 20:08:08 +00:00
2023-05-25 09:10:42 +00:00
![screenshot ](papers/screenshot3.png )
2021-12-19 08:36:42 +00:00
2023-04-02 07:31:36 +00:00
the biggest multi-system chiptune tracker ever made!
2021-05-28 19:15:27 +00:00
2024-09-22 21:57:26 +00:00
[downloads ](#downloads ) | [discussion/help ](#quick-references ) | [developer info ](#developer-info ) | [Unix/Linux packages ](#packages )
2022-12-23 20:06:44 +00:00
---
## downloads
2023-07-09 01:07:33 +00:00
check out the [Releases ](https://github.com/tildearrow/furnace/releases ) page. available for Windows, macOS and Linux.
for other operating systems, you may [build the source ](#developer-info ).
2022-12-23 20:06:44 +00:00
2023-05-24 07:12:42 +00:00
[see here ](https://nightly.link/tildearrow/furnace/workflows/build/master ) for the latest unstable build.
2023-04-02 07:31:36 +00:00
2022-12-23 20:06:44 +00:00
## features
2023-10-02 04:08:46 +00:00
- a large selection of sound chips:
2023-04-02 07:31:36 +00:00
- Yamaha FM chips:
- YM2151 (OPM)
- YM2203 (OPN)
- YM2413 (OPLL)
- YM2414 (OPZ) used in Yamaha TX81Z
- YM2608 (OPNA) used in PC-98
- YM2610 (OPNB) used in Neo Geo
- YM2610B (OPNB2)
- YM2612 (OPN2) used in Sega Genesis and FM Towns
- YM3526 (OPL) used in C64 Sound Expander
- YM3812 (OPL2)
- YMF262 (OPL3) with full 4-op support!
- Y8950 (OPL with ADPCM)
2024-02-03 05:58:43 +00:00
- ESS ESFM (like OPL3 but with more features)
2023-04-02 07:31:36 +00:00
- square wave chips:
- AY-3-8910/YM2149(F) used in several computers and game consoles
- Commodore VIC used in the VIC-20
- Microchip AY8930
2024-09-14 17:25:38 +00:00
- TI SN76489 used in Sega Master System, BBC Micro, and many others
2023-04-02 07:31:36 +00:00
- PC Speaker
- Philips SAA1099 used in SAM Coupé
- OKI MSM5232 used in some arcade boards
- sample chips:
- SNES
- Amiga
- SegaPCM - all 16 channels
- Capcom QSound
- Yamaha YMZ280B (PCMD8)
- Ricoh RF5C68 used in Sega CD and FM Towns
- OKI MSM6258 and MSM6295
- Konami K007232
2023-08-21 00:07:29 +00:00
- Konami K053260
2023-04-02 07:31:36 +00:00
- Irem GA20
- Ensoniq ES5506
2023-08-21 00:07:29 +00:00
- Namco C140
2023-09-08 04:04:20 +00:00
- Namco C219
2023-04-02 07:31:36 +00:00
- wavetable chips:
- HuC6280 used in PC Engine
- Konami Bubble System WSG
- Konami SCC/SCC+
- Namco arcade chips (WSG/C15/C30)
- WonderSwan
- Seta/Allumer X1-010
- Sharp SM8521 used in Tiger Game.com
- NES (Ricoh 2A03/2A07), with additional expansion sound support:
- Konami VRC6
- Konami VRC7
- MMC5
- Famicom Disk System
- Sunsoft 5B
- Namco 163
- Family Noraebang (OPLL)
- SID (6581/8580) used in Commodore 64
- Mikey used in Atari Lynx
2023-05-24 12:18:45 +00:00
- ZX Spectrum beeper
- SFX-like engine
- QuadTone engine
2023-04-02 07:31:36 +00:00
- Pokémon Mini
- Commodore PET
2023-08-21 00:07:29 +00:00
- TED used in Commodore Plus/4
2023-05-24 12:18:45 +00:00
- Casio PV-1000
2023-04-02 07:31:36 +00:00
- TIA used in Atari 2600
2024-06-25 04:59:10 +00:00
- including software tuning engine (TIunA)
2023-04-02 07:31:36 +00:00
- POKEY used in Atari 8-bit computers
2024-01-07 02:59:17 +00:00
- **Game Boy**
- including SOFTWARE ENVELOPES (zombie mode)
2023-04-02 07:31:36 +00:00
- Virtual Boy
2024-04-01 05:44:42 +00:00
- Game Boy Advance
- DMA (direct memory access) two channel mode
- MinMod software driver by Natt Akuma
- Nintendo DS
2023-04-02 07:31:36 +00:00
- modern/fantasy:
- Commander X16 VERA
- tildearrow Sound Unit
2024-02-03 05:58:43 +00:00
- PowerNoise
2024-05-02 20:41:09 +00:00
- Bifurcator
- SID2
2023-07-09 01:07:33 +00:00
- Generic PCM DAC
2023-04-02 07:31:36 +00:00
- mix and match sound chips!
- over 200 ready to use presets from computers, game consoles and arcade boards...
2024-09-14 17:25:38 +00:00
- ...or create your own presets - up to 32 chips or a total of 128 channels!
2023-04-02 07:31:36 +00:00
- DefleMask compatibility
2023-05-25 09:10:42 +00:00
- loads .dmf modules from all versions (beta 1 to 1.1.9)
2023-04-02 07:31:36 +00:00
- saves .dmf modules - both modern and legacy
- Furnace doubles as a module downgrader
- loads/saves .dmp instruments and .dmw wavetables as well
- clean-room design (guesswork and ABX tests only, no decompilation involved)
- some bug/quirk implementation for increased playback accuracy through compatibility flags
- VGM export
2023-07-09 01:07:33 +00:00
- ZSM export for Commander X16
2024-08-25 23:33:33 +00:00
- TIunA export for Atari 2600
2023-04-02 07:31:36 +00:00
- modular layout that you may adapt to your needs
- audio file export - entire song, per chip or per channel
- quality emulation cores (Nuked, MAME, SameBoy, Mednafen PCE, NSFplay, puNES, reSID, Stella, SAASound, vgsound_emu and ymfm)
- wavetable synthesizer
- available on wavetable chips
2023-09-24 23:13:42 +00:00
- create complex sounds with ease - provide up to two wavetables, select an effect and let go!
2023-04-02 07:31:36 +00:00
- MIDI input support
- additional features:
- FM macros!
- negative octaves
- advanced arp macros
- arbitrary pitch samples
- sample loop points
- SSG envelopes and ADPCM-B in Neo Geo
- pitchable OPLL drums
- full duty/cutoff range in C64
- full 16-channel SegaPCM
- ability to change tempo mid-song
- decimal tempo/tick rate
- multiple sub-songs in a module
- per-channel oscilloscope with waveform centering
- built-in sample editor
- chip mixing settings
- built-in visualizer in pattern view
- open-source under GPLv2 or later.
2022-12-23 20:06:44 +00:00
---
# quick references
2024-09-22 21:57:26 +00:00
- **help**: check out the [documentation ](doc/README.md ), [quick start guide ](doc/1-intro/quickstart.md ), and [frequently asked questions (FAQ) ](doc/1-intro/faq.md ).
2024-09-25 17:56:24 +00:00
- **discussion**: see the [Discussions ](https://github.com/tildearrow/furnace/discussions ) section, or the [Discord ](https://discord.gg/QhA26dXD23 ).
2022-12-23 20:06:44 +00:00
2023-05-25 09:10:42 +00:00
## packages
2023-04-02 07:31:36 +00:00
2023-07-09 01:07:33 +00:00
[![Packaging status ](https://repology.org/badge/vertical-allrepos/furnace.svg )](https://repology.org/project/furnace/versions)
2023-04-02 07:31:36 +00:00
some people have provided packages for Unix/Unix-like distributions. here's a list.
2023-05-25 09:10:42 +00:00
2023-10-05 10:12:59 +00:00
- **Flatpak**: yes! Furnace is now available on [Flathub ](https://flathub.org/apps/org.tildearrow.furnace ) thanks to ColinKinloch.
2023-05-25 09:10:42 +00:00
- **Arch Linux**: [furnace ](https://archlinux.org/packages/extra/x86_64/furnace/ ) is in the official repositories.
2024-03-06 08:44:14 +00:00
- **Chimera Linux**: [furnace ](https://pkgs.chimera-linux.org/package/current/contrib/x86_64/furnace ) is in the contrib repository.
2023-09-10 17:50:36 +00:00
- **FreeBSD**: [a package in ports ](https://www.freshports.org/audio/furnace/ ) is available courtesy of ehaupt.
2023-05-25 09:10:42 +00:00
- **Nix**: [package ](https://search.nixos.org/packages?channel=unstable&show=furnace&from=0&size=50&sort=relevance&type=packages&query=furnace ) thanks to OPNA2608.
- **openSUSE**: [a package ](https://software.opensuse.org/package/furnace ) is available, courtesy of fpesari.
2023-07-23 21:00:31 +00:00
- **Void Linux**: [furnace ](https://github.com/void-linux/void-packages/tree/master/srcpkgs/furnace ) is available in the official repository.
2023-04-02 07:31:36 +00:00
2022-12-23 20:06:44 +00:00
---
2023-04-02 07:31:36 +00:00
# developer info
[![Build furnace ](https://github.com/tildearrow/furnace/actions/workflows/build.yml/badge.svg )](https://github.com/tildearrow/furnace/actions/workflows/build.yml)
if you can't download these artifacts (because GitHub requires you to be logged in), [go here ](https://nightly.link/tildearrow/furnace/workflows/build/master ) 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
2023-05-25 09:10:42 +00:00
- Git (for cloning the repository)
2023-04-02 07:31:36 +00:00
- JACK (optional, macOS/Linux only)
2023-05-25 09:10:42 +00:00
- a C/C++ compiler (e.g. Visual Studio or MinGW on Windows, Xcode (the command-line tools are enough) on macOS or GCC on Linux)
2023-04-02 07:31:36 +00:00
if building under Windows or macOS, no additional dependencies are required.
otherwise, you may also need the following:
- libpulse
- libx11
- libasound
- libGL
2023-07-09 01:07:33 +00:00
- any other libraries which may be used by SDL
2023-04-02 07:31:36 +00:00
some Linux distributions (e.g. Ubuntu or openSUSE) will require you to install the `-dev` versions of these.
2024-06-16 10:30:36 +00:00
having libintl is recommended for locale support, but if it isn't present, Furnace will use its own implementation.
2023-04-02 07:31:36 +00:00
## 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 ..
2023-05-25 09:10:42 +00:00
```
then open the solution file in Visual Studio and build.
alternatively, do:
```
2023-04-02 07:31:36 +00:00
msbuild ALL_BUILD.vcxproj
```
2023-05-25 09:10:42 +00:00
### Windows using MinGW
setting up MinGW is a bit more complicated. two benefits are a faster, hotter Furnace, and Windows XP support.
however, one huge drawback is lack of backtrace support, so you'll have to use gdb when diagnosing a crash.
```
mkdir build
cd build
cmake -G "MinGW Makefiles" ..
mingw32-make
```
you may use "MSYS Makefiles" instead, depending on how you installed MinGW.
### macOS, Linux and other Unix/Unix-like
2023-04-02 07:31:36 +00:00
```
mkdir build
cd build
cmake ..
make
```
2023-05-25 09:10:42 +00:00
on macOS you may do the following instead:
```
mkdir build
cd build
cmake -G Xcode ..
```
...and then load the project on Xcode or type `xcodebuild` .
2023-04-02 07:31:36 +00:00
### CMake options
To add an option from the command-line: `-D<NAME>=<VALUE>`
Example: `cmake -DBUILD_GUI=OFF -DWARNINGS_ARE_ERRORS=ON ..`
2022-12-23 20:06:44 +00:00
2023-04-02 07:31:36 +00:00
Available options:
2022-12-23 20:06:44 +00:00
2023-04-02 07:31:36 +00:00
| Name | Default | Description |
| :--: | :-----: | ----------- |
| `BUILD_GUI` | `ON` | Build the tracker (disable to build only a headless player) |
2024-06-13 22:04:57 +00:00
| `WITH_LOCALE` | `ON` | Enable language support |
2023-04-02 07:31:36 +00:00
| `USE_RTMIDI` | `ON` | Build with MIDI support using RtMidi |
| `USE_SDL2` | `ON` | Build with SDL2 (required to build with GUI) |
| `USE_SNDFILE` | `ON` | Build with libsndfile (required in order to work with audio files) |
| `USE_BACKWARD` | `ON` | Use backward-cpp to print a backtrace on crash/abort |
2023-10-16 11:14:44 +00:00
| `USE_FREETYPE` | `OFF` | Build with FreeType support |
2024-06-13 22:04:57 +00:00
| `USE_MOMO` | auto\*\*\* | Build a libintl implementation instead of using the system one |
2023-10-16 11:14:44 +00:00
| `WITH_JACK` | auto\* | Whether to build with JACK support. Auto-detects if JACK is available |
2023-08-30 22:32:51 +00:00
| `WITH_PORTAUDIO` | `ON` | Whether to build with PortAudio. |
2023-04-02 07:31:36 +00:00
| `SYSTEM_FFTW` | `OFF` | Use a system-installed version of FFTW instead of the vendored one |
| `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_RTMIDI` | `OFF` | Use a system-installed version of RtMidi 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 |
2024-03-28 20:12:12 +00:00
| `SYSTEM_FREETYPE` | `OFF` | Use a system-installed version of FreeType instead of the vendored one |
2023-04-02 07:31:36 +00:00
| `SUPPORT_XP` | `OFF` | Build a Windows XP-compatible binary |
2023-10-16 11:14:44 +00:00
| `WARNINGS_ARE_ERRORS` | `OFF` \*\* | Whether warnings in furnace's C++ code should be treated as errors |
2023-04-02 07:31:36 +00:00
| `WITH_DEMOS` | `ON` | Install demo songs on `make install` |
| `WITH_INSTRUMENTS` | `ON` | Install demo instruments on `make install` |
| `WITH_WAVETABLES` | `ON` | Install wavetables on `make install` |
2024-03-19 13:22:38 +00:00
| `SHOW_OPEN_ASSETS_MENU_ENTRY` | `OFF` | Show option to open built-in assets directory (on supported platforms) |
2024-05-04 21:48:45 +00:00
| `CONSOLE_SUBSYSTEM` | `OFF` | Build with subsystem set to Console on Windows |
2024-04-15 22:08:37 +00:00
| `FORCE_APPLE_BIN` | `OFF` | Enable installation of binaries (when doing `make install` ) to PREFIX/bin on Apple platforms |
2022-12-23 20:06:44 +00:00
2023-10-16 11:14:44 +00:00
(\*) `ON` if system-installed JACK detected, otherwise `OFF`
2023-10-16 20:01:44 +00:00
2023-10-16 11:14:44 +00:00
(\*\*) but consider enabling this & reporting any errors that arise from it!
2024-06-16 10:27:47 +00:00
(\*\*\*) enabled by default if both libintl and setlocale aren't present (MSVC and Android), or on macOS
2024-06-13 22:04:57 +00:00
2023-07-09 01:07:33 +00:00
## CMake Error
if it says something about a missing subdirectory in `extern` , then either:
1. you didn't set up submodules, or
2. you downloaded the source as a .zip or .tar.gz. don't do this.
if 1, you may run `git submodule update --init --recursive` . this will initialize submodules.
if 2, clone this repo.
2023-04-02 07:31:36 +00:00
## console usage
2022-12-23 20:06:44 +00:00
2023-05-25 09:10:42 +00:00
(note: if on Windows, type `furnace.exe` instead, or `Debug\furnace.exe` on MSVC)
2023-04-02 07:31:36 +00:00
```
./furnace
```
2022-12-23 20:06:44 +00:00
2023-04-02 07:31:36 +00:00
this opens the program.
2022-12-23 20:06:44 +00:00
2023-04-02 07:31:36 +00:00
```
./furnace -console < file >
```
2022-12-23 20:06:44 +00:00
2023-04-02 07:31:36 +00:00
this will play a compatible file.
```
./furnace -console -view commands < file >
```
this will play a compatible file and enable the commands view.
2023-05-25 09:10:42 +00:00
**note that console mode may not work correctly on Windows. you may have to quit using the Task Manager.**
2023-04-02 07:31:36 +00:00
---
2022-12-23 20:06:44 +00:00
# footnotes
2024-01-17 02:26:57 +00:00
copyright (C) 2021-2024 tildearrow and contributors.
2022-12-23 20:06:44 +00:00
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.
2023-05-25 09:10:42 +00:00
Furnace is NOT affiliated with Delek or DefleMask in any form, regardless of its ability to load and save the .dmf, .dmp and .dmw file formats.
additionally, Furnace does not intend to replace DefleMask, nor any other program.