{"id":13418429,"url":"https://github.com/tildearrow/furnace","last_synced_at":"2025-04-29T18:19:06.742Z","repository":{"id":37041326,"uuid":"366986186","full_name":"tildearrow/furnace","owner":"tildearrow","description":"a multi-system chiptune tracker compatible with DefleMask modules","archived":false,"fork":false,"pushed_at":"2025-04-29T04:00:01.000Z","size":166929,"stargazers_count":2952,"open_issues_count":41,"forks_count":231,"subscribers_count":55,"default_branch":"master","last_synced_at":"2025-04-29T18:18:51.474Z","etag":null,"topics":["chiptune","emulator","music","tracker-music"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tildearrow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-05-13T08:37:26.000Z","updated_at":"2025-04-29T04:00:06.000Z","dependencies_parsed_at":"2024-03-16T23:41:08.183Z","dependency_job_id":"8989c274-a971-4307-9e95-37350aa7e434","html_url":"https://github.com/tildearrow/furnace","commit_stats":{"total_commits":8528,"total_committers":116,"mean_commits":73.51724137931035,"dds":0.2621951219512195,"last_synced_commit":"bc3f0b5a7781f07e09d22f7718cacea97cb6bdb0"},"previous_names":[],"tags_count":194,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tildearrow%2Ffurnace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tildearrow%2Ffurnace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tildearrow%2Ffurnace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tildearrow%2Ffurnace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tildearrow","download_url":"https://codeload.github.com/tildearrow/furnace/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251556470,"owners_count":21608452,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chiptune","emulator","music","tracker-music"],"created_at":"2024-07-30T22:01:02.226Z","updated_at":"2025-04-29T18:19:06.733Z","avatar_url":"https://github.com/tildearrow.png","language":"C++","funding_links":[],"categories":["C++","Audio","Demomaking","Software","Sound and Music"],"sub_categories":["Music Production","Audio \u0026 Synths","Trackers","Tutorials"],"readme":"# Furnace (chiptune tracker)\n\n![screenshot](papers/screenshot3.png)\n\nthe biggest multi-system chiptune tracker ever made!\n\n[downloads](#downloads) | [discussion/help](#quick-references) | [developer info](#developer-info) | [Unix/Linux packages](#packages)\n\n---\n## downloads\n\ncheck out the [Releases](https://github.com/tildearrow/furnace/releases) page. available for Windows, macOS and Linux.\n\nfor other operating systems, you may [build the source](#developer-info).\n\n[see here](https://nightly.link/tildearrow/furnace/workflows/build/master) for the latest unstable build.\n\n## features\n\n- a large selection of sound chips:\n  - Yamaha FM chips:\n    - YM2151 (OPM)\n    - YM2203 (OPN)\n    - YM2413 (OPLL)\n    - YM2414 (OPZ) used in Yamaha TX81Z\n    - YM2608 (OPNA) used in PC-98\n    - YM2610 (OPNB) used in Neo Geo\n    - YM2610B (OPNB2)\n    - YM2612 (OPN2) used in Sega Genesis and FM Towns\n    - YM3526 (OPL) used in C64 Sound Expander\n    - YM3812 (OPL2)\n    - YMF262 (OPL3) with full 4-op support!\n    - YMF278 (OPL4) including sample channels\n    - Y8950 (OPL with ADPCM)\n  - ESS ESFM (like OPL3 but with more features)\n  - square wave chips:\n    - AY-3-8910/YM2149(F) used in several computers and game consoles\n    - Commodore VIC used in the VIC-20\n    - Microchip AY8930\n    - TI SN76489 used in Sega Master System, BBC Micro, and many others\n    - PC Speaker\n    - Philips SAA1099 used in SAM Coupé\n    - OKI MSM5232 used in some arcade boards\n  - sample chips:\n    - SNES\n    - Amiga\n    - SegaPCM - all 16 channels\n    - Capcom QSound\n    - Yamaha YMZ280B (PCMD8)\n    - Ricoh RF5C68 used in Sega CD and FM Towns\n    - OKI MSM6258 and MSM6295\n    - Konami K007232\n    - Konami K053260\n    - Irem GA20\n    - Ensoniq ES5506\n    - Namco C140\n    - Namco C219\n  - wavetable chips:\n    - HuC6280 used in PC Engine\n    - Konami Bubble System WSG\n    - Konami SCC/SCC+\n    - Namco arcade chips (WSG/C15/C30)\n    - WonderSwan\n    - Seta/Allumer X1-010\n    - Sharp SM8521 used in Tiger Game.com\n  - NES (Ricoh 2A03/2A07), with additional expansion sound support:\n    - Konami VRC6\n    - Konami VRC7\n    - MMC5\n    - Famicom Disk System\n    - Sunsoft 5B\n    - Namco 163\n    - Family Noraebang (OPLL)\n  - SID (6581/8580) used in Commodore 64\n  - Mikey used in Atari Lynx\n  - ZX Spectrum beeper\n    - SFX-like engine\n    - QuadTone engine\n  - Pokémon Mini\n  - Commodore PET\n  - TED used in Commodore Plus/4\n  - Casio PV-1000\n  - TIA used in Atari 2600\n    - including software tuning engine (TIunA)\n  - POKEY used in Atari 8-bit computers\n  - **Game Boy**\n    - including software envelopes (zombie mode)\n  - Virtual Boy\n  - Game Boy Advance\n    - DMA (direct memory access) two channel mode\n    - MinMod software driver by Natt Akuma\n  - Nintendo DS\n  - Watara Supervision\n  - modern/fantasy:\n    - Commander X16 VERA\n    - tildearrow Sound Unit\n    - PowerNoise\n    - Bifurcator\n    - SID2\n    - SID3\n    - Generic PCM DAC\n- mix and match sound chips!\n  - over 200 ready to use presets from computers, game consoles and arcade boards...\n  - ...or create your own presets - up to 32 chips or a total of 128 channels!\n- DefleMask compatibility\n  - loads .dmf modules from all versions (beta 1 to 1.2.0)\n  - saves .dmf modules - both modern and legacy\n    - Furnace doubles as a module downgrader\n  - loads/saves .dmp instruments and .dmw wavetables as well\n  - clean-room design (guesswork and ABX tests only, no decompilation involved)\n  - some bug/quirk implementation for increased playback accuracy through compatibility flags\n- VGM export\n- ZSM export for Commander X16\n- TIunA export for Atari 2600\n- SAP type R export for POKEY (playable by Altirra and [lzss-sap](https://github.com/dmsc/lzss-sap))\n- modular layout that you may adapt to your needs\n- audio file export - entire song, per chip or per channel\n- quality emulation cores (Nuked, MAME, SameBoy, Mednafen PCE, NSFplay, puNES, reSID, Stella, SAASound, vgsound_emu and ymfm)\n- wavetable synthesizer\n  - available on wavetable chips\n  - create complex sounds with ease - provide up to two wavetables, select an effect and let go!\n- MIDI input support\n- additional features:\n  - FM macros!\n  - negative octaves\n  - advanced arp macros\n  - arbitrary pitch samples\n  - sample loop points\n  - SSG envelopes and ADPCM-B in Neo Geo\n  - pitchable OPLL drums\n  - full duty/cutoff range in C64\n  - optional PCM channel in C64\n  - full 16-channel SegaPCM\n  - ability to change tempo mid-song\n  - decimal tempo/tick rate\n  - multiple sub-songs in a module\n  - per-channel oscilloscope with waveform centering\n  - built-in sample editor\n  - chip mixing settings\n  - built-in visualizer in pattern view\n- open-source under GPLv2 or later.\n\n---\n# quick references\n\n- **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).\n- **discussion**: see the [Discussions](https://github.com/tildearrow/furnace/discussions) section, or the [Discord](https://discord.gg/QhA26dXD23).\n\n## packages\n\n[![Packaging status](https://repology.org/badge/vertical-allrepos/furnace.svg)](https://repology.org/project/furnace/versions)\n\nsome people have provided packages for Unix/Unix-like distributions. here's a list.\n\n- **Flatpak**: yes! Furnace is now available on [Flathub](https://flathub.org/apps/org.tildearrow.furnace) thanks to ColinKinloch.\n\n- **Arch Linux**: [furnace](https://archlinux.org/packages/extra/x86_64/furnace/) is in the official repositories.\n- **Chimera Linux**: [furnace](https://pkgs.chimera-linux.org/package/current/contrib/x86_64/furnace) is in the contrib repository.\n- **FreeBSD**: [a package in ports](https://www.freshports.org/audio/furnace/) is available courtesy of ehaupt.\n- **Nix**: [package](https://search.nixos.org/packages?channel=unstable\u0026show=furnace\u0026from=0\u0026size=50\u0026sort=relevance\u0026type=packages\u0026query=furnace) thanks to OPNA2608.\n- **openSUSE**: [a package](https://software.opensuse.org/package/furnace) is available, courtesy of fpesari.\n- **Void Linux**: [furnace](https://github.com/void-linux/void-packages/tree/master/srcpkgs/furnace) is available in the official repository.\n\n---\n# unstable builds\n\n[![Build furnace](https://github.com/tildearrow/furnace/actions/workflows/build.yml/badge.svg)](https://github.com/tildearrow/furnace/actions/workflows/build.yml)\n\nif 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.\n\n# developer info\n\nthe following section will teach you how to build Furnace from its source code.\n\n## dependencies\n\nthese are the things you'll need to build Furnace:\n\n- CMake\n- Git (for cloning the repository)\n- 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)\n\nread the sections below for information on how to set these up.\n\n## development environment setup (Windows)\n\nthis little section will teach you how to get either Visual Studio or MinGW ready for building Furnace.\n\n### MinGW through MSYS2\n\nI recommend you to use this because the compiler produces faster builds and it doesn't use a lot of disk space.\nthere's some command line-fu in here, so I hope you're prepared.\n\ninstall it through [MSYS2](https://www.msys2.org/), a Linux-like environment for Windows.\nfollow the guide **up to step 4**. **do NOT start MSYS2 from the installer** as this will start the wrong environment and prevent you from going further.\n\nMSYS2 provides a variety of environments, but we'll work with the MINGW64 one.\u003cbr/\u003e\nthese environments can be found in the Start menu, in a folder MSYS2 has created for you.\u003cbr/\u003e\ndon't \"run MSYS2 now\". go to the Start menu and launch MSYS2 with the MINGW64 environment (blue icon).\u003cbr/\u003e\n**it is extremely important that you use this environment**. the one that MSYS2 starts with by default (UCRT64) is NOT suitable for this task and will NOT work.\n\nwe'll install a couple packages, including GCC, CMake, Git and Ninja.\ntype the following in the MSYS2 console, and then press Enter.\n\n```\npacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-gcc git\n```\n\nwhen prompted to, type Y and press Enter again.\n\nproceed to the \"getting the source\" section.\n\nif it says UCRT64 anywhere in the console, YOU ARE IN THE WRONG ENVIRONMENT! if so quit MSYS2 NOW and start the MINGW64 environment.\n\n### Visual Studio (the real one)\n\nif you are patient enough, can stand 50GB of stuff and want the Microsoft experience, you may install [Visual Studio](https://visualstudio.microsoft.com) (no, not \"Code\"... that's just a text editor with IDE features). it is an easy-to-use IDE and compiler that comes in both free and paid versions.\n\nthe installer also lets you install Git and CMake. Visual Studio integrates nicely with these.\nhowever I recommend you install Git standalone so you can clone the repo correctly.\n\n## development environment setup (macOS)\n\ninstall the Xcode command line tools. open a Terminal and type:\n\n```\nxcode-select --install\n```\n\nif you would like to, and are able to use the App Store, feel free to get Xcode instead.\n\n## development environment setup (Linux/Unix-like)\n\nget GCC, Git and CMake through your package manager.\n\nyou may also need the following dependencies:\n\n- libpulse\n- libx11\n- libasound\n- libGL\n- JACK (optional)\n- any other libraries which may be used by SDL\n\nsome Linux distributions (e.g. Ubuntu or openSUSE) will require you to install the `-dev`/`-devel` versions of these.\n\nhaving libintl is recommended for locale support, but if it isn't present, Furnace will use its own implementation.\n\n## getting the source\n\ntype the following on a terminal/console: (make sure Git is installed)\n\n```\ngit clone --recursive https://github.com/tildearrow/furnace.git\ncd furnace\n```\n\n(the `--recursive` parameter ensures submodules are fetched as well)\n\n**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 use Git instead as shown in this section.**\n\n## compilation\n\n### Windows using MSVC/Visual Studio\n\nif you've downloaded the entirety of Visual Studio, including the IDE:\n\n#### let Visual Studio do the work for you\n\nmake sure you installed CMake through the Visual Studio installer.\njust open the CMake project and you're good to go.\n\n#### nah, leave it to me instead\n\nmake sure CMake is installed. `cd` to the Furnace directory and then:\n\n```\nmkdir build\ncd build\ncmake -G \"Visual Studio 17 2022\" ..\n```\n\nthen open the solution file in Visual Studio and build.\n\n### Windows using MSVC/Visual Studio (command line tools only)\n\nopen a developer tools command prompt, and run CMake as described in the previous section.\n\nafterwards, build Furnace by using:\n\n```\nmsbuild ALL_BUILD.vcxproj\n```\n\n### Windows using MinGW (through MSYS2)\n\nopen the MSYS2 MINGW64 environment. `cd` to the Furnace directory and then do:\n\n```\nmkdir build\ncd build\ncmake ..\nninja\n```\n\n### macOS, Linux and other Unix/Unix-like\n\nthe process is straightforward.\n\n```\nmkdir build\ncd build\ncmake ..\nmake\n```\n\n#### I like Xcode\n\non macOS you may do the following instead:\n\n```\nmkdir build\ncd build\ncmake -G Xcode ..\n```\n\n...and then load the project on Xcode or type `xcodebuild`.\n\n### notes\n\nonce you've created the build directory with `mkdir`, you don't have to do that again. just `cd` to it when you want to build Furnace.\n\nonce you've run CMake successfully, you don't have to run it again every time you make a change. just run `make`, `ninja`, `xcodebuild` or `msbuild`.\n\n## CMake options\n\nto add an option from the command-line, add it before the two dots: `-D\u003cNAME\u003e=\u003cVALUE\u003e`  \nExample: `cmake -DBUILD_GUI=OFF -DWARNINGS_ARE_ERRORS=ON ..`\n\nAvailable options:\n\n| Name                          |Default| Description\n| :---------------------------: | :---: | ---------------------------------------------------------------------------------------------\n| `BUILD_GUI`                   | `ON`  | Build the tracker (disable to build only a headless player)\n| `WITH_LOCALE`                 | `ON`  | Enable language support\n| `USE_RTMIDI`                  | `ON`  | Build with MIDI support using RtMidi\n| `USE_SDL2`                    | `ON`  | Build with SDL2 (required to build with GUI)\n| `USE_SNDFILE`                 | `ON`  | Build with libsndfile (required in order to work with audio files)\n| `USE_BACKWARD`                | `ON`  | Use backward-cpp to print a backtrace on crash/abort\n| `USE_FREETYPE`                | `OFF` | Build with FreeType support\n| `USE_MOMO`                    | auto¹ | Build a libintl implementation instead of using the system one\n| `WITH_JACK`                   | auto² | Whether to build with JACK support. Auto-detects if JACK is available\n| `WITH_PORTAUDIO`              | `ON`  | Whether to build with PortAudio.\n| `SYSTEM_FFTW`                 | `OFF` | Use a system-installed version of FFTW instead of the vendored one\n| `SYSTEM_FMT`                  | `OFF` | Use a system-installed version of fmt instead of the vendored one\n| `SYSTEM_LIBSNDFILE`           | `OFF` | Use a system-installed version of libsndfile instead of the vendored one\n| `SYSTEM_RTMIDI`               | `OFF` | Use a system-installed version of RtMidi instead of the vendored one\n| `SYSTEM_ZLIB`                 | `OFF` | Use a system-installed version of zlib instead of the vendored one\n| `SYSTEM_SDL2`                 | `OFF` | Use a system-installed version of SDL2 instead of the vendored one\n| `SYSTEM_FREETYPE`             | `OFF` | Use a system-installed version of FreeType instead of the vendored one\n| `SUPPORT_XP`                  | `OFF` | Build a Windows XP-compatible binary\n| `WARNINGS_ARE_ERRORS`         | `OFF`³| Whether warnings in furnace's C++ code should be treated as errors\n| `WITH_DEMOS`                  | `OFF` | Install demo songs on `make install`\n| `WITH_INSTRUMENTS`            | `ON`  | Install demo instruments on `make install`\n| `WITH_WAVETABLES`             | `ON`  | Install wavetables on `make install`\n| `SHOW_OPEN_ASSETS_MENU_ENTRY` | `OFF` | Show option to open built-in assets directory (on supported platforms)\n| `CONSOLE_SUBSYSTEM`           | `OFF` | Build with subsystem set to Console on Windows\n| `FORCE_APPLE_BIN`             | `OFF` | Enable installation of binaries (when doing `make install`) to PREFIX/bin on Apple platforms\n\n(¹) enabled by default if both libintl and setlocale aren't present (MSVC and Android), or on macOS\n\n(²) `ON` if system-installed JACK detected, otherwise `OFF`\n\n(³) but consider enabling this and reporting any errors that arise from it!\n\n## troubleshooting\n\nsometimes things go wrong and you can't proceed any further.\n\nthis guide may help you in that case.\n\n### \"command not found\", \"not a valid command\", and similar\n\neither you forgot to install something, it's not in your PATH or **you are using the wrong environment**.\n\n#### compiler\n\nif building with the Visual Studio command line tools, make sure you have started the native tools command prompt. [Microsoft has a guide here](https://learn.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line?view=msvc-170).\n\n\nif building with MinGW, make sure you have started the MSYS2 MINGW64 environment (not the UCRT64 one!).\n\n#### CMake or Git\n\ndid you install these?\n\nif you installed them through Visual Studio or MinGW, you may have to set the environment as I described above.\n\n### CMake errors\n\n#### No source or binary directory provided\n\nthe two dots after the `cmake` command are important. it tells CMake where the CMakeLists.txt file is at (two dots mean \"parent directory\", which makes sense since we are in the `build` directory inside the Furnace repo).\n\nread the compilation guide again.\n\n#### add\\_subdirectory missing\n\nif it says something about a missing directory in `extern`, then either:\n\n1. you didn't set up submodules, or\n2. you downloaded the source as a .zip or .tar.gz. don't do this.\n\nif 1, you may run `git submodule update --init --recursive`. this will initialize submodules.\n\nif 2, clone this repo.\n\n#### NMake Makefiles\n\nif CMake says something about NMake, then it means it couldn't find Visual Studio, or it didn't feel like finding Visual Studio.\n\ntry running CMake again but tell it to use the Visual Studio generator (`-G \"Visual Studio 17 2022\"`). type `cmake --help` for a list of generators.\n\n#### CMake was unable to find a build program\n\ndon't run CMake standalone unless you have Visual Studio or a compiler installed.\n\nif you are in the MSYS2 MINGW64 environment, make sure you installed `mingw-w64-x86_64-cmake` instead of `cmake`. restart the environment after doing so.\n\n#### Does not match the generator used previously\n\nyeah I know you probably hit this error right now. delete the build directory (or just CMakeCache.txt and CMakeFiles) and try again.\n\n#### The C compiler is not able to compile a simple test program\n\nsomething is really wrong, or you are trying to use a compiler outside of an environment.\nlaunch the appropriate environment and try again.\n\nif you are using MSYS2, make sure you have launched the MINGW64 environment. do **not** install `gcc`! instead, install `mingw-w64-x86_64-gcc`.\n\n#### ALSA API requested but no ALSA dev libraries found\n\ninstall the ALSA development libraries (libasound-dev or something like that).\n\nalso make sure you've installed the rest of dependencies so you don't hit one of the errors below...\n\n#### Compatibility with CMake \u003c 3.5 has been removed from CMake\n\nimmediately report this issue.\npatch out every CMakeLists.txt and change the cmake\\_minimum\\_required() to comply for now.\n\n### Furnace errors\n\n#### The code execution cannot proceed because libintl-8.dll was not found\n\nthis is because sadly libintl (what we use for language support) only exists as a dynamic library (a .dll) on Windows. run CMake again with `-DUSE_MOMO=ON` and then build to fix it.\n\n#### x11 not available/SDL not configured with OpenGL/GLX support\n\nmake sure you have installed the Mesa and X11 development libraries. use your package manager to do so.\nre-build Furnace afterwards.\n\n## console usage\n\n(note: if on Windows, type `furnace.exe` instead, or `Debug\\furnace.exe` on MSVC)\n\n```\n./furnace\n```\n\nthis opens the program.\n\n```\n./furnace -console \u003cfile\u003e\n```\n\nthis will play a compatible file.\n\n```\n./furnace -console -view commands \u003cfile\u003e\n```\n\nthis will play a compatible file and enable the commands view.\n\n**note that console mode may not work correctly on Windows. you may have to quit using the Task Manager.**\n\n---\n\n# footnotes\n\ncopyright (C) 2021-2025 tildearrow and contributors.\n\nThis 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.\n\nThis 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.\n\nYou 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.\n\n\nFurnace 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.\nadditionally, Furnace does not intend to replace DefleMask, nor any other program.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftildearrow%2Ffurnace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftildearrow%2Ffurnace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftildearrow%2Ffurnace/lists"}