Merge branch 'master' into sysmgrtooltip_syschaninfo
49
.github/issue_template.md
vendored
|
@ -1,48 +1 @@
|
|||
# EXTREMELY IMPORTANT NOTICE - PLEASE **READ**!!!!!!!
|
||||
|
||||
BY SUBMITTING AN ISSUE, YOU HEREBY AGREE TO COMPLY WITH THESE TERMS.
|
||||
FAILURE TO DO SO MAY RESULT IN YOUR ISSUE BEING DECLARED VOID.
|
||||
|
||||
**ADDITIONALLY, FAILURE TO COMPLY WITH POINTS 1 AND 2 WILL RESULT IN THE INABILITY TO ISSUE FURTHER ISSUE REPORTS.**
|
||||
|
||||
1. this section is exclusively for ISSUES related to Furnace (bugs, major annoyances and others). ONLY THINGS THAT COUNT AS **ISSUES** (ad pedem litterae).
|
||||
2. **THIS SECTION IS NOT FOR SUGGESTIONS, REQUESTS, QUESTIONS, SHOWCASE OR ANY OTHER DISCUSSIONS THAT DO NOT MEET THE CRITERIA AND DEFINITION OF AN __ISSUE__.**
|
||||
- see the Discussions section if you wish to submit these.
|
||||
3. check whether your issue has been reported already.
|
||||
- go to the Issues section, and use the search bar that appears on top of the Issues list.
|
||||
4. include the following information:
|
||||
- version of Furnace (help > about)
|
||||
- operating system (and version)
|
||||
- whether you have downloaded Furnace, or built it from source.
|
||||
5. provide these details if you believe the issue is operating system and/or computer-specific:
|
||||
- CPU model
|
||||
- Windows: go to Control Panel > System.
|
||||
- macOS: go to the Apple menu and select About This Mac...
|
||||
- Linux: use `lscpu` or `cat /proc/cpuinfo`.
|
||||
- graphics card (and driver version)
|
||||
- Windows: open `dxdiag` and observe the Render tab.
|
||||
- macOS: go to the Apple menu and select About This Mac...
|
||||
- this information is not always shown.
|
||||
- this information is not necessary if you use an Apple silicon Mac.
|
||||
- Linux: use `glxinfo | grep OpenGL`.
|
||||
6. if your issue is an abnormal program termination (a "Crash"), you must provide additional details:
|
||||
- the furnace_crash.txt file that is created by Furnace after a Crash. this file is located in the following paths:
|
||||
- Windows: `C:\Users\<username>\furnace_crash.txt`
|
||||
- Linux/other: `/tmp/furnace_crash.txt`
|
||||
- on macOS this file is not generated. you may retrieve information about the Crash by clicking on "Report..." or "Show Details" in the "quit unexpectedly" dialog that appears following the Crash.
|
||||
- make sure to remove any personal information for privacy reasons.
|
||||
- be sure to select "Don't Send" afterwards.
|
||||
- the furnace.log file located in:
|
||||
- Windows: `C:\Users\<username>\AppData\Roaming\furnace\furnace.log`
|
||||
- macOS: `~/Library/Application Support/furnace/furnace.log`
|
||||
- Linux: `~/.config/furnace/furnace.log`
|
||||
- make sure to remove any personal information for privacy reasons.
|
||||
|
||||
BY SUBMITTING AN ISSUE, YOU HEREBY AGREE TO COMPLY WITH THESE TERMS.
|
||||
FAILURE TO DO SO MAY RESULT IN YOUR ISSUE BEING DECLARED VOID.
|
||||
|
||||
**ADDITIONALLY, FAILURE TO COMPLY WITH POINTS 1 AND 2 WILL RESULT IN THE INABILITY TO ISSUE FURTHER ISSUE REPORTS.**
|
||||
|
||||
***END OF NOTICE***
|
||||
PLEASE REMOVE THIS NOTICE AFTER READING.
|
||||
FAILURE TO REMOVE THIS NOTICE IS NEGLIGENCE.
|
||||
please do not post suggestions, feature requests or non-issue discussions here. go to Discussions if you want to post these instead.
|
||||
|
|
1
.github/issue_template/config.yml
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
blank_issues_enabled: false
|
33
.github/issue_template/issue.yml
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
name: Issue Report
|
||||
description: for issues (bugs, annoyances, crashes and similar).
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Suggestions, feature requests, questions, showcase or anything else? Go to the Discussions section.
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Description
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: Steps to Reproduce (if applicable)
|
||||
- type: textarea
|
||||
id: info
|
||||
attributes:
|
||||
label: Additional Information
|
||||
- type: input
|
||||
id: version
|
||||
attributes:
|
||||
label: Furnace version? (help > about)
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: terms
|
||||
attributes:
|
||||
label: This is an issue
|
||||
description: By submitting this issue, you affirm that this is an actual issue (not a suggestion, question or otherwise non-issue).
|
||||
options:
|
||||
- label: I hereby certify that the ticket I am submitting is an issue.
|
||||
required: true
|
69
.github/workflows/build.yml
vendored
|
@ -2,7 +2,7 @@ name: Build furnace
|
|||
|
||||
on:
|
||||
push:
|
||||
branches: master
|
||||
branches: [master, locale]
|
||||
pull_request:
|
||||
branches: master
|
||||
|
||||
|
@ -11,7 +11,7 @@ defaults:
|
|||
shell: bash
|
||||
|
||||
env:
|
||||
BUILD_TYPE: RelWithDebInfo
|
||||
BUILD_TYPE: Debug
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
@ -22,11 +22,11 @@ jobs:
|
|||
- { name: 'Windows MSVC x86_64', os: windows-latest, compiler: msvc, arch: x86_64 }
|
||||
#- { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 }
|
||||
#- { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 }
|
||||
- { name: 'macOS x86_64', os: macos-latest, arch: x86_64 }
|
||||
- { name: 'macOS x86_64', os: macos-12, arch: x86_64 }
|
||||
- { name: 'macOS ARM', os: macos-latest, arch: arm64 }
|
||||
- { name: 'Linux x86_64', os: ubuntu-20.04, arch: x86_64 }
|
||||
#- { name: 'Linux ARM', os: ubuntu-18.04, arch: armhf }
|
||||
fail-fast: false
|
||||
fail-fast: true
|
||||
|
||||
name: ${{ matrix.config.name }}
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
|
@ -128,7 +128,8 @@ jobs:
|
|||
librtmidi-dev \
|
||||
libsndfile1-dev \
|
||||
zlib1g-dev \
|
||||
libjack-jackd2-dev
|
||||
libjack-jackd2-dev \
|
||||
gettext
|
||||
|
||||
- name: Install Dependencies [Linux armhf]
|
||||
if: ${{ runner.os == 'Linux' && matrix.config.compiler != 'mingw' && matrix.config.arch == 'armhf' }}
|
||||
|
@ -140,7 +141,8 @@ jobs:
|
|||
sudo apt update
|
||||
sudo apt install \
|
||||
crossbuild-essential-armhf \
|
||||
appstream
|
||||
appstream \
|
||||
gettext
|
||||
sudo apt install \
|
||||
libsdl2-dev:armhf \
|
||||
libfmt-dev:armhf \
|
||||
|
@ -150,6 +152,11 @@ jobs:
|
|||
libjack-jackd2-dev:armhf
|
||||
ls /usr/arm-linux-gnueabihf/lib
|
||||
|
||||
- name: Build Language Files
|
||||
if: ${{ runner.os == 'Linux' && matrix.config.compiler != 'mingw' }}
|
||||
run: |
|
||||
./scripts/build-po.sh
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
export USE_WAE=ON
|
||||
|
@ -173,9 +180,9 @@ jobs:
|
|||
fi
|
||||
elif [ '${{ runner.os }}' == 'macOS' ]; then
|
||||
if [ '${{ matrix.config.arch }}' == 'arm64' ]; then
|
||||
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="11.0"' '-DCMAKE_OSX_ARCHITECTURES=arm64')
|
||||
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="11.0"' '-DCMAKE_OSX_ARCHITECTURES=arm64' '-DMAKE_BUNDLE=ON')
|
||||
else
|
||||
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="10.9"')
|
||||
CMAKE_EXTRA_ARGS+=('-DCMAKE_OSX_DEPLOYMENT_TARGET="10.9"' '-DCMAKE_OSX_ARCHITECTURES=x86_64' '-DMAKE_BUNDLE=ON' '-DCMAKE_C_FLAGS=-march=core2' '-DCMAKE_CXX_FLAGS=-march=core2')
|
||||
fi
|
||||
elif [ '${{ runner.os }}' == 'Linux' ] && [ '${{ matrix.config.arch }}' == 'armhf' ]; then
|
||||
CMAKE_EXTRA_ARGS+=('-DCMAKE_TOOLCHAIN_FILE=scripts/Cross-Linux-armhf.cmake')
|
||||
|
@ -221,6 +228,7 @@ jobs:
|
|||
|
||||
cp -v ../LICENSE LICENSE.txt
|
||||
cp -v ../res/releaseReadme/unstable-win.txt README.txt
|
||||
cp -vr ../po/locale locale
|
||||
cp -vr ../papers ../${binPath}/furnace.exe ./
|
||||
if [ '${{ matrix.config.compiler }}' == 'msvc' ]; then
|
||||
cp -v ../${binPath}/furnace.pdb ./
|
||||
|
@ -233,38 +241,22 @@ jobs:
|
|||
if: ${{ runner.os == 'macOS' }}
|
||||
run: |
|
||||
pushd build
|
||||
retries=0
|
||||
while ! cpack; do
|
||||
echo "TRYING AGAIN..."
|
||||
retries=$((retries+1))
|
||||
if [ $retries -gt 5 ]; then
|
||||
echo "OH NO, WE'VE FAILED..."
|
||||
exit 1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
echo "preparing bundle"
|
||||
mkdir -p Furnace.app/Contents/Resources
|
||||
cp -v -r ../po/locale Furnace.app/Contents/Resources/locale
|
||||
cp -v ../res/icon.icns Furnace.app/Contents/Resources/Furnace.icns
|
||||
|
||||
codesign --deep -f -s - Furnace.app
|
||||
|
||||
echo "making dirs"
|
||||
mkdir orig
|
||||
mkdir new
|
||||
echo "attaching"
|
||||
echo "y" | hdiutil attach Furnace-*-Darwin.dmg -readonly -mount required -mountpoint orig
|
||||
|
||||
echo "copying"
|
||||
cp -v -r orig/Furnace.app new/Furnace.app
|
||||
cp -v -r Furnace.app new/Furnace.app
|
||||
ln -s /Applications new/Applications
|
||||
echo "synchronizing"
|
||||
sync
|
||||
echo "detaching"
|
||||
hdiutil detach orig
|
||||
|
||||
echo "removing orig"
|
||||
rmdir orig
|
||||
rm Furnace-*-Darwin.dmg
|
||||
|
||||
if [ -e new/Furnace.app/Contents/Resources/bin/furnace ]; then
|
||||
rm -v new/Furnace.app/Contents/Resources/bin/furnace
|
||||
rmdir new/Furnace.app/Contents/Resources/bin
|
||||
fi
|
||||
|
||||
echo "copying extra stuff"
|
||||
cp -v ../LICENSE new/LICENSE.txt
|
||||
|
@ -278,7 +270,7 @@ jobs:
|
|||
|
||||
echo "creating new image"
|
||||
retries=0
|
||||
while ! hdiutil create -srcfolder new -volname Furnace -format UDZO furnace.dmg; do
|
||||
while ! hdiutil create -srcfolder new -volname Furnace -format UDZO -fs HFS+ furnace.dmg; do
|
||||
echo "TRYING AGAIN..."
|
||||
retries=$((retries+1))
|
||||
if [ $retries -gt 5 ]; then
|
||||
|
@ -315,6 +307,8 @@ jobs:
|
|||
rm -r share/icons
|
||||
rm -r share/licenses
|
||||
rm -r share/metainfo
|
||||
rm -r share/mime
|
||||
mv share/locale ..
|
||||
|
||||
rmdir share
|
||||
|
||||
|
@ -337,3 +331,10 @@ jobs:
|
|||
with:
|
||||
name: ${{ steps.package-identify.outputs.id }}
|
||||
path: ${{ steps.package-identify.outputs.filename }}
|
||||
|
||||
- name: Upload Metal artifact
|
||||
if: ${{ github.repository == 'tildearrow/furnace' && github.ref_name == 'metal' }}
|
||||
uses: actions/upload-artifact@v4.3.0
|
||||
with:
|
||||
name: ${{ steps.package-identify.outputs.id }}
|
||||
path: ${{ steps.package-identify.outputs.filename }}
|
||||
|
|
2
.gitignore
vendored
|
@ -5,6 +5,7 @@ nosdl/
|
|||
release/
|
||||
t/
|
||||
winbuild/
|
||||
winCbuild/
|
||||
win32build/
|
||||
xpbuild/
|
||||
macbuild/
|
||||
|
@ -34,4 +35,5 @@ res/docpdf/manual.html
|
|||
res/docpdf/manual.pdf
|
||||
res/docpdf/.venv
|
||||
res/docpdf/htmldoc/
|
||||
res/fonts/compressed/
|
||||
res/furnace.appdata.xml
|
||||
|
|
3
.gitmodules
vendored
|
@ -15,6 +15,3 @@
|
|||
[submodule "extern/portaudio"]
|
||||
path = extern/portaudio
|
||||
url = https://github.com/PortAudio/portaudio.git
|
||||
[submodule "extern/adpcm-xq"]
|
||||
path = extern/adpcm-xq
|
||||
url = https://github.com/dbry/adpcm-xq.git
|
||||
|
|
283
CMakeLists.txt
|
@ -16,7 +16,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
|
|||
|
||||
set(CMAKE_PROJECT_VERSION_MAJOR 0)
|
||||
set(CMAKE_PROJECT_VERSION_MINOR 6)
|
||||
set(CMAKE_PROJECT_VERSION_PATCH 1)
|
||||
set(CMAKE_PROJECT_VERSION_PATCH 5)
|
||||
|
||||
set(BUILD_GUI_DEFAULT ON)
|
||||
set(USE_SDL2_DEFAULT ON)
|
||||
|
@ -67,33 +67,58 @@ else()
|
|||
endif()
|
||||
|
||||
set(WITH_RENDER_SDL_DEFAULT ON)
|
||||
if (APPLE)
|
||||
set(WITH_RENDER_OPENGL_DEFAULT OFF)
|
||||
else()
|
||||
set(WITH_RENDER_OPENGL_DEFAULT ON)
|
||||
endif()
|
||||
set(WITH_RENDER_OPENGL_DEFAULT ON)
|
||||
if (WIN32)
|
||||
set(WITH_RENDER_DX11_DEFAULT ON)
|
||||
set(WITH_RENDER_DX9_DEFAULT ON)
|
||||
else()
|
||||
set(WITH_RENDER_DX11_DEFAULT OFF)
|
||||
set(WITH_RENDER_DX9_DEFAULT OFF)
|
||||
endif()
|
||||
if (APPLE)
|
||||
set(WITH_RENDER_METAL_DEFAULT ON)
|
||||
else()
|
||||
set(WITH_RENDER_METAL_DEFAULT OFF)
|
||||
endif()
|
||||
|
||||
if (ANDROID)
|
||||
set(USE_GLES_DEFAULT ON)
|
||||
set(WITH_RENDER_OPENGL1_DEFAULT OFF)
|
||||
else()
|
||||
set(USE_GLES_DEFAULT OFF)
|
||||
if (APPLE)
|
||||
set(WITH_RENDER_OPENGL1_DEFAULT OFF)
|
||||
else()
|
||||
set(WITH_RENDER_OPENGL1_DEFAULT ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(WITH_LOCALE_DEFAULT ON)
|
||||
|
||||
try_compile(HAVE_SETLOCALE ${CMAKE_BINARY_DIR}/check SOURCES ${CMAKE_SOURCE_DIR}/src/check/check_setlocale.c)
|
||||
include(FindIntl)
|
||||
|
||||
if (HAVE_SETLOCALE AND Intl_FOUND AND NOT APPLE)
|
||||
set(USE_MOMO_DEFAULT OFF)
|
||||
else()
|
||||
set(USE_MOMO_DEFAULT ON)
|
||||
endif()
|
||||
|
||||
option(BUILD_GUI "Build the tracker (disable to build only a headless player)" ${BUILD_GUI_DEFAULT})
|
||||
option(WITH_LOCALE "Use libintl for language support" ${WITH_LOCALE_DEFAULT})
|
||||
option(USE_RTMIDI "Build with MIDI support using RtMidi." ${USE_RTMIDI_DEFAULT})
|
||||
option(USE_SDL2 "Build with SDL2. Required to build with GUI." ${USE_SDL2_DEFAULT})
|
||||
option(USE_SNDFILE "Build with libsndfile. Required in order to work with audio files." ${USE_SNDFILE_DEFAULT})
|
||||
option(USE_BACKWARD "Use backward-cpp to print a backtrace on crash/abort." ${USE_BACKWARD_DEFAULT})
|
||||
option(USE_MOMO "Build a libintl implementation instead of using the system one." ${USE_MOMO_DEFAULT})
|
||||
option(WITH_JACK "Whether to build with JACK support. Auto-detects if JACK is available" ${WITH_JACK_DEFAULT})
|
||||
option(WITH_PORTAUDIO "Whether to build with PortAudio for audio output." ${WITH_PORTAUDIO_DEFAULT})
|
||||
option(WITH_RENDER_SDL "Whether to build with the SDL_Renderer render backend." ${WITH_RENDER_SDL_DEFAULT})
|
||||
option(WITH_RENDER_OPENGL "Whether to build with the OpenGL render backend." ${WITH_RENDER_OPENGL_DEFAULT})
|
||||
option(WITH_RENDER_OPENGL1 "Whether to build with the OpenGL 1.1 render backend." ${WITH_RENDER_OPENGL1_DEFAULT})
|
||||
option(WITH_RENDER_DX11 "Whether to build with the DirectX 11 render backend." ${WITH_RENDER_DX11_DEFAULT})
|
||||
option(WITH_RENDER_DX9 "Whether to build with the DirectX 9 render backend." ${WITH_RENDER_DX9_DEFAULT})
|
||||
option(WITH_RENDER_METAL "Whether to build with the Metal render backend." ${WITH_RENDER_METAL_DEFAULT})
|
||||
option(USE_GLES "Use OpenGL ES for the OpenGL render backend." ${USE_GLES_DEFAULT})
|
||||
option(USE_FREETYPE "Use FreeType for font rendering." ON)
|
||||
option(SYSTEM_FFTW "Use a system-installed version of FFTW instead of the vendored one" OFF)
|
||||
|
@ -110,6 +135,15 @@ option(WITH_DEMOS "Install demo songs" ON)
|
|||
option(WITH_INSTRUMENTS "Install instruments" ON)
|
||||
option(WITH_WAVETABLES "Install wavetables" ON)
|
||||
option(SHOW_OPEN_ASSETS_MENU_ENTRY "Show option to open built-in assets directory (on supported platforms)" OFF)
|
||||
option(CONSOLE_SUBSYSTEM "Build Furnace with Console subsystem on Windows" OFF)
|
||||
if (APPLE)
|
||||
option(FORCE_APPLE_BIN "Force enable binary installation to /bin" OFF)
|
||||
option(MAKE_BUNDLE "Make a bundle" OFF)
|
||||
else()
|
||||
# not Apple - not needed
|
||||
set(FORCE_APPLE_BIN OFF)
|
||||
set(MAKE_BUNDLE OFF)
|
||||
endif()
|
||||
|
||||
set(DEPENDENCIES_INCLUDE_DIRS extern/IconFontCppHeaders src/icon)
|
||||
|
||||
|
@ -137,19 +171,21 @@ else()
|
|||
set(SYSTEM_SDL_MIN_VER 2.0.0)
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
# support Windows XP
|
||||
if (SUPPORT_XP)
|
||||
add_compile_definitions("_WIN32_WINNT=0x0501")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
#list(APPEND DEPENDENCIES_INCLUDE_DIRS "extern/SAASound/include")
|
||||
list(APPEND DEPENDENCIES_INCLUDE_DIRS "extern/vgsound_emu-modified")
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
|
||||
if (WIN32)
|
||||
# support Windows XP
|
||||
if (SUPPORT_XP)
|
||||
list(APPEND DEPENDENCIES_DEFINES "_WIN32_WINNT=0x0501")
|
||||
list(APPEND DEPENDENCIES_DEFINES "SUPPORT_XP")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (SYSTEM_FFTW)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(FFTW REQUIRED fftw3>=3.3)
|
||||
|
@ -390,15 +426,10 @@ else()
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if (BUILD_GUI)
|
||||
if (NOT WITH_RENDER_SDL AND NOT WITH_RENDER_OPENGL AND NOT WITH_RENDER_DX11)
|
||||
message(FATAL_ERROR "No render backends selected!")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(AUDIO_SOURCES
|
||||
src/audio/abstract.cpp
|
||||
src/audio/midi.cpp
|
||||
src/audio/pipe.cpp
|
||||
)
|
||||
|
||||
if (USE_SDL2)
|
||||
|
@ -445,6 +476,8 @@ src/baseutils.cpp
|
|||
src/fileutils.cpp
|
||||
src/utfutils.cpp
|
||||
|
||||
extern/itcompress/compression.c
|
||||
|
||||
extern/SAASound/src/SAAAmp.cpp
|
||||
extern/SAASound/src/SAADevice.cpp
|
||||
extern/SAASound/src/SAAEnv.cpp
|
||||
|
@ -485,7 +518,7 @@ extern/adpcm/yma_codec.c
|
|||
extern/adpcm/ymb_codec.c
|
||||
extern/adpcm/ymz_codec.c
|
||||
|
||||
extern/adpcm-xq/adpcm-lib.c
|
||||
extern/adpcm-xq-s/adpcm-lib.c
|
||||
|
||||
extern/opn/ym3438.c
|
||||
extern/Nuked-PSG/ympsg.c
|
||||
|
@ -497,6 +530,10 @@ extern/YMF262-LLE/fmopl3.c
|
|||
extern/YMF276-LLE/fmopn2.c
|
||||
extern/ESFMu/esfm.c
|
||||
extern/ESFMu/esfm_registers.c
|
||||
extern/emu2413/emu2413.c
|
||||
extern/YM2608-LLE/fmopna_2608.c
|
||||
extern/YM2608-LLE/fmopna_2610.c
|
||||
extern/YM2608-LLE/fmopna_2612.c
|
||||
|
||||
extern/pwrnoise/pwrnoise.c
|
||||
|
||||
|
@ -516,6 +553,8 @@ src/engine/platform/sound/nes/mmc5.c
|
|||
src/engine/platform/sound/vera_psg.c
|
||||
src/engine/platform/sound/vera_pcm.c
|
||||
|
||||
src/engine/platform/sound/atomicssg/ssg.c
|
||||
|
||||
src/engine/platform/sound/nes_nsfplay/5e01_apu.cpp
|
||||
src/engine/platform/sound/nes_nsfplay/5e01_dmc.cpp
|
||||
src/engine/platform/sound/nes_nsfplay/nes_apu.cpp
|
||||
|
@ -615,6 +654,17 @@ src/engine/platform/sound/dave/dave.cpp
|
|||
|
||||
src/engine/platform/sound/nds.cpp
|
||||
|
||||
src/engine/platform/sound/sid2/envelope.cc
|
||||
src/engine/platform/sound/sid2/filter.cc
|
||||
src/engine/platform/sound/sid2/sid.cc
|
||||
src/engine/platform/sound/sid2/version.cc
|
||||
src/engine/platform/sound/sid2/voice.cc
|
||||
src/engine/platform/sound/sid2/wave8580_PS_.cc
|
||||
src/engine/platform/sound/sid2/wave8580_PST.cc
|
||||
src/engine/platform/sound/sid2/wave8580_P_T.cc
|
||||
src/engine/platform/sound/sid2/wave8580__ST.cc
|
||||
src/engine/platform/sound/sid2/wave.cc
|
||||
|
||||
src/engine/platform/oplAInterface.cpp
|
||||
src/engine/platform/ym2608Interface.cpp
|
||||
src/engine/platform/ym2610Interface.cpp
|
||||
|
@ -624,9 +674,20 @@ src/engine/fileOps/dmf.cpp
|
|||
src/engine/fileOps/fc.cpp
|
||||
src/engine/fileOps/ftm.cpp
|
||||
src/engine/fileOps/fur.cpp
|
||||
src/engine/fileOps/it.cpp
|
||||
src/engine/fileOps/mod.cpp
|
||||
src/engine/fileOps/s3m.cpp
|
||||
src/engine/fileOps/text.cpp
|
||||
src/engine/fileOps/tfm.cpp
|
||||
src/engine/fileOps/xm.cpp
|
||||
|
||||
src/engine/fileOps/p.cpp
|
||||
src/engine/fileOps/p86.cpp
|
||||
src/engine/fileOps/pdx.cpp
|
||||
src/engine/fileOps/ppc.cpp
|
||||
src/engine/fileOps/pps.cpp
|
||||
src/engine/fileOps/pvi.cpp
|
||||
src/engine/fileOps/pzi.cpp
|
||||
|
||||
src/engine/blip_buf.c
|
||||
src/engine/brrUtils.c
|
||||
|
@ -640,6 +701,7 @@ src/engine/configEngine.cpp
|
|||
src/engine/dispatchContainer.cpp
|
||||
src/engine/engine.cpp
|
||||
src/engine/export.cpp
|
||||
src/engine/exportDef.cpp
|
||||
src/engine/fileOpsIns.cpp
|
||||
src/engine/fileOpsSample.cpp
|
||||
src/engine/filter.cpp
|
||||
|
@ -727,11 +789,14 @@ src/engine/platform/dave.cpp
|
|||
src/engine/platform/gbadma.cpp
|
||||
src/engine/platform/gbaminmod.cpp
|
||||
src/engine/platform/nds.cpp
|
||||
src/engine/platform/bifurcator.cpp
|
||||
src/engine/platform/sid2.cpp
|
||||
src/engine/platform/pcmdac.cpp
|
||||
src/engine/platform/dummy.cpp
|
||||
|
||||
src/engine/export/abstract.cpp
|
||||
src/engine/export/amigaValidation.cpp
|
||||
src/engine/export/tiuna.cpp
|
||||
|
||||
src/engine/effect/abstract.cpp
|
||||
src/engine/effect/dummy.cpp
|
||||
|
@ -747,6 +812,13 @@ if (WIN32)
|
|||
list(APPEND ENGINE_SOURCES res/furnace.rc)
|
||||
endif()
|
||||
|
||||
if (APPLE)
|
||||
if (CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.12)
|
||||
list(APPEND DEPENDENCIES_INCLUDE_DIRS extern/macports-legacy-support/include)
|
||||
list(APPEND ENGINE_SOURCES extern/macports-legacy-support/src/time.c)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(CLI_SOURCES
|
||||
src/cli/cli.cpp
|
||||
)
|
||||
|
@ -757,6 +829,7 @@ extern/imgui_patched/imgui_draw.cpp
|
|||
extern/imgui_patched/imgui_tables.cpp
|
||||
extern/imgui_patched/imgui_widgets.cpp
|
||||
extern/imgui_patched/backends/imgui_impl_sdl2.cpp
|
||||
extern/imgui_software_renderer/imgui_sw.cpp
|
||||
extern/imgui_patched/misc/cpp/imgui_stdlib.cpp
|
||||
extern/igfd/ImGuiFileDialog.cpp
|
||||
|
||||
|
@ -764,18 +837,22 @@ src/gui/plot_nolerp.cpp
|
|||
|
||||
src/gui/render.cpp
|
||||
src/gui/render/abstract.cpp
|
||||
src/gui/render/renderSoftware.cpp
|
||||
|
||||
src/gui/font_exo.cpp
|
||||
src/gui/font_liberationSans.cpp
|
||||
src/gui/font_mononoki.cpp
|
||||
src/gui/font_plexMono.cpp
|
||||
src/gui/font_plexSans.cpp
|
||||
src/gui/font_plexSansJP.cpp
|
||||
src/gui/font_plexSansKR.cpp
|
||||
src/gui/font_proggyClean.cpp
|
||||
src/gui/font_ptMono.cpp
|
||||
src/gui/font_unifont.cpp
|
||||
src/gui/font_icon.cpp
|
||||
src/gui/font_furicon.cpp
|
||||
src/gui/fonts.cpp
|
||||
src/gui/fontzlib.cpp
|
||||
|
||||
src/gui/image_icon.cpp
|
||||
src/gui/image_talogo.cpp
|
||||
|
@ -842,6 +919,7 @@ src/gui/sysManager.cpp
|
|||
src/gui/sysMiscInfo.cpp
|
||||
src/gui/sysPicker.cpp
|
||||
src/gui/tutorial.cpp
|
||||
src/gui/userPresets.cpp
|
||||
src/gui/util.cpp
|
||||
src/gui/waveEdit.cpp
|
||||
src/gui/volMeter.cpp
|
||||
|
@ -881,12 +959,32 @@ if (WITH_RENDER_OPENGL)
|
|||
endif()
|
||||
if (WIN32)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES opengl32)
|
||||
elseif(APPLE)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES "-framework OpenGL")
|
||||
elseif(USE_GLES)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES GLESv2)
|
||||
else()
|
||||
list(APPEND DEPENDENCIES_LIBRARIES GL)
|
||||
endif()
|
||||
message(STATUS "UI render backend: OpenGL")
|
||||
if (USE_GLES)
|
||||
message(STATUS "UI render backend: OpenGL ES 2.0")
|
||||
else()
|
||||
message(STATUS "UI render backend: OpenGL 3.0/2.0")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (WITH_RENDER_OPENGL1)
|
||||
list(APPEND GUI_SOURCES src/gui/render/renderGL1.cpp)
|
||||
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_opengl2.cpp)
|
||||
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_GL1)
|
||||
if (NOT WITH_RENDER_OPENGL)
|
||||
if (WIN32)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES opengl32)
|
||||
else()
|
||||
list(APPEND DEPENDENCIES_LIBRARIES GL)
|
||||
endif()
|
||||
endif()
|
||||
message(STATUS "UI render backend: OpenGL 1.1")
|
||||
endif()
|
||||
|
||||
if (WITH_RENDER_DX11)
|
||||
|
@ -897,7 +995,7 @@ if (WITH_RENDER_DX11)
|
|||
list(APPEND GUI_SOURCES src/gui/render/renderDX11.cpp)
|
||||
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_dx11.cpp)
|
||||
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_DX11)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES d3d11)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES d3d11 dxgi)
|
||||
message(STATUS "UI render backend: DirectX 11")
|
||||
endif()
|
||||
else()
|
||||
|
@ -905,6 +1003,31 @@ if (WITH_RENDER_DX11)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if (WITH_RENDER_DX9)
|
||||
if (WIN32)
|
||||
list(APPEND GUI_SOURCES src/gui/render/renderDX9.cpp)
|
||||
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_dx9.cpp)
|
||||
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_DX9)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES d3d9)
|
||||
message(STATUS "UI render backend: DirectX 9")
|
||||
else()
|
||||
message(FATAL_ERROR "DirectX 9 render backend only for Windows!")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (WITH_RENDER_METAL)
|
||||
if (APPLE)
|
||||
list(APPEND GUI_SOURCES src/gui/render/renderMetal.mm)
|
||||
list(APPEND GUI_SOURCES extern/imgui_patched/backends/imgui_impl_metal.mm)
|
||||
list(APPEND DEPENDENCIES_DEFINES HAVE_RENDER_METAL)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES "-framework Metal")
|
||||
list(APPEND DEPENDENCIES_LIBRARIES "-framework MetalKit")
|
||||
message(STATUS "UI render backend: Metal")
|
||||
else()
|
||||
message(FATAL_ERROR "Metal render backend only for Apple operating systems!")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT WIN32 AND NOT APPLE)
|
||||
CHECK_INCLUDE_FILE(sys/io.h SYS_IO_FOUND)
|
||||
CHECK_INCLUDE_FILE(linux/input.h LINUX_INPUT_FOUND)
|
||||
|
@ -935,6 +1058,39 @@ if (NOT WIN32)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if (WITH_LOCALE)
|
||||
if (HAVE_SETLOCALE)
|
||||
list(APPEND DEPENDENCIES_DEFINES HAVE_SETLOCALE)
|
||||
message(STATUS "setlocale() found")
|
||||
else()
|
||||
if (NOT USE_MOMO)
|
||||
message(FATAL_ERROR "setlocale() is not defined! This means the C library in your system does not support locale at all. Try enabling USE_MOMO.")
|
||||
else()
|
||||
message(STATUS "setlocale() is not defined")
|
||||
endif()
|
||||
endif()
|
||||
if (USE_MOMO)
|
||||
list(APPEND ENGINE_SOURCES src/momo/momo.c)
|
||||
list(APPEND DEPENDENCIES_DEFINES HAVE_LOCALE)
|
||||
list(APPEND DEPENDENCIES_DEFINES HAVE_MOMO)
|
||||
list(APPEND DEPENDENCIES_INCLUDE_DIRS src/momo)
|
||||
message(STATUS "Using libintl (Momo)")
|
||||
else()
|
||||
if ("${CMAKE_VERSION}" VERSION_LESS "3.2")
|
||||
message(FATAL_ERROR "CMake 3.2 or later required for locale support.")
|
||||
else()
|
||||
if (NOT Intl_FOUND)
|
||||
message(FATAL_ERROR "Could not find libintl! Try enabling USE_MOMO.")
|
||||
endif()
|
||||
list(APPEND DEPENDENCIES_DEFINES HAVE_LOCALE)
|
||||
list(APPEND DEPENDENCIES_DEFINES GNULIB_overrides_sprintf)
|
||||
list(APPEND DEPENDENCIES_INCLUDE_DIRS ${Intl_INCLUDE_DIRS})
|
||||
list(APPEND DEPENDENCIES_LIBRARIES ${Intl_LIBRARIES})
|
||||
message(STATUS "Using libintl (system)")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(USED_SOURCES ${ENGINE_SOURCES} ${AUDIO_SOURCES} ${CLI_SOURCES} src/main.cpp)
|
||||
|
||||
if (USE_BACKWARD)
|
||||
|
@ -967,6 +1123,7 @@ if (BUILD_GUI)
|
|||
list(APPEND DEPENDENCIES_INCLUDE_DIRS
|
||||
extern/imgui_patched
|
||||
extern/imgui_patched/backends
|
||||
extern/imgui_software_renderer
|
||||
extern/igfd
|
||||
)
|
||||
if (WIN32 OR APPLE)
|
||||
|
@ -989,7 +1146,7 @@ elseif (APPLE)
|
|||
find_library(COCOA Cocoa REQUIRED)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES ${COCOA})
|
||||
else()
|
||||
list(APPEND DEPENDENCIES_LIBRARIES dl)
|
||||
list(APPEND DEPENDENCIES_LIBRARIES ${CMAKE_DL_LIBS})
|
||||
endif()
|
||||
|
||||
if (NOT MSVC)
|
||||
|
@ -1036,41 +1193,56 @@ if (NOT ANDROID OR TERMUX)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if(ANDROID AND NOT TERMUX)
|
||||
add_library(furnace SHARED ${USED_SOURCES})
|
||||
elseif(WIN32)
|
||||
add_executable(furnace WIN32 ${USED_SOURCES})
|
||||
else()
|
||||
add_executable(furnace ${USED_SOURCES})
|
||||
if (WIN32 AND CONSOLE_SUBSYSTEM)
|
||||
list(APPEND DEPENDENCIES_DEFINES "TA_SUBSYSTEM_CONSOLE")
|
||||
endif()
|
||||
|
||||
target_include_directories(furnace SYSTEM PRIVATE ${DEPENDENCIES_INCLUDE_DIRS})
|
||||
target_compile_definitions(furnace PRIVATE ${DEPENDENCIES_DEFINES})
|
||||
target_compile_options(furnace PRIVATE ${DEPENDENCIES_COMPILE_OPTIONS})
|
||||
target_link_libraries(furnace PRIVATE ${DEPENDENCIES_LIBRARIES})
|
||||
if (MAKE_BUNDLE)
|
||||
set(FURNACE Furnace)
|
||||
else()
|
||||
set(FURNACE furnace)
|
||||
endif()
|
||||
|
||||
if(ANDROID AND NOT TERMUX)
|
||||
add_library(${FURNACE} SHARED ${USED_SOURCES})
|
||||
elseif(WIN32 AND NOT CONSOLE_SUBSYSTEM)
|
||||
add_executable(${FURNACE} WIN32 ${USED_SOURCES})
|
||||
else()
|
||||
add_executable(${FURNACE} ${USED_SOURCES})
|
||||
endif()
|
||||
|
||||
if (MAKE_BUNDLE AND NOT FORCE_APPLE_BIN)
|
||||
set_target_properties(${FURNACE} PROPERTIES
|
||||
MACOSX_BUNDLE True
|
||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/res/Info.plist)
|
||||
endif()
|
||||
|
||||
target_include_directories(${FURNACE} SYSTEM PRIVATE ${DEPENDENCIES_INCLUDE_DIRS})
|
||||
target_compile_options(${FURNACE} PRIVATE ${DEPENDENCIES_COMPILE_OPTIONS})
|
||||
target_link_libraries(${FURNACE} PRIVATE ${DEPENDENCIES_LIBRARIES})
|
||||
if (PKG_CONFIG_FOUND AND (SYSTEM_FMT OR SYSTEM_LIBSNDFILE OR SYSTEM_ZLIB OR SYSTEM_SDL2 OR SYSTEM_RTMIDI OR WITH_JACK))
|
||||
if ("${CMAKE_VERSION}" VERSION_LESS "3.13")
|
||||
message(WARNING
|
||||
"CMake version is <3.13, using old pkg-config LDFLAGS. "
|
||||
"You may encounter linking problems with these!"
|
||||
)
|
||||
target_link_libraries(furnace PRIVATE ${DEPENDENCIES_LEGACY_LDFLAGS})
|
||||
target_link_libraries(${FURNACE} PRIVATE ${DEPENDENCIES_LEGACY_LDFLAGS})
|
||||
else()
|
||||
target_link_directories(furnace PRIVATE ${DEPENDENCIES_LIBRARY_DIRS})
|
||||
target_link_options(furnace PRIVATE ${DEPENDENCIES_LINK_OPTIONS})
|
||||
target_link_directories(${FURNACE} PRIVATE ${DEPENDENCIES_LIBRARY_DIRS})
|
||||
target_link_options(${FURNACE} PRIVATE ${DEPENDENCIES_LINK_OPTIONS})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# why 3.16..... why not 3.0?
|
||||
if (NOT "${CMAKE_VERSION}" VERSION_LESS "3.16")
|
||||
if (BUILD_GUI)
|
||||
target_precompile_headers(furnace PUBLIC
|
||||
target_precompile_headers(${FURNACE} PUBLIC
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/pch.h>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/extern/imgui_patched/imgui.h>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/extern/imgui_patched/imgui_internal.h>
|
||||
)
|
||||
else()
|
||||
target_precompile_headers(furnace PUBLIC
|
||||
target_precompile_headers(${FURNACE} PUBLIC
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/pch.h>
|
||||
)
|
||||
endif()
|
||||
|
@ -1079,14 +1251,17 @@ endif()
|
|||
if (NOT ANDROID OR TERMUX)
|
||||
if (NOT WIN32 AND NOT APPLE)
|
||||
include(GNUInstallDirs)
|
||||
install(TARGETS furnace RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(TARGETS ${FURNACE} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(FILES res/furnace.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||
install(FILES res/mime.xml RENAME furnace.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
|
||||
if (NOT DONT_HAVE_GIT)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/furnace.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
|
||||
endif()
|
||||
install(DIRECTORY doc DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
||||
install(DIRECTORY papers DESTINATION ${CMAKE_INSTALL_DOCDIR}/other)
|
||||
install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/furnace)
|
||||
list(APPEND DEPENDENCIES_DEFINES LOCALE_DIR="${CMAKE_INSTALL_FULL_LOCALEDIR}")
|
||||
install(DIRECTORY po/locale/ DESTINATION ${CMAKE_INSTALL_LOCALEDIR})
|
||||
if (WITH_DEMOS OR WITH_INSTRUMENTS OR WITH_WAVETABLES)
|
||||
set(FURNACE_DATADIR ${CMAKE_INSTALL_FULL_DATADIR}/furnace)
|
||||
if (WITH_DEMOS)
|
||||
|
@ -1098,9 +1273,9 @@ if (NOT ANDROID OR TERMUX)
|
|||
if (WITH_WAVETABLES)
|
||||
install(DIRECTORY wavetables DESTINATION ${FURNACE_DATADIR})
|
||||
endif()
|
||||
add_compile_definitions(FURNACE_DATADIR="${FURNACE_DATADIR}")
|
||||
list(APPEND DEPENDENCIES_DEFINES FURNACE_DATADIR="${FURNACE_DATADIR}")
|
||||
if (SHOW_OPEN_ASSETS_MENU_ENTRY)
|
||||
add_compile_definitions(SHOW_OPEN_ASSETS_MENU_ENTRY)
|
||||
list(APPEND DEPENDENCIES_DEFINES SHOW_OPEN_ASSETS_MENU_ENTRY)
|
||||
endif()
|
||||
endif()
|
||||
foreach(num 16 32 64 128 256 512)
|
||||
|
@ -1110,24 +1285,12 @@ if (NOT ANDROID OR TERMUX)
|
|||
endforeach()
|
||||
install(FILES res/logo.png RENAME furnace.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/1024x1024/apps)
|
||||
else()
|
||||
install(TARGETS furnace RUNTIME DESTINATION bin)
|
||||
if (MAKE_BUNDLE)
|
||||
install(TARGETS ${FURNACE} BUNDLE DESTINATION Applications RESOURCE DESTINATION Resources)
|
||||
else()
|
||||
install(TARGETS ${FURNACE} RUNTIME DESTINATION bin)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(CPACK_PACKAGE_NAME "Furnace")
|
||||
set(CPACK_PACKAGE_VENDOR "tildearrow")
|
||||
set(CPACK_PACKAGE_DESCRIPTION "free and open-source chiptune tracker")
|
||||
|
||||
if (APPLE)
|
||||
set(CPACK_GENERATOR Bundle)
|
||||
set(CPACK_DMG_SLA_DIR ${CMAKE_SOURCE_DIR}/res/macLicense)
|
||||
set(CPACK_DMG_SLA_LANGUAGES en)
|
||||
set(CPACK_BUNDLE_NAME "Furnace")
|
||||
set(CPACK_DMG_VOLUME_NAME "Furnace")
|
||||
set(CPACK_BUNDLE_PLIST ${CMAKE_SOURCE_DIR}/res/Info.plist)
|
||||
set(CPACK_BUNDLE_ICON ${CMAKE_SOURCE_DIR}/res/icon.icns)
|
||||
set(CPACK_BUNDLE_STARTUP_COMMAND "furnace")
|
||||
set(CPACK_BUNDLE_APPLE_CERT_APP "-")
|
||||
endif()
|
||||
|
||||
include(CPack)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(${FURNACE} PRIVATE ${DEPENDENCIES_DEFINES})
|
||||
|
|
54
README.md
|
@ -80,14 +80,21 @@ for other operating systems, you may [build the source](#developer-info).
|
|||
- TED used in Commodore Plus/4
|
||||
- Casio PV-1000
|
||||
- TIA used in Atari 2600
|
||||
- including software tuning engine (TIunA)
|
||||
- POKEY used in Atari 8-bit computers
|
||||
- **Game Boy**
|
||||
- including SOFTWARE ENVELOPES (zombie mode)
|
||||
- Virtual Boy
|
||||
- Game Boy Advance
|
||||
- DMA (direct memory access) two channel mode
|
||||
- MinMod software driver by Natt Akuma
|
||||
- Nintendo DS
|
||||
- modern/fantasy:
|
||||
- Commander X16 VERA
|
||||
- tildearrow Sound Unit
|
||||
- PowerNoise
|
||||
- Bifurcator
|
||||
- SID2
|
||||
- Generic PCM DAC
|
||||
- mix and match sound chips!
|
||||
- over 200 ready to use presets from computers, game consoles and arcade boards...
|
||||
|
@ -130,7 +137,7 @@ for other operating systems, you may [build the source](#developer-info).
|
|||
---
|
||||
# quick references
|
||||
|
||||
- **discussion**: see the [Discussions](https://github.com/tildearrow/furnace/discussions) section, the [official Revolt](https://rvlt.gg/GRPS6tmc) or the [official Discord server](https://discord.gg/EfrwT2wq7z).
|
||||
- **discussion**: see the [Discussions](https://github.com/tildearrow/furnace/discussions) section.
|
||||
- **help**: check out the [documentation](doc/README.md).
|
||||
|
||||
## packages
|
||||
|
@ -175,6 +182,8 @@ otherwise, you may also need the following:
|
|||
|
||||
some Linux distributions (e.g. Ubuntu or openSUSE) will require you to install the `-dev` versions of these.
|
||||
|
||||
having libintl is recommended for locale support, but if it isn't present, Furnace will use its own implementation.
|
||||
|
||||
## getting the source
|
||||
|
||||
type the following on a terminal/console: (make sure Git is installed)
|
||||
|
@ -254,11 +263,13 @@ Available options:
|
|||
| Name | Default | Description |
|
||||
| :--: | :-----: | ----------- |
|
||||
| `BUILD_GUI` | `ON` | Build the tracker (disable to build only a headless player) |
|
||||
| `WITH_LOCALE` | `ON` | Enable language support |
|
||||
| `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 |
|
||||
| `USE_FREETYPE` | `OFF` | Build with FreeType support |
|
||||
| `USE_MOMO` | auto\*\*\* | Build a libintl implementation instead of using the system one |
|
||||
| `WITH_JACK` | auto\* | Whether to build with JACK support. Auto-detects if JACK is available |
|
||||
| `WITH_PORTAUDIO` | `ON` | Whether to build with PortAudio. |
|
||||
| `SYSTEM_FFTW` | `OFF` | Use a system-installed version of FFTW instead of the vendored one |
|
||||
|
@ -267,18 +278,22 @@ Available options:
|
|||
| `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 |
|
||||
| `SYSTEM_FREETYPE` | `OFF` | Use a system-installed version of SDL2 instead of the vendored one |
|
||||
| `SYSTEM_FREETYPE` | `OFF` | Use a system-installed version of FreeType instead of the vendored one |
|
||||
| `SUPPORT_XP` | `OFF` | Build a Windows XP-compatible binary |
|
||||
| `WARNINGS_ARE_ERRORS` | `OFF`\*\* | Whether warnings in furnace's C++ code should be treated as errors |
|
||||
| `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` |
|
||||
| `SHOW_OPEN_ASSETS_MENU_ENTRY` | `OFF` | Show option to open built-in assets directory (on supported platforms) |
|
||||
| `CONSOLE_SUBSYSTEM` | `OFF` | Build with subsystem set to Console on Windows |
|
||||
| `FORCE_APPLE_BIN` | `OFF` | Enable installation of binaries (when doing `make install`) to PREFIX/bin on Apple platforms |
|
||||
|
||||
(\*) `ON` if system-installed JACK detected, otherwise `OFF`
|
||||
|
||||
(\*\*) but consider enabling this & reporting any errors that arise from it!
|
||||
|
||||
(\*\*\*) enabled by default if both libintl and setlocale aren't present (MSVC and Android), or on macOS
|
||||
|
||||
## CMake Error
|
||||
|
||||
if it says something about a missing subdirectory in `extern`, then either:
|
||||
|
@ -317,6 +332,27 @@ this will play a compatible file and enable the commands view.
|
|||
---
|
||||
# frequently asked questions
|
||||
|
||||
> where's the manual?
|
||||
|
||||
it is in [doc/](doc/README.md).
|
||||
|
||||
> is there a tutorial?
|
||||
|
||||
[a video tutorial of tracker concepts is available on YouTube](https://www.youtube.com/watch?v=Q37XuOLz0jw). thanks Button Masher!
|
||||
|
||||
> can I import VGM or NSF?
|
||||
|
||||
nope. it's a feature that's been requested many times, but I don't have plans to implement that yet.
|
||||
|
||||
for NSF import, you can use [a modified version of FamiTracker called NSFImport](http://rainwarrior.ca/projects/nes/nsfimport.html), and then import the resulting .ftm into Furnace.
|
||||
it's all speed 1 though, so don't expect any songs to be nicely laid out with instruments and all.
|
||||
|
||||
> how about MIDI? can I import these?
|
||||
|
||||
nope. it's not implemented.
|
||||
|
||||
also, Furnace isn't a MIDI tracker.
|
||||
|
||||
> it doesn't open under macOS!
|
||||
|
||||
this is due to Apple's application signing policy. a workaround is to right click on the Furnace app icon and select Open.
|
||||
|
@ -334,14 +370,6 @@ xattr -d com.apple.quarantine /path/to/Furnace.app
|
|||
|
||||
you may need to log out and/or reboot after doing this.
|
||||
|
||||
> where's the manual?
|
||||
|
||||
it is in [doc/](doc/README.md).
|
||||
|
||||
> is there a tutorial?
|
||||
|
||||
[a video tutorial (of a previous version) is available on YouTube](https://youtube.com/playlist?list=PLCELB6AsTZUnwv0PC5AAGHjvg47F44YQ1), made by Spinning Square Waves.
|
||||
|
||||
> I've lost my song!
|
||||
|
||||
Furnace keeps backups of the songs you've worked on before. go to **file > restore backup**.
|
||||
|
@ -354,6 +382,12 @@ Furnace keeps backups of the songs you've worked on before. go to **file > resto
|
|||
|
||||
**not yet!** coming in 0.7 though, eventually...
|
||||
|
||||
> Roland MT-32 support?
|
||||
|
||||
MT-32 is used with MIDI in 99.999% of situations. it lacks a direct register interface.
|
||||
|
||||
also, Furnace is not a MIDI tracker....
|
||||
|
||||
> my .dmf song sounds odd at a certain point
|
||||
|
||||
Furnace's .dmf compatibility isn't perfect and it's mostly because DefleMask does things different.
|
||||
|
|
7
TODO.md
|
@ -1,4 +1,9 @@
|
|||
# to-do
|
||||
# to-do long term
|
||||
|
||||
- CSM macros
|
||||
- finish auto-clone
|
||||
- new pattern renderer - performance improvements
|
||||
- new info header
|
||||
- unlimited channels and chips
|
||||
- fix possible issues when moving selection
|
||||
- fix Metal intro crash
|
||||
|
|
|
@ -15,11 +15,11 @@ android {
|
|||
}
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 26
|
||||
versionCode 192
|
||||
versionName "0.6.1"
|
||||
versionCode 214
|
||||
versionName "0.6.5"
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DANDROID_APP_PLATFORM=android-21", "-DANDROID_STL=c++_static", "-DWARNINGS_ARE_ERRORS=ON"
|
||||
arguments "-DANDROID_APP_PLATFORM=android-21", "-DANDROID_STL=c++_static", "-DWARNINGS_ARE_ERRORS=ON", "-DWITH_LOCALE=ON", "-DUSE_MOMO=ON"
|
||||
// abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
|
||||
abiFilters 'arm64-v8a'
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.tildearrow.furnace"
|
||||
android:versionCode="192"
|
||||
android:versionName="0.6.1"
|
||||
android:versionCode="214"
|
||||
android:versionName="0.6.5"
|
||||
android:installLocation="auto">
|
||||
|
||||
<!-- OpenGL ES 2.0 -->
|
||||
|
|
1
android/app/src/main/assets/locale
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../../../../po/locale
|
BIN
demos/a2600/Funky_Afternoon.fur
Normal file
BIN
demos/a2600/Slam_the_Door.fur
Normal file
BIN
demos/a2600/TIADeepIntoCode.fur
Normal file
BIN
demos/a2600/Watch My Tone.fur
Normal file
BIN
demos/a2600/twin.fur
Normal file
BIN
demos/arcade/U.N. Owen Was Her (NS2).fur
Normal file
BIN
demos/arcade/sans_TaitoArcade.fur
Normal file
BIN
demos/ay8910/AyMate.fur
Normal file
BIN
demos/ay8930/Obscure_Temptation.fur
Normal file
BIN
demos/c64/Hellcharger.fur
Normal file
BIN
demos/esfm/WindFjordsESFM.fur
Normal file
BIN
demos/gameboy/GB_WaitForMe.fur
Normal file
BIN
demos/genesis/SpareHalloween2.fur
Normal file
BIN
demos/genesis/forest_freeway_zone.fur
Normal file
BIN
demos/genesis/imaginarium.fur
Normal file
BIN
demos/misc/Special Stage Sonic 3 (GBA).fur
Normal file
BIN
demos/misc/StrobesPowerNoise.fur
Normal file
BIN
demos/misc/Weightlessness_ES5506.fur
Normal file
BIN
demos/misc/ZetaForceLevel2.fur
Normal file
BIN
demos/misc/biffy_bifurcator.fur
Normal file
BIN
demos/misc/brokenspace-msm5232.fur
Normal file
BIN
demos/misc/cavedotwave-msm5232.fur
Normal file
BIN
demos/msx/BREEZE_SENSATION.fur
Normal file
BIN
demos/msx/Juice_Stand.fur
Normal file
BIN
demos/msx/OPLL_OperationPleaseLeaveLeave.fur
Normal file
BIN
demos/msx/Port Sun.fur
Normal file
BIN
demos/multichip/Cossack Stage Boss.fur
Normal file
BIN
demos/multichip/FamiMega Aliance.fur
Normal file
BIN
demos/multichip/Sunset Hill Zone Act 2.fur
Normal file
BIN
demos/multichip/TheOnlyWayIsForward.fur
Normal file
BIN
demos/multichip/satellite_interconnects.fur
Normal file
BIN
demos/nes/Byte-Sized Bop.fur
Normal file
BIN
demos/nes/Famitune1.fur
Normal file
BIN
demos/nes/Super cool and awesome samurai.fur
Normal file
BIN
demos/nes/The East.fur
Normal file
BIN
demos/nes/infinity.fur
Normal file
BIN
demos/opl/I_won_t_be_there_again.fur
Normal file
BIN
demos/opl/Perpetual_Motion.fur
Normal file
BIN
demos/opl/rain.cloud.sunset.fur
Normal file
BIN
demos/pc98/Counterattack.fur
Normal file
BIN
demos/quickstart.fur
Normal file
BIN
demos/sn7/Last Frecuency System.fur
Normal file
BIN
demos/sn7/Tidal_Tempest_Zone.fur
Normal file
BIN
demos/snes/Dear Blue SNES.fur
Normal file
BIN
demos/snes/Sunken Lights.fur
Normal file
BIN
demos/snes/analog.fur
Normal file
BIN
demos/snes/aurora.fur
Normal file
BIN
demos/snes/encjslt.fur
Normal file
BIN
demos/snes/sound processing unit.fur
Normal file
BIN
demos/snes/spd10.fur
Normal file
BIN
demos/snes/spd12.fur
Normal file
BIN
demos/snes/wonders_of_synthia.fur
Normal file
BIN
demos/specs2/acidic_juice_of_hell.fur
Normal file
BIN
demos/virtualboy/wavetablehell4-vb.fur
Normal file
|
@ -6,6 +6,10 @@ it has a large selection of features and sound chips. from the NES, SNES and Gen
|
|||
|
||||
every chip is emulated using many emulation cores, therefore the sound that Furnace produces is authentic to that of real hardware.
|
||||
|
||||
## quick start
|
||||
|
||||
if you just want to jump right in and get going, we recommended you go through the [quick start guide](quickstart.md) first. it should get you familiar enough with the program to comprehend the rest of the documentation.
|
||||
|
||||
## hexadecimal
|
||||
|
||||
Furnace uses hexadecimal (abbreviated as "hex") numbers frequently. see [this guide](hex.md) for a crash course.
|
||||
|
@ -16,11 +20,7 @@ Furnace uses a music tracker interface. think of a table with music notes writte
|
|||
for an introduction to a tracker interface, see [tracker concepts and terms](concepts.md) before using Furnace.
|
||||
there's also a [glossary of common terms](glossary.md).
|
||||
|
||||
due to its nature of being feature-packed, it may be technical and somewhat difficult to get around. therefore we added a [basic mode](../2-interface/basic-mode.md), which hides several advanced features.
|
||||
|
||||
it also has a flexible windowing system which you may move around and organize.
|
||||
|
||||
see [2-interface](../2-interface/README.md) and [3-pattern](../3-pattern/README.md) for more information.
|
||||
Furnace uses a flexible windowing system which you may move around and organize. see [2-interface](../2-interface/README.md) and [3-pattern](../3-pattern/README.md) for more information.
|
||||
|
||||
once familiar with the tracker, look to [9-guides](../9-guides/README.md) for useful techniques.
|
||||
|
||||
|
|
|
@ -51,6 +51,8 @@
|
|||
**FM**: frequency modulation. this is a method of generating sound that uses one operator's amplitude to modify another operator's frequency.
|
||||
- the FM in Yamaha chips is more accurately called _phase modulation,_ which uses a different method of computation to achieve similar results.
|
||||
|
||||
**.ftm**: FamiTracker Module.
|
||||
|
||||
**.fui**: a Furnace instrument file.
|
||||
|
||||
**.fur**: a Furnace module file.
|
||||
|
@ -64,6 +66,8 @@
|
|||
**interpolate**: to fill in the area between two values with a smooth ramp of values in between.
|
||||
- some sample-based chips can interpolate, filtering out unwanted harmonics.
|
||||
|
||||
**.it**: Impulse Tracker module.
|
||||
|
||||
**ladder effect**: an inaccurate yet common term for the DAC distortion that affects some Yamaha FM chips.
|
||||
|
||||
**LFO**: low frequency oscillator. a wave with a slow period (often below hearing range) used to alter other sounds.
|
||||
|
@ -105,6 +109,8 @@
|
|||
|
||||
**register**: a memory location within a sound chip. "register view" shows all the relevant memory of all chips in use.
|
||||
|
||||
**.s3m**: ScreamTracker 3 Module.
|
||||
|
||||
**sample** (1): a digitally recorded sound. usually stored as some variant of PCM.
|
||||
- these can take up a lot of room depending on length and sample rate, thus older systems tend to use short, lower quality samples.
|
||||
|
||||
|
@ -140,4 +146,6 @@
|
|||
|
||||
**wavetable** (2): an ordered group of wavetables(1) used in sequence within a single instrument.
|
||||
|
||||
**.xm**: eXtended Module. the file format of songs made with FastTracker 2.
|
||||
|
||||
**.zsm**: ZSound Music. a VGM-like file meant specifically for the Commander X16 computer.
|
||||
|
|
BIN
doc/1-intro/qs-insteditor.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
doc/1-intro/qs-instlist-empty.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
doc/1-intro/qs-instlist-full.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
doc/1-intro/qs-instlist-lessempty.png
Normal file
After Width: | Height: | Size: 9.6 KiB |
BIN
doc/1-intro/qs-interface.png
Normal file
After Width: | Height: | Size: 141 KiB |
BIN
doc/1-intro/qs-macro-release.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
doc/1-intro/qs-macro.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
doc/1-intro/qs-noteoffs-channels.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
doc/1-intro/qs-notes-channel.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
doc/1-intro/qs-notes-channels.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
doc/1-intro/qs-notes-effect.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
doc/1-intro/qs-notes-inst.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
doc/1-intro/qs-notes-spaced.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
doc/1-intro/qs-notes-vol.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
doc/1-intro/qs-notes-wronginst.png
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
doc/1-intro/qs-order-added.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
doc/1-intro/qs-order-changed.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
doc/1-intro/qs-order-default.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
doc/1-intro/qs-playeditcontrols.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
doc/1-intro/qs-samplist.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
doc/1-intro/qs-selection.png
Normal file
After Width: | Height: | Size: 2.9 KiB |