diff --git a/docs/CHANGELOG.md b/CHANGELOG.md similarity index 75% rename from docs/CHANGELOG.md rename to CHANGELOG.md index f3e68e686..afbd9adaa 100644 --- a/docs/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,502 +6,531 @@ Written by D.P.C.M. Version 0.5.2.9 -Last updated: December 25, 2025 +Last updated: January 06, 2026 --- -## Unreleased - 2025-12-25 +## Unreleased - 2026-01-06 -- ### Important changes: +### Important changes - - ... +- ... -- ### Improvements: +### Improvements - - ... +- ... -- ### Bug fixes: +### Bug fixes - - ... +- ... + +### Internal + +- Automate writing resource file version info based on `version.h` (@Gumball2415 #388 #389) +- Indicate build type in packaging script (@Gumball2415 #365 #389) +- Use only three version numbers for welcome message (@Gumball2415 #365 #389) +- Update documentation regarding version updating (@Gumball2415 #389) +- Add issue templates (@Gumball2415 #395) +- Clarify the template nature of the PR template (@Gumball2415 #395) +- Include change log format in PR template (@Gumball2415 #395) +- Reformat change log to not use bulleted headers (@Gumball2415 #398) +- Move `CONTRIBUTING.md` and `CHANGELOG` to root folder (@Gumball2415 #398) +- Refactor custom build commands in `.vcxproj`s (@Gumball2415 #398) +- Update CMake build scripts (@Gumball2415 #398) +- Update CMake source list in `exe.cmake` (@Gumball2415 #398) -- ### Internal: - - Automate writing resource file version info based on `version.h` (@Gumball2415 #388 #389) - - Indicate build type in packaging script (@Gumball2415 #365 #389) - - Use only three version numbers for welcome message (@Gumball2415 #365 #389) - - Update documentation regarding version updating (@Gumball2415 #389) - - Add issue templates (@Gumball2415 #395) - - Clarify the template nature of the PR template (@Gumball2415 #395) - - Include change log format in PR template (@Gumball2415 #395) ## Dn0.5.2 - 2025-08-18 -- ### Important changes: - - - Set release number as SemVer (@Gumball2415 #365 #376) - - Triangle linear counter retrigger command (`Xxx`) (@zeta0134 @Gumball2415 #291 #349) - -- ### Improvements: - - - Refactor and adjust tracker register view (@Gumball2415 #338) - - Refactor pitch, volume, and note drawing functions - - Apply OETF gamma 2.2 for viewing low volume values - - Reduce magic constants in source - - Add tone tints for 5B, FDS, and 2A03 periodic noise - - Implement pitched 2A03 periodic noise pitch-volume indicator - - Implement logarithmic level for VRC7 pitch-volume indicator - - Pick song length mode when typing length time in WAV export dialog (@nyanpasu64 #346) - - Add dialog indication for failed version check (@Gumball2415 #371 #376) - -- ### Bug fixes: - - - Synchronize effect bytecode order when compiling "glob" multichip (@Gumball2415 #331 #341) - - Fix C-0 in instrument editor not playing (@Gumball2415 #342) - - Fix 64-byte alignment of DPCM segment in .asm export (@Gumball2415 #342) - - Patch NSF driver channel ID table with used channels in N163 .nsfs (@DarkZapOTron @Gumball2415 #337 #342) - - Fix `ft_channel_enable` in .asm export to list used channels (@Gumball2415 #342) - - Fix FDS multichip write protection padding for NSF kernel builds (@Gumball2415 #334 #342) - - Fix N163 channel count initialization (@Gumball2415 #342) - - Fix VRC7 linear pitch slide channel index bug (@Gumball2415 #340 #342) - - Match N163 wave index sequence limit behavior in NSF driver (@HeeminTV @Gumball2415 #344 #342) - - Fix spelling error in WAV export dialog (@nyanpasu64 #346) - - Fix pushing to main thread receive queue from wrong thread (@nyanpasu64 #346) - - Fix overlapping memcpy bug in DPCM sample editor (@nyanpasu64 #345) - - Fix bug where `m_pWaveFile` is not cleared if we fail to open a WAV file (@nyanpasu64 #353) - - Fix WAV export crash caused by uninitialized variables (@sunshinespecialist @nyanpasu64 #190 #367) - - Adjust selection auto-scroll offsets (@henrikvilhelmberglund #351 #368) - - Fix channel state retrieval on reset tempo (@henrikvilhelmberglund @Gumball2415 #357 #373) - - Fix N163 linear mix volume quantization (@Gumball2415 #366) - - Beta: Fix triangle `Xxx`-`Sxx` linear counter behavior (@Gumball2415 #355 #366) - - Prevent focus shifting with open instrument editor when inputting instrument patterns (@@henrikvilhelmberglund @Gumball2415 #350 #366) - - Fix note slide portamento reset in NSF driver (@Gumball2415 #363 #366) - - Fix `1xx`/`2xx` empty note early exit (@Gumball2415 #366) - -- ### Internal: - - - Refactor FDS modulation implementation in NSF driver (@Gumball2415 #341) - - Refactor instrument loading (@Gumball2415 #342) - - Refactor NSF compiler code to use member variable instead of redundant calls (@Gumball2415 #342) - - Port `build_engine.lua` to Python for faster NSF kernel builds (@Gumball2415 #342) - - Enable `USE_ALL` when using all expansion audio flags (@Gumball2415 #342) - - Refactor NSFe metadata generation (@Gumball2415 #335 #342) - - Optimize VRC7 register/data write delay timings (@Gumball2415 #342) - - Add logging for WAV export events, to help identify cause of crashes (@nyanpasu64 #353) - - Add NSF binary header compiling to .sln build process (@Gumball2415 #359) - - Refactor `resource.h` custom build commands (@Gumball2415 #359) - - Add NSF binary compiling to GitHub Actions (@Gumball2415 #359) - - Add GitHub Actions CC65 build tool caching (@Gumball2415 #359) - - Refactor CI building (@Gumball2415 #359) - - Refactor release publish workflow (@Gumball2415 #359) - - Add parallel NSF driver building in build script (@Gumball2415 #359) - - Refactor Effect hint status logic (@Gumball2415 #352) - - Add effect hint for triangle linear counter retrigger (Xxx) (@Gumball2415 #352) - - Bypass mute disable on chip-global effects (@HeeminTV #369) - - Update Windows SDK version to `10.0.26100` (@Gumball2415 #370 #375 #366) - - Add `/utf` build flag to allow compiling in non-English system locales (@henrikvilhelmberglund @Gumball2415 #368 #372) - - Rename contributor to Sun Rays (@Gumball2415 #362 #366) - - Include readme and licenses in zipped distribution builds (@Gumball2415 #376) - - Remove old 0CC readme and changelog (@Gumball2415 #376) +### Important changes + +- Set release number as SemVer (@Gumball2415 #365 #376) +- Triangle linear counter retrigger command (`Xxx`) (@zeta0134 @Gumball2415 #291 #349) + +### Improvements + +- Refactor and adjust tracker register view (@Gumball2415 #338) + - Refactor pitch, volume, and note drawing functions + - Apply OETF gamma 2.2 for viewing low volume values + - Reduce magic constants in source + - Add tone tints for 5B, FDS, and 2A03 periodic noise + - Implement pitched 2A03 periodic noise pitch-volume indicator + - Implement logarithmic level for VRC7 pitch-volume indicator +- Pick song length mode when typing length time in WAV export dialog (@nyanpasu64 #346) +- Add dialog indication for failed version check (@Gumball2415 #371 #376) + +### Bug fixes + +- Synchronize effect bytecode order when compiling "glob" multichip (@Gumball2415 #331 #341) +- Fix C-0 in instrument editor not playing (@Gumball2415 #342) +- Fix 64-byte alignment of DPCM segment in .asm export (@Gumball2415 #342) +- Patch NSF driver channel ID table with used channels in N163 .nsfs (@DarkZapOTron @Gumball2415 #337 #342) +- Fix `ft_channel_enable` in .asm export to list used channels (@Gumball2415 #342) +- Fix FDS multichip write protection padding for NSF kernel builds (@Gumball2415 #334 #342) +- Fix N163 channel count initialization (@Gumball2415 #342) +- Fix VRC7 linear pitch slide channel index bug (@Gumball2415 #340 #342) +- Match N163 wave index sequence limit behavior in NSF driver (@HeeminTV @Gumball2415 #344 #342) +- Fix spelling error in WAV export dialog (@nyanpasu64 #346) +- Fix pushing to main thread receive queue from wrong thread (@nyanpasu64 #346) +- Fix overlapping memcpy bug in DPCM sample editor (@nyanpasu64 #345) +- Fix bug where `m_pWaveFile` is not cleared if we fail to open a WAV file (@nyanpasu64 #353) +- Fix WAV export crash caused by uninitialized variables (@sunshinespecialist @nyanpasu64 #190 #367) +- Adjust selection auto-scroll offsets (@henrikvilhelmberglund #351 #368) +- Fix channel state retrieval on reset tempo (@henrikvilhelmberglund @Gumball2415 #357 #373) +- Fix N163 linear mix volume quantization (@Gumball2415 #366) +- Beta: Fix triangle `Xxx`-`Sxx` linear counter behavior (@Gumball2415 #355 #366) +- Prevent focus shifting with open instrument editor when inputting instrument patterns (@henrikvilhelmberglund @Gumball2415 #350 #366) +- Fix note slide portamento reset in NSF driver (@Gumball2415 #363 #366) +- Fix `1xx`/`2xx` empty note early exit (@Gumball2415 #366) + +### Internal + +- Refactor FDS modulation implementation in NSF driver (@Gumball2415 #341) +- Refactor instrument loading (@Gumball2415 #342) +- Refactor NSF compiler code to use member variable instead of redundant calls (@Gumball2415 #342) +- Port `build_engine.lua` to Python for faster NSF kernel builds (@Gumball2415 #342) +- Enable `USE_ALL` when using all expansion audio flags (@Gumball2415 #342) +- Refactor NSFe metadata generation (@Gumball2415 #335 #342) +- Optimize VRC7 register/data write delay timings (@Gumball2415 #342) +- Add logging for WAV export events, to help identify cause of crashes (@nyanpasu64 #353) +- Add NSF binary header compiling to .sln build process (@Gumball2415 #359) +- Refactor `resource.h` custom build commands (@Gumball2415 #359) +- Add NSF binary compiling to GitHub Actions (@Gumball2415 #359) +- Add GitHub Actions CC65 build tool caching (@Gumball2415 #359) +- Refactor CI building (@Gumball2415 #359) +- Refactor release publish workflow (@Gumball2415 #359) +- Add parallel NSF driver building in build script (@Gumball2415 #359) +- Refactor Effect hint status logic (@Gumball2415 #352) +- Add effect hint for triangle linear counter retrigger (Xxx) (@Gumball2415 #352) +- Bypass mute disable on chip-global effects (@HeeminTV #369) +- Update Windows SDK version to `10.0.26100` (@Gumball2415 #370 #375 #366) +- Add `/utf` build flag to allow compiling in non-English system locales (@henrikvilhelmberglund @Gumball2415 #368 #372) +- Rename contributor to Sun Rays (@Gumball2415 #362 #366) +- Include readme and licenses in zipped distribution builds (@Gumball2415 #376) +- Remove old 0CC readme and changelog (@Gumball2415 #376) + + ## Dn0.5.1.1 - 2025-01-13 -- ### Hotfixes +### Hotfixes + +- Match submenu item instead of hardcoding indices (@Gumball2415 #317 #318) - - Match submenu item instead of hardcoding indices (@Gumball2415 #317 #318) +### Internal + +- Port GitHub Wiki pages to markdown files in repo (@Gumball2415 #319) -- ### Internal: - - Port GitHub Wiki pages to markdown files in repo (@Gumball2415 #319) ## Dn0.5.1.0 - 2025-01-07 -- ### Important changes: - - - Major export refactoring (@Gumball2415 #262) - - NSF driver fixes (@Gumball2415 #262) - -- ### Improvements: - - - Use CCompiler pointer for writing ASM export title (@Gumball2415 #262) - - Decouple NSFDRV header from driver data (@Gumball2415 #262) - - Add NSF stub file for .asm export (@Gumball2415 #262) - - Implement "glob" multichip assembly export (@Gumball2415 #262) - - Specify what parts of pattern data are invalid (@Gumball2415 #262) - - Differentiate between error and warning colors (@Gumball2415 #262) - - Account for `HOLD_INSTRUMENT` in pattern checking (@Gumball2415 #262) - - Specify overflow in driver bank allocation (@Gumball2415 #262) - - Refactor compressed mode size calculation (@Gumball2415 #262) - - Include N163 period table in .asm export (@Gumball2415 #262) - - Declare alignment for first DPCM sample in assembly export (@Gumball2415 #262) - - Remove hardcoded bank references in assembly song header (@Gumball2415 #262) - - Implement bankswitched assembly config exports (@Gumball2415 #262) - - Add bank 0 for nonbankswitching config (@Gumball2415 #262) - - Refactor NSFe metadata generation (@Gumball2415 #262) - - Refactor multifile export (@Gumball2415 #262) - -- ### Bug fixes: - - - Update effect bytecodes in row skip handling (@Threxx11 @Gumball2415 #183 #262) - - Write carrier frequency regardless of Kxx state (@Gumball2415 #196 #262) - - Handle Gxx delay commands in both row and frame transitions (@Gumball2415 #207 #262) - - Ignore invalid pattern data upon NSF export (@etoubleh @Gumball2415 #215 #262) - - Fix S5B init clobbering Kxx state (@etoubleh @Julllliot @DermotMacFlann @Arg-xz @Gumball2415 #215 #246 #256 #271 #262) - - Fix N163 instrument load clobbering Kxx state (@ThatRandomOctoling @Gumball2415 #224 #260 #262) - - Fix S5B instrument duty envelopes (@Gumball2415 #267 #262) - - Fix length counter load not being written with pitch (@badgertapes @Gumball2415 #297 #262) - - Prevent volume commands in DPCM channel to be written in NSF export (@nyanpasu64 @Gumball2415 #311 #262) - - Fix assembly period table export (@Gumball2415 #262) - - Fix VRC7 period table assembly export (@Gumball2415 #262) - - Fix NES ROM export data alignment (@Gumball2415 #278 #262) - - Fix DPCM segment start address in nonbankswitching assembly (@Gumball2415 #262) - - Fix phase reset behavior (@Gumball2415 #262) - - Refactor phase reset code (@Gumball2415 #262) - - Clamp pitch and hi-pitch envelope period results (@Gumball2415 #262) - - Enable pitch sliding in linear pitch mode (@Gumball2415 #262) - - Implement linear pitch period limit (@Gumball2415 #262) - - Correct linear pitch calculation sequence (@Gumball2415 #262) - - Fix debug constexpr (@Gumball2415 #262) - - Beta/indev build fixes: - - Refactor Pitch/HiPitch bend logic (@Gumball2415 #262) - - Apply N163 slide shift if linear pitch is disabled (@brickblock369 @Gumball2415 #276 #262) - - Refactor period limit subroutine (@brickblock369 @Gumball2415 #276 #262) - - Fix N163 portamento shift in linear period (@brickblock369 @Gumball2415 #276 #262) - - Include .asm filename in NSF stub file (@Gumball2415 #298 #262) - - Fix N163 Vxx indexing out of bounds (@Gumball2415 #299 #262) - - Properly associate .dnm files to open in Dn-FamiTracker, rather than .0cc files. (@nyanpasu64 #270) - - Fix data race UB (audio thread pushing to its own message queue) triggered by WAV export (@nyanpasu64 #272) - - Fix misaligned instrument editor graph/mouse at high DPI (@nyanpasu64 #274) - - Properly initialize Namco163Audio emulation core in constructor. (@nyanpasu64 #294) - - Fixes bug where if a N163 channel uses the Zxx effect to set wave position, the first note plays with corrupted sound until it switches waves or plays a new note. - - Fix random crackles in N163 playback and WAV export. (@nyanpasu64 #294) - - This was caused by N163 Blip_Buffer frames desynchronizing from global frames after reset. - - Grey out record instrument option on invalid parts of header (@alvinhochun @eulyderg #279 #280) - -- ### Internal: - - - Compact commit hash variable initialization in build artifact script (@Gumball2415 #310) - - Update GitHub Actions script for generating draft releases (@Gumball2415 #252 #310) - - Using `action-gh-release` as it is more recently maintained. - - Remove AppVeyor CI integration (@Gumball2415 #283 #310) - - AppVeyor is less convenient than GitHub Actions as it is much slower to complete multiple builds. - - Update `version_update.md` to be a checklist guide (@Gumball2415 #310) +### Important changes + +- Major export refactoring (@Gumball2415 #262) +- NSF driver fixes (@Gumball2415 #262) + +### Improvements + +- Use CCompiler pointer for writing ASM export title (@Gumball2415 #262) +- Decouple NSFDRV header from driver data (@Gumball2415 #262) +- Add NSF stub file for .asm export (@Gumball2415 #262) +- Implement "glob" multichip assembly export (@Gumball2415 #262) +- Specify what parts of pattern data are invalid (@Gumball2415 #262) +- Differentiate between error and warning colors (@Gumball2415 #262) +- Account for `HOLD_INSTRUMENT` in pattern checking (@Gumball2415 #262) +- Specify overflow in driver bank allocation (@Gumball2415 #262) +- Refactor compressed mode size calculation (@Gumball2415 #262) +- Include N163 period table in .asm export (@Gumball2415 #262) +- Declare alignment for first DPCM sample in assembly export (@Gumball2415 #262) +- Remove hardcoded bank references in assembly song header (@Gumball2415 #262) +- Implement bankswitched assembly config exports (@Gumball2415 #262) +- Add bank 0 for nonbankswitching config (@Gumball2415 #262) +- Refactor NSFe metadata generation (@Gumball2415 #262) +- Refactor multifile export (@Gumball2415 #262) + +### Bug fixes + +- Update effect bytecodes in row skip handling (@Threxx11 @Gumball2415 #183 #262) +- Write carrier frequency regardless of Kxx state (@Gumball2415 #196 #262) +- Handle Gxx delay commands in both row and frame transitions (@Gumball2415 #207 #262) +- Ignore invalid pattern data upon NSF export (@etoubleh @Gumball2415 #215 #262) +- Fix S5B init clobbering Kxx state (@etoubleh @Julllliot @DermotMacFlann @Arg-xz @Gumball2415 #215 #246 #256 #271 #262) +- Fix N163 instrument load clobbering Kxx state (@ThatRandomOctoling @Gumball2415 #224 #260 #262) +- Fix S5B instrument duty envelopes (@Gumball2415 #267 #262) +- Fix length counter load not being written with pitch (@badgertapes @Gumball2415 #297 #262) +- Prevent volume commands in DPCM channel to be written in NSF export (@nyanpasu64 @Gumball2415 #311 #262) +- Fix assembly period table export (@Gumball2415 #262) +- Fix VRC7 period table assembly export (@Gumball2415 #262) +- Fix NES ROM export data alignment (@Gumball2415 #278 #262) +- Fix DPCM segment start address in nonbankswitching assembly (@Gumball2415 #262) +- Fix phase reset behavior (@Gumball2415 #262) +- Refactor phase reset code (@Gumball2415 #262) +- Clamp pitch and hi-pitch envelope period results (@Gumball2415 #262) +- Enable pitch sliding in linear pitch mode (@Gumball2415 #262) +- Implement linear pitch period limit (@Gumball2415 #262) +- Correct linear pitch calculation sequence (@Gumball2415 #262) +- Fix debug constexpr (@Gumball2415 #262) +- Beta/indev build fixes: + - Refactor Pitch/HiPitch bend logic (@Gumball2415 #262) + - Apply N163 slide shift if linear pitch is disabled (@brickblock369 @Gumball2415 #276 #262) + - Refactor period limit subroutine (@brickblock369 @Gumball2415 #276 #262) + - Fix N163 portamento shift in linear period (@brickblock369 @Gumball2415 #276 #262) + - Include .asm filename in NSF stub file (@Gumball2415 #298 #262) + - Fix N163 Vxx indexing out of bounds (@Gumball2415 #299 #262) +- Properly associate .dnm files to open in Dn-FamiTracker, rather than .0cc files. (@nyanpasu64 #270) +- Fix data race UB (audio thread pushing to its own message queue) triggered by WAV export (@nyanpasu64 #272) +- Fix misaligned instrument editor graph/mouse at high DPI (@nyanpasu64 #274) +- Properly initialize Namco163Audio emulation core in constructor. (@nyanpasu64 #294) + - Fixes bug where if a N163 channel uses the Zxx effect to set wave position, the first note plays with corrupted sound until it switches waves or plays a new note. +- Fix random crackles in N163 playback and WAV export. (@nyanpasu64 #294) + - This was caused by N163 Blip_Buffer frames desynchronizing from global frames after reset. +- Grey out record instrument option on invalid parts of header (@alvinhochun @eulyderg #279 #280) + +### Internal + +- Compact commit hash variable initialization in build artifact script (@Gumball2415 #310) +- Update GitHub Actions script for generating draft releases (@Gumball2415 #252 #310) + - Using `action-gh-release` as it is more recently maintained. +- Remove AppVeyor CI integration (@Gumball2415 #283 #310) + - AppVeyor is less convenient than GitHub Actions as it is much slower to complete multiple builds. +- Update `version_update.md` to be a checklist guide (@Gumball2415 #310) + + ## Dn0.5.0.2 - 2024-01-13 -- ### Important changes: +### Important changes - - Modules will be saved as Dn-FT modules (@Gumball2415 #214) - - Reintroduce JSON export from 0CC-FT (@nstbayless @Gumball2415 #197 #199) - - Update application icon (@Gumball2415 #236) +- Modules will be saved as Dn-FT modules (@Gumball2415 #214) +- Reintroduce JSON export from 0CC-FT (@nstbayless @Gumball2415 #197 #199) +- Update application icon (@Gumball2415 #236) -- ### Bug fixes: +### Bug fixes - - Fix effect number input using numpad (@ZeroJanitor @Gumball2415 #48 #214) - - Force modules to be saved as Dn-FT modules (@Threxx11 @Gumball2415 #184 #214) - - Fix outputting audio to multi-channel output devices (@CoolJosh3k @nyanpasu64 #205 #226) - - Wait for APU mutex lock during .wav export (@nyanpasu64 @Gumball2415 #206 #214) - - Avoid checking assert with unsigned integer cast (@freq-mod @N-SPC700 @Gumball2415 #209 #214) - - Assert legacy mixing levels and ranges (@trashbinenthusiast @N-SPC700 @nyanpasu64 @Gumball2415 #213 #214) - - Avoid division by zero in MML sequence parsing (@Gumball2415 #222 #214) - - Fix incorrect speed in PAL NSF exports (@TakuikaNinja @eugene-s-nesdev @Gumball2415 #223 #242 #214) - - Fix detune offset direction (@Gumball2415 #225 #214) - - Disable Custom Exporter DLL loading (@eatscrayon @Gumball2415 #232 #214) - - Fix access violation in MRU submenu list update (@eugene-s-nesdev @Gumball2415 #243 #214) +- Fix effect number input using numpad (@ZeroJanitor @Gumball2415 #48 #214) +- Force modules to be saved as Dn-FT modules (@Threxx11 @Gumball2415 #184 #214) +- Fix outputting audio to multi-channel output devices (@CoolJosh3k @nyanpasu64 #205 #226) +- Wait for APU mutex lock during .wav export (@nyanpasu64 @Gumball2415 #206 #214) +- Avoid checking assert with unsigned integer cast (@freq-mod @N-SPC700 @Gumball2415 #209 #214) +- Assert legacy mixing levels and ranges (@trashbinenthusiast @N-SPC700 @nyanpasu64 @Gumball2415 #213 #214) +- Avoid division by zero in MML sequence parsing (@Gumball2415 #222 #214) +- Fix incorrect speed in PAL NSF exports (@TakuikaNinja @eugene-s-nesdev @Gumball2415 #223 #242 #214) +- Fix detune offset direction (@Gumball2415 #225 #214) +- Disable Custom Exporter DLL loading (@eatscrayon @Gumball2415 #232 #214) +- Fix access violation in MRU submenu list update (@eugene-s-nesdev @Gumball2415 #243 #214) -- ### Internal: +### Internal - - Fix version checker repository link (@Gumball2415 #229 #212) - - Include logo and icon resources in the repository (@Gumball2415 #218 #236) - - Add AddressSanitizer project configurations (@Gumball2415 #236) - - Separate Github Actions binary downloads (@Gumball2415 #237) - - Add automated draft release binary upload (@Gumball2415 #237) - - Rewrite change log in markdown (@Gumball2415 #238) - - Integrate Dn-help as submodule (@Gumball2415 #238) - - Generate HTMLHelp manual change log on build time (@Gumball2415 #238) +- Fix version checker repository link (@Gumball2415 #229 #212) +- Include logo and icon resources in the repository (@Gumball2415 #218 #236) +- Add AddressSanitizer project configurations (@Gumball2415 #236) +- Separate Github Actions binary downloads (@Gumball2415 #237) +- Add automated draft release binary upload (@Gumball2415 #237) +- Rewrite change log in markdown (@Gumball2415 #238) +- Integrate Dn-help as submodule (@Gumball2415 #238) +- Generate HTMLHelp manual change log on build time (@Gumball2415 #238) ## Dn0.5.0.1 - 2023-05-10 -- ### Important changes: +### Important changes - - Module breaking bugs have now been fixed. (@Gumball2415 #195) - - Fix effects type order bug (@Threxx11 @Gumball2415 #184 #195) - - Fix custom OPLL patch entry bug (@galap-1 @Gumball2415 #176 #195) - - Fix N163 mixing bug (@recme @Gumball2415 #174 #195) +- Module breaking bugs have now been fixed. (@Gumball2415 #195) +- Fix effects type order bug (@Threxx11 @Gumball2415 #184 #195) +- Fix custom OPLL patch entry bug (@galap-1 @Gumball2415 #176 #195) +- Fix N163 mixing bug (@recme @Gumball2415 #174 #195) -- ### Improvements: +### Improvements - - Implement proper commandline support (@TheRealQuantam #168 #181) +- Implement proper commandline support (@TheRealQuantam #168 #181) -- ### Bug fixes: +### Bug fixes - - Fix NSF driver S5B envelope autoperiod (@N-SPC700 @Gumball2415 #186 #189) - - Fix NSF driver arpeggio sequence note overflow (@N-SPC700 @Gumball2415 #189) - - Fix NSF driver VRC7 note cut behavior to match in-tracker (@MovieMovies1 @Gumball2415 #189) - - Fix effects type order bug (@Threxx11 @Gumball2415 #184 #195) - - Fix custom OPLL patch entry bug (@galap-1 @Gumball2415 #176 #195) - - Fix N163 mixing bug (@recme @Firespike33 @Gumball2415 #174 #195) - - Fully initialize device level offset object (@Gumball2415 #195) - - Prevent module compatibility mode reinitialization (@Threxx11 @Gumball2415 #184 #195) - - Reinitialize OPLL patchset (@galap-1 @Gumball2415 #203 #195) - - Initialize PlaybackRate and PlaybackRateType (@N-SPC700 @Gumball2415 #202 #195) +- Fix NSF driver S5B envelope autoperiod (@N-SPC700 @Gumball2415 #186 #189) +- Fix NSF driver arpeggio sequence note overflow (@N-SPC700 @Gumball2415 #189) +- Fix NSF driver VRC7 note cut behavior to match in-tracker (@MovieMovies1 @Gumball2415 #189) +- Fix effects type order bug (@Threxx11 @Gumball2415 #184 #195) +- Fix custom OPLL patch entry bug (@galap-1 @Gumball2415 #176 #195) +- Fix N163 mixing bug (@recme @Firespike33 @Gumball2415 #174 #195) +- Fully initialize device level offset object (@Gumball2415 #195) +- Prevent module compatibility mode reinitialization (@Threxx11 @Gumball2415 #184 #195) +- Reinitialize OPLL patchset (@galap-1 @Gumball2415 #203 #195) +- Initialize PlaybackRate and PlaybackRateType (@N-SPC700 @Gumball2415 #202 #195) -- ### Internal: +### Internal - - Update build tools, VS solution, CMake lists, and corresponding documentation (@Gumball2415 #186) - - Add version increment documentation (@Gumball2415 #194) - - Update VC++ program database file name in build script (@Gumball2415 #204) - - Improve Appveyor build version info (@Gumball2415 #204) - - Add Github Actions for build artifacts (@Gumball2415 #204) - - Use Windows 10 SDK version 2104 (10.0.20348.0) to avoid unexpected linker failure (@Gumball2415 #204) +- Update build tools, VS solution, CMake lists, and corresponding documentation (@Gumball2415 #186) +- Add version increment documentation (@Gumball2415 #194) +- Update VC++ program database file name in build script (@Gumball2415 #204) +- Improve Appveyor build version info (@Gumball2415 #204) +- Add Github Actions for build artifacts (@Gumball2415 #204) +- Use Windows 10 SDK version 2104 (10.0.20348.0) to avoid unexpected linker failure (@Gumball2415 #204) ## Dn0.5.0.0 - 2022-12-19 -- ### Important changes: - - - Dn-FamiTracker modules are no longer backwards compatible with "vanilla" and 0CC FamiTracker. - - Dn-FamiTracker Demo Compo 1 modules are now added - - N163 emulation core is replaced with Mesen's - - New effects: =xx, and Nxy - - Exports are now updated (text, NSF/NSFe, binary, asm) - - NSF2 export added - - External OPLL option (export only available for NSFe/NSF2) - - Per-module expansion mixing (export only available for NSFe/NSF2) - - Hardware-based module expansion mixing (export only available for NSFe/NSF2) - - DirectSound backend now replaced with WASAPI - -- ### Additions: - - - Add FDS waveform view (@EulousDev #113) - - Add invalid note indicator (@EulousDev #119) - - Add Dn-FT Demo Compo 1 Modules (@Gumball2415 #153) - - Target volume slide effect (Nxy) (@ipidev #109) - - Implement Kxx and =xx in NSF driver (@Gumball2415 nyanpasu64/j0CC-FamiTracker#122, #156) - - Add supplemental NSF data on bin/asm export (NSF header, config, period tables and vibrato tables) (@Gumball2415 #156) - - Add mixe chunk support and per-module device mixing (@Gumball2415 #68, #156) - - Add hardware-based expansion audio mixing (@Gumball2415 #156) - - Implement external OPLL patchset editing (@Gumball2415 #68, #156) - - Implement VRC7 NSFe chunk (@Gumball2415 #156) - -- ### Improvements: - - - Register view improvements (@Gumball2415 @nyanpasu64 @EulousDev #118, #120) - - Replace N163 audio core with Mesen (@Gumball2415 nyanpasu64/j0CC-FamiTracker#151, #111, #138, #152) - - Refactor FDS auto-FM overflow fix (@Gumball2415 #80, #65, nyanpasu64/j0CC-FamiTracker#133, #156) - - Refactor Pxx overflow fix (@Gumball2415 #80, #156) - - Refactor Gxx overflow fix (@Gumball2415 #80, nyanpasu64/j0CC-FamiTracker#129, #156) - - Reset FDS modulator phase on new note (@Gumball2415 #156) - - Refactor period table calculation (@Gumball2415 #156) - - Update text import/export parity (@Gumball2415 #161, #162, #156) - -- ### Bug fixes: - - - Prevent ctrl/shift+wheel edit outside edit mode (copyrat90 #87) - - Fix random crash when exporting channels as WAV (@nyanpasu64 #92, #93) - - Fix module reload on config confirmation (@Gumball2415 #89, #97) - - Fix N163 volume meter level (@EulousDev #99, #103) - - Fix VRC7 data race and use-after-free when reloading/closing modules (@nyanpasu64 #106) - - Update source code copyright declaration and GPL 2.0+ notice (@Gumball2415 #116) - - Fix wave export dialog refresh rate to GUI rate (@Gumball2415 #108) - - Fix high-res spectrum visualizer at small buffer sizes (@nyanpasu64 #126) - - Fix use-after-free race condition in visualizer (@nyanpasu64 #130) - - Fix crash when starting program with pattern editor off-screen (@nyanpasu64 #128, #129) - - Fix periodic noise showing cents when muted (@Gumball2415 #139) - - Stop rejecting valid files using features missing from vanilla FT (@nyanpasu64 #150) - - Fix N163 instrument pointer data overflow (@Gumball2415 #156) - - Fix NSFe export from using incorrect DATA chunk size (@Gumball2415 #110, nyanpasu64/j0CC-FamiTracker#5, #156) - - Fix 5B Wxx being overwritten by blank duty macros (@Gumball2415 #160, nyanpasu64/j0CC-FamiTracker#105, #156) - - Fix N163 multiplex state desync (@Gumball2415 #163, #156) - - Dn-FamiTracker modules are no longer backwards compatible with "vanilla" and 0CC (@Gumball2415 #156) - - FamiTracker 0.5.0 beta modules no longer conflict with Dn-FamiTracker 0.5.0.0 modules (@Gumball2415 #156) - -- ### Internal: - - - Revise README (@Gumball2415 #114) - - Replace DirectSound backend with WASAPI (@nyanpasu64 #124) - - Remove unused files, add headers to CMakeLists.txt (@nyanpasu64 #142) - - Eliminate audio thread blocking on GUI messages and main thread (@nyanpasu64 #134, #137) - - Add WASAPI resampling so all sampling rates work (@nyanpasu64 @Gumball2415 #143) - - Fix crash when activating non-initial song then opening document with expansion chip(s) (@nyanpasu64 #147, #148) - - Fix mostly-theoretical data race when popping from SPSC queues (@nyanpasu64 #149) - - Properly terminate stuck audio thread when closing the program (@nyanpasu64 #155) +### Advisory + +This version has broken module saving functions, which may corrupt your modules upon saving. + +***Please use the latest version!*** + +### Important changes + +- Dn-FamiTracker modules are no longer backwards compatible with "vanilla" and 0CC FamiTracker. +- Dn-FamiTracker Demo Compo 1 modules are now added +- N163 emulation core is replaced with Mesen's +- New effects: =xx, and Nxy +- Exports are now updated (text, NSF/NSFe, binary, asm) +- NSF2 export added +- External OPLL option (export only available for NSFe/NSF2) +- Per-module expansion mixing (export only available for NSFe/NSF2) +- Hardware-based module expansion mixing (export only available for NSFe/NSF2) +- DirectSound backend now replaced with WASAPI + +### Additions + +- Add FDS waveform view (@EulousDev #113) +- Add invalid note indicator (@EulousDev #119) +- Add Dn-FT Demo Compo 1 Modules (@Gumball2415 #153) +- Target volume slide effect (Nxy) (@ipidev #109) +- Implement Kxx and =xx in NSF driver (@Gumball2415 nyanpasu64/j0CC-FamiTracker#122, #156) +- Add supplemental NSF data on bin/asm export (NSF header, config, period tables and vibrato tables) (@Gumball2415 #156) +- Add mixe chunk support and per-module device mixing (@Gumball2415 #68, #156) +- Add hardware-based expansion audio mixing (@Gumball2415 #156) +- Implement external OPLL patchset editing (@Gumball2415 #68, #156) +- Implement VRC7 NSFe chunk (@Gumball2415 #156) + +### Improvements + +- Register view improvements (@Gumball2415 @nyanpasu64 @EulousDev #118, #120) +- Replace N163 audio core with Mesen (@Gumball2415 nyanpasu64/j0CC-FamiTracker#151, #111, #138, #152) +- Refactor FDS auto-FM overflow fix (@Gumball2415 #80, #65, nyanpasu64/j0CC-FamiTracker#133, #156) +- Refactor Pxx overflow fix (@Gumball2415 #80, #156) +- Refactor Gxx overflow fix (@Gumball2415 #80, nyanpasu64/j0CC-FamiTracker#129, #156) +- Reset FDS modulator phase on new note (@Gumball2415 #156) +- Refactor period table calculation (@Gumball2415 #156) +- Update text import/export parity (@Gumball2415 #161, #162, #156) + +### Bug fixes + +- Prevent ctrl/shift+wheel edit outside edit mode (copyrat90 #87) +- Fix random crash when exporting channels as WAV (@nyanpasu64 #92, #93) +- Fix module reload on config confirmation (@Gumball2415 #89, #97) +- Fix N163 volume meter level (@EulousDev #99, #103) +- Fix VRC7 data race and use-after-free when reloading/closing modules (@nyanpasu64 #106) +- Update source code copyright declaration and GPL 2.0+ notice (@Gumball2415 #116) +- Fix wave export dialog refresh rate to GUI rate (@Gumball2415 #108) +- Fix high-res spectrum visualizer at small buffer sizes (@nyanpasu64 #126) +- Fix use-after-free race condition in visualizer (@nyanpasu64 #130) +- Fix crash when starting program with pattern editor off-screen (@nyanpasu64 #128, #129) +- Fix periodic noise showing cents when muted (@Gumball2415 #139) +- Stop rejecting valid files using features missing from vanilla FT (@nyanpasu64 #150) +- Fix N163 instrument pointer data overflow (@Gumball2415 #156) +- Fix NSFe export from using incorrect DATA chunk size (@Gumball2415 #110, nyanpasu64/j0CC-FamiTracker#5, #156) +- Fix 5B Wxx being overwritten by blank duty macros (@Gumball2415 #160, nyanpasu64/j0CC-FamiTracker#105, #156) +- Fix N163 multiplex state desync (@Gumball2415 #163, #156) +- Dn-FamiTracker modules are no longer backwards compatible with "vanilla" and 0CC (@Gumball2415 #156) +- FamiTracker 0.5.0 beta modules no longer conflict with Dn-FamiTracker 0.5.0.0 modules (@Gumball2415 #156) + +### Internal + +- Revise README (@Gumball2415 #114) +- Replace DirectSound backend with WASAPI (@nyanpasu64 #124) +- Remove unused files, add headers to CMakeLists.txt (@nyanpasu64 #142) +- Eliminate audio thread blocking on GUI messages and main thread (@nyanpasu64 #134, #137) +- Add WASAPI resampling so all sampling rates work (@nyanpasu64 @Gumball2415 #143) +- Fix crash when activating non-initial song then opening document with expansion chip(s) (@nyanpasu64 #147, #148) +- Fix mostly-theoretical data race when popping from SPSC queues (@nyanpasu64 #149) +- Properly terminate stuck audio thread when closing the program (@nyanpasu64 #155) ## Dn0.4.0.1 - 2021-09-14 -- ### Patch fixes: +### Patch fixes - - Fix internal version numbering (@Gumball2415) +- Fix internal version numbering (@Gumball2415) ## Dn0.4.0.0 - 2021-09-13 -- ### Important changes: +``` +Notice: the version numbers in the .exe are wrong, please ignore it. +``` - - New file extension format for modules: *.dnm (@Gumball2415 #71) - - New file extension format for instruments: *.dni (@Gumball2415 #71) - - Support for Windows XP has been dropped (@Gumball2415, @nyanpasu64, @N-SPC700 #82, #84) +### Important changes -- ### Additions: +- New file extension format for modules: *.dnm (@Gumball2415 #71) +- New file extension format for instruments: *.dni (@Gumball2415 #71) +- Support for Windows XP has been dropped (@Gumball2415, @nyanpasu64, @N-SPC700 #82, #84) - - Add new D.P.C.M. organization info, links and metadata (@Gumball2415 #71) - - New instrument names are blank on creation (@Gumball2415) - - Add empty instrument in newly created modules (@Gumball2415, @nyanpasu64, @N-SPC700 #77) +### Additions: -- ### Improvements: +- Add new D.P.C.M. organization info, links and metadata (@Gumball2415 #71) +- New instrument names are blank on creation (@Gumball2415) +- Add empty instrument in newly created modules (@Gumball2415, @nyanpasu64, @N-SPC700 #77) - - Adjustable frame editor channel view limit (@Gumball2415 #72) - - Fix frame editor channel view truncation (@Gumball2415 #72) +### Improvements: -- ### Bug fixes: +- Adjustable frame editor channel view limit (@Gumball2415 #72) +- Fix frame editor channel view truncation (@Gumball2415 #72) - - Fix Gxx delay command overflow in NSF driver (@Gumball2415, @smbhacks #80) - - Fix FDS automatic modulation overflow in NSF driver (@Gumball2415, @galap-1 #65, #80) - - Fix period calculation overflow in NSF driver (@Gumball2415, @smbhacks #80) - - Reset VRC7 emulator core on channel handler reset (@Gumball2415, @TakuikaNinja #79) - - Flush file to disk before renaming to prevent module corruption (@Gumball2415, @nyanpasu64 #81) - - Fix commandline parameter processing when flags are used (@Gumball2415) +### Bug fixes: -- ### Internal: +- Fix Gxx delay command overflow in NSF driver (@Gumball2415, @smbhacks #80) +- Fix FDS automatic modulation overflow in NSF driver (@Gumball2415, @galap-1 #65, #80) +- Fix period calculation overflow in NSF driver (@Gumball2415, @smbhacks #80) +- Reset VRC7 emulator core on channel handler reset (@Gumball2415, @TakuikaNinja #79) +- Flush file to disk before renaming to prevent module corruption (@Gumball2415, @nyanpasu64 #81) +- Fix commandline parameter processing when flags are used (@Gumball2415) - - Fix CString::Format() memory corruption bug on Wine (@nyanpasu64 #56) - - Fix uninitialized echo buffer values (@nyanpasu64 #56) - - Clarify nsfplay value_or() (@nyanpasu64 #56) - - Clarify integer widths in CBookmark::Distance() (@nyanpasu64 #56) - - Fix broken Open dialog after launching Dn by opening a file (@nyanpasu64 #74, #76) - - Fix out-of-bounds read in oscilloscope (@nyanpasu64 #85) +### Internal: + +- Fix CString::Format() memory corruption bug on Wine (@nyanpasu64 #56) +- Fix uninitialized echo buffer values (@nyanpasu64 #56) +- Clarify nsfplay value_or() (@nyanpasu64 #56) +- Clarify integer widths in CBookmark::Distance() (@nyanpasu64 #56) +- Fix broken Open dialog after launching Dn by opening a file (@nyanpasu64 #74, #76) +- Fix out-of-bounds read in oscilloscope (@nyanpasu64 #85) ## Dn0.3.1.0 - 2021-06-30 -- ### Important changes: +### Important changes - - N163 and 5B expansion audio mixing has been restored to 0.2.1 levels (@nyanpasu64 #66) - - Adjusted APU 2 levels to match blargg's original formula (@Gumball2415 #69) +- N163 and 5B expansion audio mixing has been restored to 0.2.1 levels (@nyanpasu64 #66) +- Adjusted APU 2 levels to match blargg's original formula (@Gumball2415 #69) -- ### Additions: +### Additions - - Added a textbox for patch editing within the VRC7 instrument editor (@Gumball2415 #60) +- Added a textbox for patch editing within the VRC7 instrument editor (@Gumball2415 #60) -- ### Improvements: +### Improvements - - Edit NSF export format to allow adding more effects (@Gumball2415, @nyanpasu64 #46) +- Edit NSF export format to allow adding more effects (@Gumball2415, @nyanpasu64 #46) -- ### Bug fixes: +### Bug fixes - - Fix VRC7 hardware patch bank presets not reading properly (@Gumball2415 #60) - - Fix crash when increasing engine speed with VRC7 enabled (@nyanpasu64 #62) - - Fix N163 and 5B mixing levels which were swapped in 0.3.0 (causing N163 to be louder and 5B to be quieter) (@nyanpasu64 #66) +- Fix VRC7 hardware patch bank presets not reading properly (@Gumball2415 #60) +- Fix crash when increasing engine speed with VRC7 enabled (@nyanpasu64 #62) +- Fix N163 and 5B mixing levels which were swapped in 0.3.0 (causing N163 to be louder and 5B to be quieter) (@nyanpasu64 #66) -- ### Internal: +### Internal - - Update VRC7 emulator core (emu2413) to v1.5.6 (@Gumball2415 #59) - - Port CVRC7 to CSoundChip2 (@Gumball2415 #59) - - Refactor VRC7 hardware patch bank swapping (@Gumball2415 #59) +- Update VRC7 emulator core (emu2413) to v1.5.6 (@Gumball2415 #59) +- Port CVRC7 to CSoundChip2 (@Gumball2415 #59) +- Refactor VRC7 hardware patch bank swapping (@Gumball2415 #59) ## Dn0.3.0.0 - 2021-04-03 -- ### Important changes: +### Important changes - - Reenabled version checking, which can also be accessed in the Help popup - - Replaced FDS emulation core with Mesen's version (@nyanpasu64 #32) - - Replaced 2A03 emulation core with NSFPlay's version (@nyanpasu64 #32) - - Added back the help manual, with additional updated info contributed by: - - Blue Mario for Sunsoft 5B information (@N-SPC700 #12) - - Accuracy (Compass Man) for providing updated screenshots (#12) +- Reenabled version checking, which can also be accessed in the Help popup +- Replaced FDS emulation core with Mesen's version (@nyanpasu64 #32) +- Replaced 2A03 emulation core with NSFPlay's version (@nyanpasu64 #32) +- Added back the help manual, with additional updated info contributed by: + - Blue Mario for Sunsoft 5B information (@N-SPC700 #12) + - Accuracy (Compass Man) for providing updated screenshots (#12) -- ### Additions: +### Additions - - Added FastTracker 2 (JP106) keymap (@sdhizumi #8) - - Adjustable idle refresh rate in configuration - - Emulation tab in Configuration, which currently includes: - - Toggleable N163 multiplexing - - Swappable VRC7 hardware patches - - Adjustable FDS cutoff filter (@nyanpasu64 #42) - - Added the Kxx multiply frequency effect, not currently supported in NSF export @nyanpasu64 #16) - - Adjustable channel view in frame editor +- Added FastTracker 2 (JP106) keymap (@sdhizumi #8) +- Adjustable idle refresh rate in configuration +- Emulation tab in Configuration, which currently includes: + - Toggleable N163 multiplexing + - Swappable VRC7 hardware patches + - Adjustable FDS cutoff filter (@nyanpasu64 #42) +- Added the Kxx multiply frequency effect, not currently supported in NSF export @nyanpasu64 #16) +- Adjustable channel view in frame editor -- ### Improvements: +### Improvements - - Enable DPI scaling for pattern editor (@nyanpasu64 #5) - - Updated About information - - Export wave shortcut (Ctrl + Shift + E) +- Enable DPI scaling for pattern editor (@nyanpasu64 #5) +- Updated About information +- Export wave shortcut (Ctrl + Shift + E) -- ### Bug fixes: +### Bug fixes - - Fixed DC drifting (when no highpass is applied) due to rounding errors in Blip_Buffer calculation (@nyanpasu64 #27) - - Fixed N163 detuning when multiplexing is disabled (@nyanpasu64 #31) - - Fixed undoing "delete frame" adding a new frame (#43) - - Fixed VRC7 note cuts being inconsistent with in-tracker note cuts (@Kouzeru #47) +- Fixed DC drifting (when no highpass is applied) due to rounding errors in Blip_Buffer calculation (@nyanpasu64 #27) +- Fixed N163 detuning when multiplexing is disabled (@nyanpasu64 #31) +- Fixed undoing "delete frame" adding a new frame (#43) +- Fixed VRC7 note cuts being inconsistent with in-tracker note cuts (@Kouzeru #47) -- ### Internal: +### Internal - - Fixed CMake MFC detection and link flag conflicts (@nyanpasu64 #6) - - Removed more occurences of old program name and renamed more files to Dn (@nyanpasu64 #7) - - Replaced the application icon (design by Accuracy (Compass Man)) - - Enabled x64 build compiling in the Visual Studio files - - Updated the VRC7 emulation core to emu2413 v1.5.2 - - Include changelogs of vanilla, j0CC, and Dn in changelog.txt - - Moved resource.h and Dn-FamiTracker.rc back to root folder due to HTMLHelp compilation - - Corrected paths on case-sensitive filesystems (@nyanpasu64 #18) - - Removed header files from CMake (@nyanpasu64 #26) - - Replaced Blip_Buffer with an improved fork (@nyanpasu64 #27) - - Added emulation clock-skipping until next level change to save CPU, currently implemented in 2A03 and FDS emulator cores (@nyanpasu64 #32) - - Fixed file extension association in Dn-FamiTracker.reg (@Raphaelo24 #36) +- Fixed CMake MFC detection and link flag conflicts (@nyanpasu64 #6) +- Removed more occurences of old program name and renamed more files to Dn (@nyanpasu64 #7) +- Replaced the application icon (design by Accuracy (Compass Man)) +- Enabled x64 build compiling in the Visual Studio files +- Updated the VRC7 emulation core to emu2413 v1.5.2 +- Include changelogs of vanilla, j0CC, and Dn in changelog.txt +- Moved resource.h and Dn-FamiTracker.rc back to root folder due to HTMLHelp compilation +- Corrected paths on case-sensitive filesystems (@nyanpasu64 #18) +- Removed header files from CMake (@nyanpasu64 #26) +- Replaced Blip_Buffer with an improved fork (@nyanpasu64 #27) +- Added emulation clock-skipping until next level change to save CPU, currently implemented in 2A03 and FDS emulator cores (@nyanpasu64 #32) +- Fixed file extension association in Dn-FamiTracker.reg (@Raphaelo24 #36) ## Dn0.2.1.0 - 2020-09-13 -- ### Additions: +### Additions - - Adjustable preview pitch. +- Adjustable preview pitch. -- ### Improvements: +### Improvements - - Readjusted the DPCM sample editor dialog size limit. +- Readjusted the DPCM sample editor dialog size limit. -- ### Bug fixes: +### Bug fixes - - Fixed drag-scrolling not working. - - Readjusted the DPCM sample editor dialog size limit. +- Fixed drag-scrolling not working. +- Readjusted the DPCM sample editor dialog size limit. -- ### Internal: +### Internal - - Changed the project and corresponding project file names accordingly to Dn-FamiTracker. +- Changed the project and corresponding project file names accordingly to Dn-FamiTracker. ## Dn0.2.0 - 2020-09-07 -- ### Additions: +### Additions - - Multiple .wav per-channel export (@nyanpasu64 #2) - - Adaptive register state refresh rate(≈60fps during playback, otherwise 10fps) +- Multiple .wav per-channel export (@nyanpasu64 #2) +- Adaptive register state refresh rate(≈60fps during playback, otherwise 10fps) -- ### Bug fixes: +### Bug fixes - - DPCM sample bit reversal now includes the first bit of the sample - - Fixed the version numbering +- DPCM sample bit reversal now includes the first bit of the sample +- Fixed the version numbering -- ### Internal: +### Internal - - Changed most of the internal names from j0CC-FamiTracker to Dn-FamiTracker - - Use precompiled headers in CMake builds (@nyanpasu64 #3) +- Changed most of the internal names from j0CC-FamiTracker to Dn-FamiTracker +- Use precompiled headers in CMake builds (@nyanpasu64 #3) ## Dn0.1.0 - 2020-08-05 -- ### Additions: +``` +(the filenames and versions don't reflect this revision number, sorry) +I'm starting to do stuff with this source code now that j0CC-Famitracker has moved on. +Don't expect a lot here, just tiny improvements that personally help my workflow for creating modules. +``` + +### Additions - - DPCM sample bit order reversal (located in the DPCM sample editor) (@Gumball2415 #1) +- DPCM sample bit order reversal (located in the DPCM sample editor) (@Gumball2415 #1) --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 83e90fdc9..65b08e6e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,13 +20,10 @@ set(LIBSAMPLERATE_ENABLE_SINC_BEST_CONVERTER FALSE CACHE BOOL "[libsamplerate] E # does not set mt vs md # Configure MFC -if (CMAKE_BUILD_TYPE MATCHES DEBUG) - # Debug build requires dynamic MFC. - set(STATIC_MSVCRT 0) -else () - # Otherwise link MFC statically. - set(STATIC_MSVCRT 1) -endif () +# Debug build requires dynamic MFC. +# Otherwise link MFC statically. +set(STATIC_MSVCRT $>) + include(cmake/mfc.cmake) # Acts like add_subdirectory(), but replaces Debug flags with RelWithDebugInfo flags. @@ -45,20 +42,75 @@ add_subdirectory_optimized("Source/libsamplerate" EXCLUDE_FROM_ALL) # compiling include(cmake/exe.cmake) -# builds the .chm file -add_custom_command(TARGET ${exe} - PRE_BUILD - COMMAND cmd /c ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compile-chm.bat - COMMAND move Dn-Famitracker.chm ${CMAKE_CURRENT_BINARY_DIR}/$ - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT "Generating help file...") +find_package(Python 3.10) + +# update version in Dn-FamiTracker.rc +add_custom_command( + OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/Dn-FamiTracker.rc + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/version.h + COMMAND ${Python_EXECUTABLE} resource_version_update.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Updating version info in resource file." + VERBATIM) + +# generate HTMLDefines.h +set(DNHELP_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Dn-help/hlp") +add_custom_command( + OUTPUT ${DNHELP_SRC_DIR}/HTMLDefines.h + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/resource.h + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND call ${CMAKE_CURRENT_SOURCE_DIR}/generate-helpmap.bat + COMMENT "Generating map file for help compiler." + VERBATIM) + +# build the .chm file +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${project}.chm + DEPENDS ${DNHELP_SRC_DIR}/HTMLDefines.h + WORKING_DIRECTORY ${DNHELP_SRC_DIR} + COMMAND call ${DNHELP_SRC_DIR}/compile-chm.bat ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Making help file." + VERBATIM) + +# update changelog +add_custom_command( + OUTPUT ${DNHELP_SRC_DIR}/changelog.htm + DEPENDS ${DNHELP_SRC_DIR}/changelog-shell.htm + CHANGELOG.md + WORKING_DIRECTORY ${DNHELP_SRC_DIR} + COMMAND call ${DNHELP_SRC_DIR}/update-changelog-htm.bat + COMMENT "Updating changelog.htm." + VERBATIM) # builds the NSF driver -add_custom_command(TARGET ${exe} - PRE_BUILD - COMMAND cmd /c ${CMAKE_CURRENT_SOURCE_DIR}/Source/drivers/build.cmd - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT "Compiling NSF driver...") +set(DNNSF_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Source/drivers") +add_custom_command( + OUTPUT ${DNNSF_SRC_DIR}/drv_2a03.h + ${DNNSF_SRC_DIR}/drv_all.h + ${DNNSF_SRC_DIR}/drv_fds.h + ${DNNSF_SRC_DIR}/drv_mmc5.h + ${DNNSF_SRC_DIR}/drv_n163.h + ${DNNSF_SRC_DIR}/drv_s5b.h + ${DNNSF_SRC_DIR}/drv_vrc6.h + ${DNNSF_SRC_DIR}/drv_vrc7.h + DEPENDS ${DNNSF_SRC_DIR}/asm/longbranch.mac + ${DNNSF_SRC_DIR}/asm/init.s + ${DNNSF_SRC_DIR}/asm/player.s + ${DNNSF_SRC_DIR}/asm/effects.s + ${DNNSF_SRC_DIR}/asm/instrument.s + ${DNNSF_SRC_DIR}/asm/apu.s + ${DNNSF_SRC_DIR}/asm/vrc6.s + ${DNNSF_SRC_DIR}/asm/vrc7.s + ${DNNSF_SRC_DIR}/asm/mmc5.s + ${DNNSF_SRC_DIR}/asm/fds.s + ${DNNSF_SRC_DIR}/asm/n163.s + ${DNNSF_SRC_DIR}/asm/s5b.s + ${DNNSF_SRC_DIR}/asm/periods.s + ${DNNSF_SRC_DIR}/asm/vibrato.s + COMMAND call ${DNNSF_SRC_DIR}/build.cmd + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "Building NSF driver headers." + VERBATIM) target_compile_features(${exe} PRIVATE cxx_std_17) @@ -71,27 +123,14 @@ endif() # linking # Specify static MFC libraries nafxcw and Libcmt to avoid linker order issues -if (STATIC_MSVCRT) - if (CMAKE_BUILD_TYPE MATCHES DEBUG) - TARGET_LINK_LIBRARIES(${exe} - Dbghelp winmm comctl32 Avrt Version htmlhelp - samplerate nafxcwd Libcmtd) - else () - TARGET_LINK_LIBRARIES(${exe} - Dbghelp winmm comctl32 Avrt Version htmlhelp - samplerate nafxcw Libcmt) - endif () -else () - if (CMAKE_BUILD_TYPE MATCHES DEBUG) - TARGET_LINK_LIBRARIES(${exe} - Dbghelp winmm comctl32 Avrt Version htmlhelp - samplerate MSVCRTD) - else () - TARGET_LINK_LIBRARIES(${exe} - Dbghelp winmm comctl32 Avrt Version htmlhelp - samplerate MSVCRT) - endif () -endif () +set(static_msvcrt_libs "nafxcw$<$:d>;libcmt$<$:d>") +set(dynamic_msvcrt_libs "msvcrt$<$:d>") + +target_link_libraries(${exe} + $,${static_msvcrt_libs},${dynamic_msvcrt_libs}>) + +target_link_libraries(${exe} + Dbghelp winmm comctl32 Avrt Version htmlhelp samplerate) # Dn-FamiTracker.rc includes res/Dn-FamiTracker.manifest. # To prevent manifest linking errors: @@ -104,7 +143,7 @@ set_property( ) # Generating .pdb files -if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC" AND CMAKE_BUILD_TYPE MATCHES "Release") +if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC" AND $) target_compile_options(${exe} PRIVATE /Zi) # Tell linker to include symbol data diff --git a/docs/CONTRIBUTING.md b/CONTRIBUTING.md similarity index 91% rename from docs/CONTRIBUTING.md rename to CONTRIBUTING.md index 79376336f..c81de4a99 100644 --- a/docs/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,41 +2,7 @@ Welcome! Thank you for considering to contribute to Dn-FamiTracker. We really need all the help we can get, since there aren't many people who help maintain FamiTracker and its forks. The following serves as a guide to those who want to get started with contributing. -## Code Guidelines and Formatting - -- The code mostly follows Unix style (LF) line endings and TAB indentation format. - - Remove trailing whitespace whenever you edit nearby lines. -- There is not much documentation regarding the FamiTracker source code, so you might need to do some code reading first before you implement or modify a component. -- Document Dn-FamiTracker code behavior as much as possible whenever you are learning about them, this may be useful to other contributors. -- FamiTracker (and most of its forks) is an MFC application with project files made in Visual Studio. Dn-FamiTracker supports being built by Visual Studio and CMake, so if you have implemented a change, be sure to update the CMake files as required. -- If implementing a new feature that affects tracker behavior (such as effects, UI), please update documentation in Dn-help and other areas of the tracker. -- If implementing a new feature that affects file formats (such as envelopes, new data format storage), ***please increment the respective file block version***. - - if this necessitates a new file block, please increment the module file version. - -## Git guidelines - -- Write pull requests that passes CI builds and tests. -- Make sure to adhere to the [pull request template](Dn-FamiTracker/docs/pull_request_template.md) message guidelines. -- Base your pull request on the `main` branch. -- If a merge conflict happens due to not being updated in a long time, resolve merge conflicts and rebase your pull request to the latest compatible version of the `main` branch. -- Be sure to update [Dn-help](https://github.com/Dn-Programming-Core-Management/Dn-help) on your pull request as needed. - - Create a corresponding pull request on Dn-help that links to your main pull request. - - Then once the PR in Dn-help is merged, update the submodule to point to the main branch - -### For Dn-FT maintainers: - -- ***Do not push directly to the `main` branch***. Instead, push your changes to a branch first before writing a pull request. -- These branches are designated to be reoccurring may be used for the following: - - `app-emu-module-nsf_driver-dev` - - This branch is for modifying the application itself, such as the NSF driver, the module format, loading and saving code, emulator core, audio drivers, etc. - - `docs-license-ver-meta-dev` - - This branch is for meta related development, such as documentation, updating icons and logos, updating version info and license year text, etc. - - `ci-dev` - - This branch is for continuous integration development, such as GitHub Actions and AppVeyor. - - You will most likely force push this branch to hell and back, so be sure to do it on your own fork repo. -- Other branches may be made for more niche/specific modifications and fixes. -- If your pull request touches two or more of these categories, it's fine but please keep it minimal. - - Otherwise, create a new branch. +--- ## Dependencies and Building @@ -52,7 +18,7 @@ To edit and/or build the source, you may use Visual Studio 2022, or alternativel - For miscellaneous custom build scripts: - [Python 3.10+](https://www.python.org/) - For any IDE that supports building via CMake: - - CMake + - CMake version 3.16+ - The latest MSVC build tools - may be installed by VS Installer or by other sources - Windows 11 SDK (10.0.26100.0) @@ -63,17 +29,61 @@ To edit and/or build the source, you may use Visual Studio 2022, or alternativel - For Visual Studio 2022: - Windows Universal CRT SDK - The **Desktop development with C++** workload, including: - - MSVC v142 - VS 2019 C++ x64/x86 build tools (latest version) + - MSVC v143 - VS 2022 C++ x64/x86 build tools (latest version) - C++ CMake tools for Windows - C++ AddressSanitizer - C++ ATL for latest v143 build tools (x86 & x64) - C++ MFC for latest v143 build tools (x86 & x64) - - Windows 10 SDK version 2104 (10.0.20348.0) + - Windows 11 SDK (10.0.26100.0) - Alternatively, you can install the components mentioned via the [provided .vsconfig file](../Dn-FT_VS_Dependencies.vsconfig). +--- + +## Code Guidelines and Formatting + +- The code mostly follows Unix style (LF) line endings and TAB indentation format. + - Remove trailing whitespace whenever you edit nearby lines. +- Document Dn-FamiTracker code behavior as much as possible whenever you are learning about them, this may be useful to other contributors. + - There is not much documentation regarding the FamiTracker source code, so you might need to do some code reading first before you implement or modify a component. +- FamiTracker (and most of its forks) is an MFC application with project files made in Visual Studio. Dn-FamiTracker supports being built by Visual Studio and CMake, so if you have implemented a change, be sure to ***update the CMake files as required***. +- If implementing a new feature that affects tracker behavior (such as effects, UI), please ***update documentation*** in Dn-help and other areas of the tracker. +- If implementing a new feature that affects file formats (such as envelopes, new data format storage), ***please increment the respective file block version***. + - if this necessitates a new file block, please increment the module file version. + +--- + +## Git guidelines + +- Write pull requests that passes CI builds and tests. +- Make sure to adhere to the [pull request template](Dn-FamiTracker/docs/pull_request_template.md) message guidelines. +- Base your pull request on the `main` branch. +- If a merge conflict happens due to not being updated in a long time, resolve merge conflicts and rebase your pull request to the latest compatible version of the `main` branch. +- Be sure to update [Dn-help](https://github.com/Dn-Programming-Core-Management/Dn-help) on your pull request as needed. + - Create a corresponding pull request on Dn-help that links to your main pull request. + - Then once the PR in Dn-help is merged, update the submodule to point to the main branch + +--- + ## Important Things to Note - When committing changes, ***file extension case must be the same as the original file!*** - This might result in merge conflicts, because Git is case sensitive, but in Windows systems, the file system is case insensitive by default. - Additionally, case sensitivity in Windows can be enabled through WSL, but it **must only be enabled to resolve merge conflicts regarding file extension case sensitivity**. - If case sensitivity is left enabled, Visual Studio throws a lot of errors due to the way IntelliSense capitalizes paths internally. + +--- + +## For D.P.C.M. maintainers + +- ***Do not push directly to the `main` branch***. Instead, push your changes to a branch first before writing a pull request. +- These branches are designated to be reoccurring may be used for the following: + - `app-emu-module-nsf_driver-dev` + - This branch is for modifying the application itself, such as the NSF driver, the module format, loading and saving code, emulator core, audio drivers, etc. + - `docs-license-ver-meta-dev` + - This branch is for meta related development, such as documentation, updating icons and logos, updating version info and license year text, etc. + - `ci-dev` + - This branch is for continuous integration development, such as GitHub Actions and AppVeyor. + - You will most likely force push this branch to hell and back, so be sure to do it on your own fork repo. +- Other branches may be made for more niche/specific modifications and fixes. +- If your pull request touches two or more of these categories, it's fine but please keep it minimal. + - Otherwise, create a new branch. diff --git a/Dn-FT_VS_Dependencies.vsconfig b/Dn-FT_VS_Dependencies.vsconfig index 0ab5279d5..77ce7166c 100644 --- a/Dn-FT_VS_Dependencies.vsconfig +++ b/Dn-FT_VS_Dependencies.vsconfig @@ -21,7 +21,7 @@ "Microsoft.VisualStudio.Component.VC.ATL.Spectre", "Microsoft.VisualStudio.Component.VC.ATLMFC.Spectre", "Microsoft.VisualStudio.Component.VC.ASAN", - "Microsoft.VisualStudio.Component.Windows10SDK.20348", + "Microsoft.VisualStudio.Component.Windows11SDK.26100", "Microsoft.Component.VC.Runtime.UCRTSDK", "Microsoft.VisualStudio.Workload.NativeDesktop", "Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre" diff --git a/Dn-FamiTracker.vcxproj b/Dn-FamiTracker.vcxproj index 8f5461955..3245f3b47 100644 --- a/Dn-FamiTracker.vcxproj +++ b/Dn-FamiTracker.vcxproj @@ -690,168 +690,12 @@ - echo // Generated Help Map file. Used by $(SolutionName).hhp. > "Dn-help\hlp\HTMLDefines.h" -echo. > "Dn-help\hlp\HTMLDefines.h" -echo // Commands (ID_* and IDM_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Prompts (IDP_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDP_,HIDP_,0x30000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Resources (IDR_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDR_,HIDR_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Dialogs (IDD_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDD_,HIDD_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Frame Controls (IDW_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" - echo // Generated Help Map file. Used by $(SolutionName).hhp. > "Dn-help\hlp\HTMLDefines.h" -echo. > "Dn-help\hlp\HTMLDefines.h" -echo // Commands (ID_* and IDM_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Prompts (IDP_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDP_,HIDP_,0x30000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Resources (IDR_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDR_,HIDR_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Dialogs (IDD_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDD_,HIDD_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Frame Controls (IDW_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" - echo // Generated Help Map file. Used by $(SolutionName).hhp. > "Dn-help\hlp\HTMLDefines.h" -echo. > "Dn-help\hlp\HTMLDefines.h" -echo // Commands (ID_* and IDM_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Prompts (IDP_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDP_,HIDP_,0x30000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Resources (IDR_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDR_,HIDR_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Dialogs (IDD_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDD_,HIDD_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Frame Controls (IDW_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" - echo // Generated Help Map file. Used by $(SolutionName).hhp. > "Dn-help\hlp\HTMLDefines.h" -echo. > "Dn-help\hlp\HTMLDefines.h" -echo // Commands (ID_* and IDM_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Prompts (IDP_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDP_,HIDP_,0x30000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Resources (IDR_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDR_,HIDR_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Dialogs (IDD_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDD_,HIDD_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Frame Controls (IDW_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" - Generating map file for help compiler. - Generating map file for help compiler. - Generating map file for help compiler. - Generating map file for help compiler. - Dn-help\hlp\HTMLDefines.h;%(Outputs) - Dn-help\hlp\HTMLDefines.h;%(Outputs) - Dn-help\hlp\HTMLDefines.h;%(Outputs) - Dn-help\hlp\HTMLDefines.h;%(Outputs) - echo // Generated Help Map file. Used by $(SolutionName).hhp. > "Dn-help\hlp\HTMLDefines.h" -echo. > "Dn-help\hlp\HTMLDefines.h" -echo // Commands (ID_* and IDM_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Prompts (IDP_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDP_,HIDP_,0x30000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Resources (IDR_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDR_,HIDR_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Dialogs (IDD_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDD_,HIDD_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Frame Controls (IDW_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" - echo // Generated Help Map file. Used by $(SolutionName).hhp. > "Dn-help\hlp\HTMLDefines.h" -echo. > "Dn-help\hlp\HTMLDefines.h" -echo // Commands (ID_* and IDM_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Prompts (IDP_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDP_,HIDP_,0x30000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Resources (IDR_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDR_,HIDR_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Dialogs (IDD_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDD_,HIDD_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Frame Controls (IDW_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" - echo // Generated Help Map file. Used by $(SolutionName).hhp. > "Dn-help\hlp\HTMLDefines.h" -echo. > "Dn-help\hlp\HTMLDefines.h" -echo // Commands (ID_* and IDM_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Prompts (IDP_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDP_,HIDP_,0x30000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Resources (IDR_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDR_,HIDR_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Dialogs (IDD_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDD_,HIDD_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Frame Controls (IDW_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" - echo // Generated Help Map file. Used by $(SolutionName).hhp. > "Dn-help\hlp\HTMLDefines.h" -echo. > "Dn-help\hlp\HTMLDefines.h" -echo // Commands (ID_* and IDM_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Prompts (IDP_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDP_,HIDP_,0x30000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Resources (IDR_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDR_,HIDR_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Dialogs (IDD_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h IDD_,HIDD_,0x20000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" -echo. >> "Dn-help\hlp\HTMLDefines.h" -echo // Frame Controls (IDW_*) >> "Dn-help\hlp\HTMLDefines.h" -makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTMLDefines.h" - Generating map file for help compiler. - Generating map file for help compiler. - Generating map file for help compiler. - Generating map file for help compiler. - Dn-help\hlp\HTMLDefines.h;%(Outputs) - Dn-help\hlp\HTMLDefines.h;%(Outputs) - Dn-help\hlp\HTMLDefines.h;%(Outputs) - Dn-help\hlp\HTMLDefines.h;%(Outputs) - $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs) - true - $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs) - true - $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs) - true - $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs) - true - $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs) - true - $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs) - true - $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs) - true - $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs) - true + Generating map file for help compiler. + call $(SolutionDir)generate-helpmap.bat + Dn-help\hlp\HTMLDefines.h;%(Outputs) + $(SolutionDir)Dn-help\hlp\changelog_shell.htm;%(AdditionalInputs) + true - @@ -1001,38 +845,10 @@ makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTML - python $(SolutionDir)resource_version_update.py - Updating version info in resource file. - python $(SolutionDir)resource_version_update.py - Updating version info in resource file. - python $(SolutionDir)resource_version_update.py - Updating version info in resource file. - python $(SolutionDir)resource_version_update.py - Updating version info in resource file. - python $(SolutionDir)resource_version_update.py - Updating version info in resource file. - python $(SolutionDir)resource_version_update.py - Updating version info in resource file. - python $(SolutionDir)resource_version_update.py - Updating version info in resource file. - python $(SolutionDir)resource_version_update.py - Updating version info in resource file. - $(SolutionDir)Dn-FamiTracker.rc;%(Outputs) - $(SolutionDir)Dn-FamiTracker.rc;%(Outputs) - $(SolutionDir)Dn-FamiTracker.rc;%(Outputs) - $(SolutionDir)Dn-FamiTracker.rc;%(Outputs) - $(SolutionDir)Dn-FamiTracker.rc;%(Outputs) - $(SolutionDir)Dn-FamiTracker.rc;%(Outputs) - $(SolutionDir)Dn-FamiTracker.rc;%(Outputs) - $(SolutionDir)Dn-FamiTracker.rc;%(Outputs) - true - true - true - true - true - true - true - true + python $(SolutionDir)resource_version_update.py + Updating version info in resource file. + $(SolutionDir)Dn-FamiTracker.rc;%(Outputs) + true @@ -1139,11 +955,9 @@ makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTML + - - - true - + true @@ -1166,53 +980,17 @@ makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTML - Document Document - call $(SolutionDir)Source\drivers\build.cmd - Building NSF driver headers. - $(SolutionDir)Source\drivers\drv_2a03.h;$(SolutionDir)Source\drivers\drv_all.h;$(SolutionDir)Source\drivers\drv_fds.h;$(SolutionDir)Source\drivers\drv_mmc5.h;$(SolutionDir)Source\drivers\drv_n163.h;$(SolutionDir)Source\drivers\drv_s5b.h;$(SolutionDir)Source\drivers\drv_vrc6.h;$(SolutionDir)Source\drivers\drv_vrc7.h;%(Outputs) - $(SolutionDir)Source\drivers\asm\longbranch.mac;$(SolutionDir)Source\drivers\asm\init.s;$(SolutionDir)Source\drivers\asm\player.s;$(SolutionDir)Source\drivers\asm\effects.s;$(SolutionDir)Source\drivers\asm\instrument.s;$(SolutionDir)Source\drivers\asm\apu.s;$(SolutionDir)Source\drivers\asm\vrc6.s;$(SolutionDir)Source\drivers\asm\vrc7.s;$(SolutionDir)Source\drivers\asm\mmc5.s;$(SolutionDir)Source\drivers\asm\fds.s;$(SolutionDir)Source\drivers\asm\n163.s;$(SolutionDir)Source\drivers\asm\s5b.s;$(SolutionDir)Source\drivers\asm\periods.s;$(SolutionDir)Source\drivers\asm\vibrato.s;%(AdditionalInputs) - true - call $(SolutionDir)Source\drivers\build.cmd - Building NSF driver headers. - $(SolutionDir)Source\drivers\drv_2a03.h;$(SolutionDir)Source\drivers\drv_all.h;$(SolutionDir)Source\drivers\drv_fds.h;$(SolutionDir)Source\drivers\drv_mmc5.h;$(SolutionDir)Source\drivers\drv_n163.h;$(SolutionDir)Source\drivers\drv_s5b.h;$(SolutionDir)Source\drivers\drv_vrc6.h;$(SolutionDir)Source\drivers\drv_vrc7.h;%(Outputs) - $(SolutionDir)Source\drivers\asm\longbranch.mac;$(SolutionDir)Source\drivers\asm\init.s;$(SolutionDir)Source\drivers\asm\player.s;$(SolutionDir)Source\drivers\asm\effects.s;$(SolutionDir)Source\drivers\asm\instrument.s;$(SolutionDir)Source\drivers\asm\apu.s;$(SolutionDir)Source\drivers\asm\vrc6.s;$(SolutionDir)Source\drivers\asm\vrc7.s;$(SolutionDir)Source\drivers\asm\mmc5.s;$(SolutionDir)Source\drivers\asm\fds.s;$(SolutionDir)Source\drivers\asm\n163.s;$(SolutionDir)Source\drivers\asm\s5b.s;$(SolutionDir)Source\drivers\asm\periods.s;$(SolutionDir)Source\drivers\asm\vibrato.s;%(AdditionalInputs) - true - call $(SolutionDir)Source\drivers\build.cmd - Building NSF driver headers. - $(SolutionDir)Source\drivers\drv_2a03.h;$(SolutionDir)Source\drivers\drv_all.h;$(SolutionDir)Source\drivers\drv_fds.h;$(SolutionDir)Source\drivers\drv_mmc5.h;$(SolutionDir)Source\drivers\drv_n163.h;$(SolutionDir)Source\drivers\drv_s5b.h;$(SolutionDir)Source\drivers\drv_vrc6.h;$(SolutionDir)Source\drivers\drv_vrc7.h;%(Outputs) - $(SolutionDir)Source\drivers\asm\longbranch.mac;$(SolutionDir)Source\drivers\asm\init.s;$(SolutionDir)Source\drivers\asm\player.s;$(SolutionDir)Source\drivers\asm\effects.s;$(SolutionDir)Source\drivers\asm\instrument.s;$(SolutionDir)Source\drivers\asm\apu.s;$(SolutionDir)Source\drivers\asm\vrc6.s;$(SolutionDir)Source\drivers\asm\vrc7.s;$(SolutionDir)Source\drivers\asm\mmc5.s;$(SolutionDir)Source\drivers\asm\fds.s;$(SolutionDir)Source\drivers\asm\n163.s;$(SolutionDir)Source\drivers\asm\s5b.s;$(SolutionDir)Source\drivers\asm\periods.s;$(SolutionDir)Source\drivers\asm\vibrato.s;%(AdditionalInputs) - true - call $(SolutionDir)Source\drivers\build.cmd - Building NSF driver headers. - $(SolutionDir)Source\drivers\drv_2a03.h;$(SolutionDir)Source\drivers\drv_all.h;$(SolutionDir)Source\drivers\drv_fds.h;$(SolutionDir)Source\drivers\drv_mmc5.h;$(SolutionDir)Source\drivers\drv_n163.h;$(SolutionDir)Source\drivers\drv_s5b.h;$(SolutionDir)Source\drivers\drv_vrc6.h;$(SolutionDir)Source\drivers\drv_vrc7.h;%(Outputs) - $(SolutionDir)Source\drivers\asm\longbranch.mac;$(SolutionDir)Source\drivers\asm\init.s;$(SolutionDir)Source\drivers\asm\player.s;$(SolutionDir)Source\drivers\asm\effects.s;$(SolutionDir)Source\drivers\asm\instrument.s;$(SolutionDir)Source\drivers\asm\apu.s;$(SolutionDir)Source\drivers\asm\vrc6.s;$(SolutionDir)Source\drivers\asm\vrc7.s;$(SolutionDir)Source\drivers\asm\mmc5.s;$(SolutionDir)Source\drivers\asm\fds.s;$(SolutionDir)Source\drivers\asm\n163.s;$(SolutionDir)Source\drivers\asm\s5b.s;$(SolutionDir)Source\drivers\asm\periods.s;$(SolutionDir)Source\drivers\asm\vibrato.s;%(AdditionalInputs) - true - call $(SolutionDir)Source\drivers\build.cmd - Building NSF driver headers. - $(SolutionDir)Source\drivers\drv_2a03.h;$(SolutionDir)Source\drivers\drv_all.h;$(SolutionDir)Source\drivers\drv_fds.h;$(SolutionDir)Source\drivers\drv_mmc5.h;$(SolutionDir)Source\drivers\drv_n163.h;$(SolutionDir)Source\drivers\drv_s5b.h;$(SolutionDir)Source\drivers\drv_vrc6.h;$(SolutionDir)Source\drivers\drv_vrc7.h;%(Outputs) - $(SolutionDir)Source\drivers\asm\longbranch.mac;$(SolutionDir)Source\drivers\asm\init.s;$(SolutionDir)Source\drivers\asm\player.s;$(SolutionDir)Source\drivers\asm\effects.s;$(SolutionDir)Source\drivers\asm\instrument.s;$(SolutionDir)Source\drivers\asm\apu.s;$(SolutionDir)Source\drivers\asm\vrc6.s;$(SolutionDir)Source\drivers\asm\vrc7.s;$(SolutionDir)Source\drivers\asm\mmc5.s;$(SolutionDir)Source\drivers\asm\fds.s;$(SolutionDir)Source\drivers\asm\n163.s;$(SolutionDir)Source\drivers\asm\s5b.s;$(SolutionDir)Source\drivers\asm\periods.s;$(SolutionDir)Source\drivers\asm\vibrato.s;%(AdditionalInputs) - true - call $(SolutionDir)Source\drivers\build.cmd - Building NSF driver headers. - $(SolutionDir)Source\drivers\drv_2a03.h;$(SolutionDir)Source\drivers\drv_all.h;$(SolutionDir)Source\drivers\drv_fds.h;$(SolutionDir)Source\drivers\drv_mmc5.h;$(SolutionDir)Source\drivers\drv_n163.h;$(SolutionDir)Source\drivers\drv_s5b.h;$(SolutionDir)Source\drivers\drv_vrc6.h;$(SolutionDir)Source\drivers\drv_vrc7.h;%(Outputs) - $(SolutionDir)Source\drivers\asm\longbranch.mac;$(SolutionDir)Source\drivers\asm\init.s;$(SolutionDir)Source\drivers\asm\player.s;$(SolutionDir)Source\drivers\asm\effects.s;$(SolutionDir)Source\drivers\asm\instrument.s;$(SolutionDir)Source\drivers\asm\apu.s;$(SolutionDir)Source\drivers\asm\vrc6.s;$(SolutionDir)Source\drivers\asm\vrc7.s;$(SolutionDir)Source\drivers\asm\mmc5.s;$(SolutionDir)Source\drivers\asm\fds.s;$(SolutionDir)Source\drivers\asm\n163.s;$(SolutionDir)Source\drivers\asm\s5b.s;$(SolutionDir)Source\drivers\asm\periods.s;$(SolutionDir)Source\drivers\asm\vibrato.s;%(AdditionalInputs) - true - call $(SolutionDir)Source\drivers\build.cmd - Building NSF driver headers. - $(SolutionDir)Source\drivers\drv_2a03.h;$(SolutionDir)Source\drivers\drv_all.h;$(SolutionDir)Source\drivers\drv_fds.h;$(SolutionDir)Source\drivers\drv_mmc5.h;$(SolutionDir)Source\drivers\drv_n163.h;$(SolutionDir)Source\drivers\drv_s5b.h;$(SolutionDir)Source\drivers\drv_vrc6.h;$(SolutionDir)Source\drivers\drv_vrc7.h;%(Outputs) - $(SolutionDir)Source\drivers\asm\longbranch.mac;$(SolutionDir)Source\drivers\asm\init.s;$(SolutionDir)Source\drivers\asm\player.s;$(SolutionDir)Source\drivers\asm\effects.s;$(SolutionDir)Source\drivers\asm\instrument.s;$(SolutionDir)Source\drivers\asm\apu.s;$(SolutionDir)Source\drivers\asm\vrc6.s;$(SolutionDir)Source\drivers\asm\vrc7.s;$(SolutionDir)Source\drivers\asm\mmc5.s;$(SolutionDir)Source\drivers\asm\fds.s;$(SolutionDir)Source\drivers\asm\n163.s;$(SolutionDir)Source\drivers\asm\s5b.s;$(SolutionDir)Source\drivers\asm\periods.s;$(SolutionDir)Source\drivers\asm\vibrato.s;%(AdditionalInputs) - true - call $(SolutionDir)Source\drivers\build.cmd - Building NSF driver headers. - $(SolutionDir)Source\drivers\drv_2a03.h;$(SolutionDir)Source\drivers\drv_all.h;$(SolutionDir)Source\drivers\drv_fds.h;$(SolutionDir)Source\drivers\drv_mmc5.h;$(SolutionDir)Source\drivers\drv_n163.h;$(SolutionDir)Source\drivers\drv_s5b.h;$(SolutionDir)Source\drivers\drv_vrc6.h;$(SolutionDir)Source\drivers\drv_vrc7.h;%(Outputs) - $(SolutionDir)Source\drivers\asm\longbranch.mac;$(SolutionDir)Source\drivers\asm\init.s;$(SolutionDir)Source\drivers\asm\player.s;$(SolutionDir)Source\drivers\asm\effects.s;$(SolutionDir)Source\drivers\asm\instrument.s;$(SolutionDir)Source\drivers\asm\apu.s;$(SolutionDir)Source\drivers\asm\vrc6.s;$(SolutionDir)Source\drivers\asm\vrc7.s;$(SolutionDir)Source\drivers\asm\mmc5.s;$(SolutionDir)Source\drivers\asm\fds.s;$(SolutionDir)Source\drivers\asm\n163.s;$(SolutionDir)Source\drivers\asm\s5b.s;$(SolutionDir)Source\drivers\asm\periods.s;$(SolutionDir)Source\drivers\asm\vibrato.s;%(AdditionalInputs) - true + call $(SolutionDir)Source\drivers\build.cmd + Building NSF driver headers. + $(SolutionDir)Source\drivers\drv_2a03.h;$(SolutionDir)Source\drivers\drv_all.h;$(SolutionDir)Source\drivers\drv_fds.h;$(SolutionDir)Source\drivers\drv_mmc5.h;$(SolutionDir)Source\drivers\drv_n163.h;$(SolutionDir)Source\drivers\drv_s5b.h;$(SolutionDir)Source\drivers\drv_vrc6.h;$(SolutionDir)Source\drivers\drv_vrc7.h;%(Outputs) + $(SolutionDir)Source\drivers\asm\longbranch.mac;$(SolutionDir)Source\drivers\asm\init.s;$(SolutionDir)Source\drivers\asm\player.s;$(SolutionDir)Source\drivers\asm\effects.s;$(SolutionDir)Source\drivers\asm\instrument.s;$(SolutionDir)Source\drivers\asm\apu.s;$(SolutionDir)Source\drivers\asm\vrc6.s;$(SolutionDir)Source\drivers\asm\vrc7.s;$(SolutionDir)Source\drivers\asm\mmc5.s;$(SolutionDir)Source\drivers\asm\fds.s;$(SolutionDir)Source\drivers\asm\n163.s;$(SolutionDir)Source\drivers\asm\s5b.s;$(SolutionDir)Source\drivers\asm\periods.s;$(SolutionDir)Source\drivers\asm\vibrato.s;%(AdditionalInputs) + true @@ -1229,7 +1007,7 @@ makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "%(FullPath)" >> "Dn-help\hlp\HTML - + diff --git a/Dn-FamiTracker.vcxproj.filters b/Dn-FamiTracker.vcxproj.filters index eb58bd6de..51db5b327 100644 --- a/Dn-FamiTracker.vcxproj.filters +++ b/Dn-FamiTracker.vcxproj.filters @@ -1499,9 +1499,6 @@ Header Files - - Header Files - @@ -1566,9 +1563,6 @@ Resource Files\Bitmaps - - - Header Files\Dialog Boxes Headers\Instrument Headers\Related Headers\Resampler Headers @@ -1590,7 +1584,13 @@ - + + Source Files + + + + Source Files + diff --git a/Dn-help b/Dn-help index b45d3001e..d4ef985d9 160000 --- a/Dn-help +++ b/Dn-help @@ -1 +1 @@ -Subproject commit b45d3001e87c53ecdd9f262cca433ab0c9ba9740 +Subproject commit d4ef985d9e418ff357404a704e315c69d4db538c diff --git a/README.md b/README.md index 5ee1b2e03..07bc9636d 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ the nth derivative of the original FamiTracker program. [Dn-help](https://github.com/Dn-Programming-Core-Management/Dn-help) - and more to come, see the [release page](https://github.com/Dn-Programming-Core-Management/Dn-FamiTracker/releases) - and the [changelog](docs/CHANGELOG.md) for more info + and the [changelog](Dn-FamiTracker/CHANGELOG.md) for more info ## Downloads @@ -60,7 +60,7 @@ For more details, view the [license](LICENSE.md). ## Contributing -[Contributing and compiling](./docs/CONTRIBUTING.md) +[Contributing and compiling](Dn-FamiTracker/CONTRIBUTING.md) ## Program lineage diff --git a/Source/libsamplerate/.gitattributes b/Source/libsamplerate/.gitattributes new file mode 100644 index 000000000..9e57d28ec --- /dev/null +++ b/Source/libsamplerate/.gitattributes @@ -0,0 +1,15 @@ +# enforce correct file-extensions +*.ac text eol=lf +*.am text eol=lf +*.m4 text eol=lf +*.pc text eol=lf +*.spec text eol=lf +*.sh text eol=lf + +*.bat text eol=crlf +*.def text eol=crlf +*.msvc text eol=crlf + +# repository configuration excluded from the archive +.git* export-ignore +.travis.yml export-ignore diff --git a/Source/libsamplerate/.gitignore b/Source/libsamplerate/.gitignore new file mode 100644 index 000000000..c7e5e81a6 --- /dev/null +++ b/Source/libsamplerate/.gitignore @@ -0,0 +1,73 @@ +# *.cm* # This line is broken it matches all files. +*.dat +*.gz +*.la +*.lo +*.mat +*.o +*.s +*.wav +.depend +.deps +.libs +build-aux/ +Hack +Images +m4/libtool.m4 +m4/ltoptions.m4 +m4/ltsugar.m4 +m4/ltversion.m4 +m4/lt~obsolete.m4 +Makefile +Makefile.in +Octave/*.h +Octave/make_quad_filter +Octave/make_src_filter +Win32/Makefile.mingw +aclocal.m4 +autom4te.cache +libsamplerate-*.tar.xz +compile +config.* +!/config.h.in +configure +depcomp +doc/ChangeLog +doc/NEWS +examples/timewarp-file +examples/varispeed-play +install-sh +libsamplerate.spec +libtool +localinstall.py +ltmain.sh +missing +samplerate.pc +src/Version_script +src/config.h +src/config.h.in +stamp-h1 +.dirstamp +tests/*_test +tests/benchmark +tests/src-evaluate +*.log +*.trs + +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +CMakeSettings.json + +/*[Bb]uild*/ + +/.vscode/ +/.vs/ +/out/ + diff --git a/Source/libsamplerate/CMakeLists.txt b/Source/libsamplerate/CMakeLists.txt index e44380ca2..06f39a0b5 100644 --- a/Source/libsamplerate/CMakeLists.txt +++ b/Source/libsamplerate/CMakeLists.txt @@ -1,21 +1,4 @@ -cmake_minimum_required(VERSION 3.1..3.18) - -# Policies - -# Include file check macros honor CMAKE_REQUIRED_LIBRARIES, CMake >= 3.12 -if(POLICY CMP0075) - cmake_policy(SET CMP0075 NEW) -endif() - -# MSVC runtime library flags are selected by an abstraction, CMake >= 3.15 -# This policy still need to be set even with cmake_minimum_required() command above. -if(POLICY CMP0091) - if(DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) - cmake_policy(SET CMP0091 NEW) - else() - cmake_policy(SET CMP0091 OLD) - endif() -endif() +cmake_minimum_required(VERSION 3.16..3.20) project(libsamplerate VERSION 0.2.2 LANGUAGES C) @@ -42,11 +25,12 @@ include(CheckLibraryExists) include(CheckSymbolExists) include(GNUInstallDirs) +include(CTest) + if(DEFINED LIBSAMPLERATE_TESTS) message(DEPRECATION "LIBSAMPLERATE_TESTS option deprecated, use BUILD_TESTING option instead.") set(BUILD_TESTING ${LIBSAMPLERATE_TESTS}) endif() -include(CTest) add_definitions(-DHAVE_CONFIG_H) include_directories(${PROJECT_BINARY_DIR}) @@ -67,6 +51,11 @@ if(NOT (WIN32 OR APPLE OR CYGWIN OR HAIKU OR BEOS)) endif() endif() +option(LIBSAMPLERATE_SSE2_LRINT "Implement lrintf using SSE2 on x86 CPUs if possible" OFF) +if(LIBSAMPLERATE_SSE2_LRINT) + add_definitions(-DENABLE_SSE2_LRINT) +endif() + if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") option(LIBSAMPLERATE_ENABLE_SANITIZERS "Enable ASAN and UBSAN" OFF) @@ -91,6 +80,7 @@ endif() check_include_file(stdbool.h HAVE_STDBOOL_H) check_include_file(unistd.h HAVE_UNISTD_H) +check_include_file(immintrin.h HAVE_IMMINTRIN_H) # For examples and tests @@ -137,11 +127,4 @@ endif() # Packaging support -# See https://cmake.org/cmake/help/v3.12/release/3.12.html#cpack -if(CMAKE_VERSION VERSION_LESS 3.12) - set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) - set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) - set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) -endif() - include(CPack) diff --git a/Source/libsamplerate/ChangeLog b/Source/libsamplerate/ChangeLog index 9250737d9..0ba4af811 100644 --- a/Source/libsamplerate/ChangeLog +++ b/Source/libsamplerate/ChangeLog @@ -749,7 +749,7 @@ * src/common.h Add fields saved_frames and saved_data to SF_PRIVATE struct for storing - data between sucessive calls to src_callback_read(). + data between successive calls to src_callback_read(). Also rearange the fields of SF_PRIVATE. 2004-03-20 Erik de Castro Lopo @@ -1026,7 +1026,7 @@ Added links to Win32 compiling information. * configure.ac tests/Makefile.am - Detect libefence and link it to all the test programs if configued + Detect libefence and link it to all the test programs if configured with --enable-debug. * tests/utils.[ch] diff --git a/Source/libsamplerate/README.md b/Source/libsamplerate/README.md index d6a6b8be7..0515418bc 100644 --- a/Source/libsamplerate/README.md +++ b/Source/libsamplerate/README.md @@ -8,7 +8,7 @@ libsamplerate (also known as Secret Rabbit Code) is a library for performing sam * The [`docs/`](https://github.com/libsndfile/libsamplerate/tree/master/docs) directory contains the libsamplerate documentation. * The [`examples/`](https://github.com/libsndfile/libsamplerate/tree/master/examples) directory contains examples of how to write code using libsamplerate. * The [`tests/`](https://github.com/libsndfile/libsamplerate/tree/master/tests) directory contains programs which link against libsamplerate and test its functionality. -* The [`Win32/`](https://github.com/libsndfile/libsamplerate/tree/master/Win32) directory contains files and documentation to allow libsamplerate to compile under Win32 with the Microsoft Visual C++ compiler. +* The [`Win32/`](https://github.com/libsndfile/libsamplerate/tree/master/Win32) directory contains files to allow libsamplerate to compile under Win32 with the Microsoft Visual C++ compiler. Additional references: @@ -39,6 +39,7 @@ Building on macOS should be the same as building it on any other Unix platform. To compile libsamplerate on platforms which have a Bourne compatible shell, an ANSI C compiler and a make utility should require no more that the following three commands: ```bash +autoreconf -vif ./configure make make install diff --git a/Source/libsamplerate/Win32/libsamplerate-0.def b/Source/libsamplerate/Win32/libsamplerate-0.def deleted file mode 100644 index b91d79f5b..000000000 --- a/Source/libsamplerate/Win32/libsamplerate-0.def +++ /dev/null @@ -1,30 +0,0 @@ -EXPORTS - -src_new @1 -src_delete @2 - -src_get_name @10 -src_get_description @11 -src_get_version @12 - -src_process @20 -src_reset @21 -src_set_ratio @22 -src_clone @23 - -src_error @30 -src_strerror @31 - -src_simple @40 - -src_is_valid_ratio @50 - -src_callback_new @60 -src_callback_read @61 - -src_short_to_float_array @70 -src_float_to_short_array @71 -src_int_to_float_array @80 -src_float_to_int_array @81 - -src_get_channels @90 diff --git a/Source/libsamplerate/config.h.cmake b/Source/libsamplerate/config.h.cmake index 2964c2396..ec3229fba 100644 --- a/Source/libsamplerate/config.h.cmake +++ b/Source/libsamplerate/config.h.cmake @@ -33,6 +33,9 @@ /* Define if you have C99's lrintf function. */ #cmakedefine01 HAVE_LRINTF +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_IMMINTRIN_H + /* Define if you have signal SIGALRM. */ #cmakedefine01 HAVE_SIGALRM diff --git a/Source/libsamplerate/configure.ac b/Source/libsamplerate/configure.ac index 9948acb42..cd49cdfd6 100644 --- a/Source/libsamplerate/configure.ac +++ b/Source/libsamplerate/configure.ac @@ -89,7 +89,7 @@ m4_define([abi_version_patch], [lt_revision]) dnl ==================================================================================== -AC_CHECK_HEADERS([stdbool.h stdint.h sys/times.h unistd.h]) +AC_CHECK_HEADERS([stdbool.h stdint.h sys/times.h unistd.h immintrin.h]) dnl ==================================================================================== dnl Couple of initializations here. Fill in real values later. @@ -105,6 +105,9 @@ AC_ARG_ENABLE([werror], AC_ARG_ENABLE([cpu-clip], [AS_HELP_STRING([--disable-cpu-clip], [disable tricky cpu specific clipper])]) +AC_ARG_ENABLE([sse2-lrint], + [AS_HELP_STRING([--enable-sse2-lrint], [implement lrintf using SSE2 on x86 CPUs if possible])]) + AC_ARG_ENABLE([sndfile], [AS_HELP_STRING([--disable-sndfile], [disable support for sndfile (default=autodetect)])], [], [enable_sndfile=auto]) @@ -179,6 +182,13 @@ AS_IF([test "x$enable_cpu_clip" != "xno"], [ AC_DEFINE_UNQUOTED([CPU_CLIPS_POSITIVE], [${ac_cv_c_clip_positive}], [Host processor clips on positive float to int conversion.]) AC_DEFINE_UNQUOTED([CPU_CLIPS_NEGATIVE], [${ac_cv_c_clip_negative}], [Host processor clips on negative float to int conversion.]) +dnl ==================================================================================== +dnl Determine if the user enabled lrint implementations using SSE2. + +AS_IF([test "x$enable_sse2_lrint" = "xyes"], [ + CFLAGS="$CFLAGS -DENABLE_SSE2_LRINT" + ]) + dnl ==================================================================================== dnl Check for libsndfile which is required for the test and example programs. diff --git a/Source/libsamplerate/docs/api.md b/Source/libsamplerate/docs/api.md index 84a17a168..f673e0b7e 100644 --- a/Source/libsamplerate/docs/api.md +++ b/Source/libsamplerate/docs/api.md @@ -15,7 +15,7 @@ libsamplerate, you need to add to the top of any function that call any of the following functions. You will also need to link you binary with the libsamplerate library. -The API allows three methods for accessing the capabilies of the library: +The API allows three methods for accessing the capabilities of the library: - A [simple interface](api_simple.md) which can sample rate convert a single block of samples (one or more channels) in one go. The simple API is less @@ -39,7 +39,7 @@ The parts of the API which are common to all three interfaces are: - The [SRC_DATA](api_misc.md#src_data) struct. All three versions of the API are restricted to operating on buffers of ISO C -Standard **float** data. However, there are two [auxillary functions](api_misc.md#auxillary-functions) +Standard **float** data. However, there are two [auxiliary functions](api_misc.md#auxiliary-functions) for converting arrays of float data to and from short data. **Note:** The **tests/** and **examples/** directories of the source code diff --git a/Source/libsamplerate/docs/api_full.md b/Source/libsamplerate/docs/api_full.md index 63eacdc97..6d5fd4555 100644 --- a/Source/libsamplerate/docs/api_full.md +++ b/Source/libsamplerate/docs/api_full.md @@ -133,7 +133,7 @@ int src_set_ratio (SRC_STATE *state, double new_ratio) ; ``` When using the **src_process** or **src_callback_process** APIs and updating the -**src_ratio** field of the **SRC_STATE** struct, the library will try to +**src_ratio** field of the **SRC_DATA** struct, the library will try to smoothly transition between the conversion ratio of the last call and the conversion ratio of the current call. diff --git a/Source/libsamplerate/docs/api_misc.md b/Source/libsamplerate/docs/api_misc.md index 90a1a1994..9e9a53ba7 100644 --- a/Source/libsamplerate/docs/api_misc.md +++ b/Source/libsamplerate/docs/api_misc.md @@ -54,9 +54,11 @@ The details of these converters are as follows: SNR of 97dB and a bandwidth of 80%. - **SRC_ZERO_ORDER_HOLD** - A Zero Order Hold converter (interpolated value is equal to the last value). The quality is poor but the conversion speed is - blindlingly fast. + blindlingly fast. Be aware that this interpolator is not bandlimited, and the + user is responsible for adding anti-aliasing filtering. - **SRC_LINEAR** - A linear converter. Again the quality is poor, but the - conversion speed is blindingly fast. + conversion speed is blindingly fast. This interpolator is also not bandlimited, + and the user is responsible for adding anti-aliasing filtering. There are two functions that give either a (text string) name or description for each converter: @@ -125,9 +127,9 @@ converter to inform the caller of the number of frames consumed from the **data_in** array and the number of frames generated in the **data_out** array respectively. These values are for the current call to **src_process** only. -## Auxillary Functions +## Auxiliary Functions -There are four auxillary functions for converting arrays of float data to and +There are four auxiliary functions for converting arrays of float data to and from short or int data. These functions are defined as: ```c diff --git a/Source/libsamplerate/examples/audio_out.c b/Source/libsamplerate/examples/audio_out.c index 0bde9fd38..e7c28cc58 100644 --- a/Source/libsamplerate/examples/audio_out.c +++ b/Source/libsamplerate/examples/audio_out.c @@ -438,7 +438,11 @@ opensoundsys_close (AUDIO_OUT *audio_out) #if (defined (__MACH__) && defined (__APPLE__)) /* MacOSX */ +#include #include +#ifndef MAC_OS_VERSION_12_0 +#define kAudioObjectPropertyElementMain kAudioObjectPropertyElementMaster +#endif #define MACOSX_MAGIC MAKE_MAGIC ('M', 'a', 'c', ' ', 'O', 'S', ' ', 'X') @@ -493,7 +497,7 @@ macosx_open (int channels, int samplerate) /* get the default output device for the HAL */ propertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; propertyAddress.mScope = kAudioDevicePropertyScopeOutput; - propertyAddress.mElement = kAudioObjectPropertyElementMaster; + propertyAddress.mElement = kAudioObjectPropertyElementMain; count = sizeof (AudioDeviceID) ; if ((err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &propertyAddress, 0, NULL, @@ -960,7 +964,7 @@ solaris_play (get_audio_callback_t callback, AUDIO_OUT *audio_out, void *callbac while ((read_frames = callback (callback_data, float_buffer, BUFFER_LEN / solaris_out->channels))) { for (k = 0 ; k < read_frames * solaris_out->channels ; k++) - buffer [k] = lrint (32767.0 * float_buffer [k]) ; + buffer [k] = psf_lrint (32767.0 * float_buffer [k]) ; write (solaris_out->fd, buffer, read_frames * solaris_out->channels * sizeof (short)) ; } ; diff --git a/Source/libsamplerate/libsamplerate.vcxproj b/Source/libsamplerate/libsamplerate.vcxproj index e25ef2570..322a3430b 100644 --- a/Source/libsamplerate/libsamplerate.vcxproj +++ b/Source/libsamplerate/libsamplerate.vcxproj @@ -44,17 +44,17 @@ StaticLibrary - false + true v143 Unicode - x64 + x86 StaticLibrary - false + true v143 Unicode - x64 + x86 StaticLibrary @@ -62,7 +62,7 @@ v143 false Unicode - x64 + x86 StaticLibrary @@ -70,18 +70,18 @@ v143 false Unicode - x64 + x86 StaticLibrary - false + true v143 Unicode x64 StaticLibrary - false + true v143 Unicode x64 diff --git a/Source/libsamplerate/src/CMakeLists.txt b/Source/libsamplerate/src/CMakeLists.txt index 9328f9f2c..4a0e6c87c 100644 --- a/Source/libsamplerate/src/CMakeLists.txt +++ b/Source/libsamplerate/src/CMakeLists.txt @@ -50,12 +50,17 @@ if(BUILD_SHARED_LIBS AND WIN32) set_target_properties(samplerate PROPERTIES OUTPUT_NAME "libsamplerate-${libsamplerate_VERSION_MAJOR}") else() set_target_properties(samplerate PROPERTIES OUTPUT_NAME "samplerate-${libsamplerate_VERSION_MAJOR}") - endif() + endif() else() if(MINGW OR CYGWIN) set_target_properties(samplerate PROPERTIES RUNTIME_OUTPUT_NAME "samplerate-${libsamplerate_VERSION_MAJOR}") endif() endif() + if(OS2) + # OS/2 doesn't support a DLL name longer than 8 characters. + set_target_properties(samplerate PROPERTIES OUTPUT_NAME "SAMPRATE") + set_target_properties(samplerate PROPERTIES PREFIX "") + endif() endif() target_include_directories(samplerate diff --git a/Source/libsamplerate/src/check_asm.sh b/Source/libsamplerate/src/check_asm.sh index 5b7f0bd83..fd7c284d7 100644 --- a/Source/libsamplerate/src/check_asm.sh +++ b/Source/libsamplerate/src/check_asm.sh @@ -2,19 +2,8 @@ # Copyright (C) 2004-2011 Erik de Castro Lopo # -# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. +# This code is released under 2-clause BSD license. Please see the +# file at : https://github.com/libsndfile/libsamplerate/blob/master/COPYING #======================================================================= # This short test script compiles the file src_sinc.c into assembler diff --git a/Source/libsamplerate/src/common.h b/Source/libsamplerate/src/common.h index 3643afc09..c5b7d90b3 100644 --- a/Source/libsamplerate/src/common.h +++ b/Source/libsamplerate/src/common.h @@ -14,6 +14,36 @@ #include #endif +#if defined(__x86_64__) || defined(_M_X64) +# define HAVE_SSE2_INTRINSICS +#elif defined(ENABLE_SSE2_LRINT) && (defined(_M_IX86) || defined(__i386__)) +# if defined(_MSC_VER) +# define HAVE_SSE2_INTRINSICS +# elif defined(__clang__) +# ifdef __SSE2__ +# define HAVE_SSE2_INTRINSICS +# elif (__has_attribute(target)) +# define HAVE_SSE2_INTRINSICS +# define USE_TARGET_ATTRIBUTE +# endif +# elif defined(__GNUC__) +# ifdef __SSE2__ +# define HAVE_SSE2_INTRINSICS +# elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) +# define HAVE_SSE2_INTRINSICS +# define USE_TARGET_ATTRIBUTE +# endif +# endif +#endif + +#ifdef HAVE_SSE2_INTRINSICS +#ifdef HAVE_IMMINTRIN_H +#include +#else +#include +#endif +#endif /* HAVE_SSE2_INTRINSICS */ + #include #ifdef HAVE_VISIBILITY @@ -162,6 +192,41 @@ const char* zoh_get_description (int src_enum) ; SRC_STATE *zoh_state_new (int channels, SRC_ERROR *error) ; +/*---------------------------------------------------------- +** SIMD optimized math functions. +*/ + +#ifdef HAVE_SSE2_INTRINSICS +static inline int +#ifdef USE_TARGET_ATTRIBUTE +__attribute__((target("sse2"))) +#endif +psf_lrintf (float x) +{ + return _mm_cvtss_si32 (_mm_load_ss (&x)) ; +} +static inline int +#ifdef USE_TARGET_ATTRIBUTE +__attribute__((target("sse2"))) +#endif +psf_lrint (double x) +{ + return _mm_cvtsd_si32 (_mm_load_sd (&x)) ; +} + +#else + +static inline int psf_lrintf (float x) +{ + return lrintf (x) ; +} /* psf_lrintf */ + +static inline int psf_lrint (double x) +{ + return lrint (x) ; +} /* psf_lrint */ +#endif + /*---------------------------------------------------------- ** Common static inline functions. */ @@ -170,7 +235,7 @@ static inline double fmod_one (double x) { double res ; - res = x - lrint (x) ; + res = x - psf_lrint (x) ; if (res < 0.0) return res + 1.0 ; diff --git a/Source/libsamplerate/src/samplerate.c b/Source/libsamplerate/src/samplerate.c index 30dcbc97f..6a51f2794 100644 --- a/Source/libsamplerate/src/samplerate.c +++ b/Source/libsamplerate/src/samplerate.c @@ -445,7 +445,7 @@ src_float_to_short_array (const float *in, short *out, int len) else if (scaled_value <= -32768.f) out [i] = -32768 ; else - out [i] = (short) (lrintf (scaled_value)) ; + out [i] = (short) (psf_lrintf (scaled_value)) ; } } /* src_float_to_short_array */ @@ -477,7 +477,7 @@ src_float_to_int_array (const float *in, int *out, int len) continue ; } ; #endif - out [i] = (int) lrint (scaled_value) ; + out [i] = (int) psf_lrint (scaled_value) ; } ; } /* src_float_to_int_array */ diff --git a/Source/libsamplerate/src/src_linear.c b/Source/libsamplerate/src/src_linear.c index 11707d241..43a0fd40f 100644 --- a/Source/libsamplerate/src/src_linear.c +++ b/Source/libsamplerate/src/src_linear.c @@ -102,7 +102,7 @@ linear_vari_process (SRC_STATE *state, SRC_DATA *data) } ; rem = fmod_one (input_index) ; - priv->in_used += state->channels * lrint (input_index - rem) ; + priv->in_used += state->channels * psf_lrint (input_index - rem) ; input_index = rem ; /* Main processing loop. */ @@ -128,7 +128,7 @@ linear_vari_process (SRC_STATE *state, SRC_DATA *data) input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - priv->in_used += state->channels * lrint (input_index - rem) ; + priv->in_used += state->channels * psf_lrint (input_index - rem) ; input_index = rem ; } ; diff --git a/Source/libsamplerate/src/src_sinc.c b/Source/libsamplerate/src/src_sinc.c index 51e2997d3..716c4a40b 100644 --- a/Source/libsamplerate/src/src_sinc.c +++ b/Source/libsamplerate/src/src_sinc.c @@ -132,7 +132,7 @@ static SRC_STATE_VT sinc_mono_state_vt = static inline increment_t double_to_fp (double x) -{ return (increment_t) (lrint ((x) * FP_ONE)) ; +{ return (increment_t) (psf_lrint ((x) * FP_ONE)) ; } /* double_to_fp */ static inline increment_t @@ -240,7 +240,7 @@ sinc_filter_new (int converter_type, int channels) #endif } - priv->b_len = 3 * (int) lrint ((priv->coeff_half_len + 2.0) / priv->index_inc * SRC_MAX_RATIO + 1) ; + priv->b_len = 3 * (int) psf_lrint ((priv->coeff_half_len + 2.0) / priv->index_inc * SRC_MAX_RATIO + 1) ; priv->b_len = MAX (priv->b_len, 4096) ; priv->b_len *= channels ; priv->b_len += 1 ; // There is a <= check against samples_in_hand requiring a buffer bigger than the calculation above @@ -458,12 +458,12 @@ sinc_mono_vari_process (SRC_STATE *state, SRC_DATA *data) count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = state->channels * (int) (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -505,7 +505,7 @@ sinc_mono_vari_process (SRC_STATE *state, SRC_DATA *data) input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; @@ -614,12 +614,12 @@ sinc_stereo_vari_process (SRC_STATE *state, SRC_DATA *data) count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = state->channels * (int) (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -660,7 +660,7 @@ sinc_stereo_vari_process (SRC_STATE *state, SRC_DATA *data) input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; @@ -770,12 +770,12 @@ sinc_quad_vari_process (SRC_STATE *state, SRC_DATA *data) count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = state->channels * (int) (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -816,7 +816,7 @@ sinc_quad_vari_process (SRC_STATE *state, SRC_DATA *data) input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; @@ -925,12 +925,12 @@ sinc_hex_vari_process (SRC_STATE *state, SRC_DATA *data) count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = state->channels * (int) (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -971,7 +971,7 @@ sinc_hex_vari_process (SRC_STATE *state, SRC_DATA *data) input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; @@ -1090,12 +1090,12 @@ sinc_multichan_vari_process (SRC_STATE *state, SRC_DATA *data) count /= MIN (state->last_ratio, data->src_ratio) ; /* Maximum coefficientson either side of center point. */ - half_filter_chan_len = state->channels * (int) (lrint (count) + 1) ; + half_filter_chan_len = state->channels * (int) (psf_lrint (count) + 1) ; input_index = state->last_position ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; terminate = 1.0 / src_ratio + 1e-20 ; @@ -1136,7 +1136,7 @@ sinc_multichan_vari_process (SRC_STATE *state, SRC_DATA *data) input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - filter->b_current = (filter->b_current + state->channels * lrint (input_index - rem)) % filter->b_len ; + filter->b_current = (filter->b_current + state->channels * psf_lrint (input_index - rem)) % filter->b_len ; input_index = rem ; } ; diff --git a/Source/libsamplerate/src/src_zoh.c b/Source/libsamplerate/src/src_zoh.c index 4dba3d433..41ba79a1e 100644 --- a/Source/libsamplerate/src/src_zoh.c +++ b/Source/libsamplerate/src/src_zoh.c @@ -99,7 +99,7 @@ zoh_vari_process (SRC_STATE *state, SRC_DATA *data) } ; rem = fmod_one (input_index) ; - priv->in_used += state->channels * lrint (input_index - rem) ; + priv->in_used += state->channels * psf_lrint (input_index - rem) ; input_index = rem ; /* Main processing loop. */ @@ -117,7 +117,7 @@ zoh_vari_process (SRC_STATE *state, SRC_DATA *data) input_index += 1.0 / src_ratio ; rem = fmod_one (input_index) ; - priv->in_used += state->channels * lrint (input_index - rem) ; + priv->in_used += state->channels * psf_lrint (input_index - rem) ; input_index = rem ; } ; diff --git a/Source/libsamplerate/tests/CMakeLists.txt b/Source/libsamplerate/tests/CMakeLists.txt index f3fa87121..eefa60b33 100644 --- a/Source/libsamplerate/tests/CMakeLists.txt +++ b/Source/libsamplerate/tests/CMakeLists.txt @@ -8,7 +8,8 @@ check_symbol_exists(SIGALRM signal.h HAVE_SIGALRM) if((NOT VCPKG_TOOLCHAIN) AND PKG_CONFIG_FOUND AND (NOT CMAKE_VERSION VERSION_LESS 3.6)) pkg_check_modules(FFTW3 fftw3 IMPORTED_TARGET) if(FFTW3_FOUND) - add_library(FFTW3::fftw3 ALIAS PkgConfig::FFTW3) + add_library(FFTW3::fftw3 INTERFACE IMPORTED) + target_link_libraries(FFTW3::fftw3 INTERFACE PkgConfig::FFTW3) endif() else() find_package(FFTW3) diff --git a/Source/libsamplerate/tests/callback_test.c b/Source/libsamplerate/tests/callback_test.c index 79b1b75a2..c13d20617 100644 --- a/Source/libsamplerate/tests/callback_test.c +++ b/Source/libsamplerate/tests/callback_test.c @@ -197,7 +197,7 @@ end_of_stream_test (int converter) SRC_STATE *src_state ; double src_ratio = 0.3 ; - long read_count, read_total ; + long read_count ; int error ; printf ("\t%-30s ........... ", src_get_name (converter)) ; @@ -213,12 +213,10 @@ end_of_stream_test (int converter) exit (1) ; } ; - read_total = 0 ; do { /* We will be throwing away output data, so just grab as much as possible. */ read_count = ARRAY_LEN (output) / test_callback_data.channels ; read_count = src_callback_read (src_state, src_ratio, read_count, output) ; - read_total += read_count ; } while (read_count > 0) ; diff --git a/Source/libsamplerate/tests/reset_test.c b/Source/libsamplerate/tests/reset_test.c index 819236b9f..736f376db 100644 --- a/Source/libsamplerate/tests/reset_test.c +++ b/Source/libsamplerate/tests/reset_test.c @@ -99,7 +99,7 @@ process_reset_test (int converter) exit (1) ; } ; - /* Finally make sure that the output data is zero ie reset was sucessful. */ + /* Finally make sure that the output data is zero ie reset was successful. */ for (k = 0 ; k < BUFFER_LEN / 2 ; k++) if (output [k] != 0.0) { printf ("\n\nLine %d : output [%d] should be 0.0, is %f.\n", __LINE__, k, output [k]) ; @@ -216,7 +216,7 @@ callback_reset_test (int converter) exit (1) ; } ; - /* Finally make sure that the output data is zero ie reset was sucessful. */ + /* Finally make sure that the output data is zero ie reset was successful. */ for (k = 0 ; k < BUFFER_LEN / 2 ; k++) if (output [k] != 0.0) { printf ("\n\nLine %d : output [%d] should be 0.0, is %f.\n\n", __LINE__, k, output [k]) ; diff --git a/Source/libsamplerate/tests/util.c b/Source/libsamplerate/tests/util.c index 0e4a2337a..9b8c54c21 100644 --- a/Source/libsamplerate/tests/util.c +++ b/Source/libsamplerate/tests/util.c @@ -175,7 +175,7 @@ get_cpu_name (void) file = popen ("/usr/sbin/system_profiler -detailLevel full SPHardwareDataType", "r") ; search = "Processor Name" ; is_pipe = 1 ; -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD__) || defined (__OpenBSD__) file = popen ("sysctl -a", "r") ; search = "hw.model" ; is_pipe = 1 ; @@ -188,7 +188,7 @@ get_cpu_name (void) return name; #endif -#if defined (__linux__) || defined (__APPLE__) || defined (__FreeBSD__) +#if defined (__linux__) || defined (__APPLE__) || defined (__FreeBSD__) || defined (__OpenBSD__) if (search == NULL) { printf ("Error : search is NULL in function %s.\n", __func__) ; return name ; diff --git a/cmake/exe.cmake b/cmake/exe.cmake index 8c2a34adc..c53bb7bdc 100644 --- a/cmake/exe.cmake +++ b/cmake/exe.cmake @@ -367,6 +367,8 @@ add_executable(${exe} Source/InstrumentVRC7.cpp Source/InstrumentVRC7.h Source/IntRange.h + Source/JsonExporter.cpp + Source/JsonExporter.h Source/MainFrm.cpp Source/MainFrm.h Source/MIDI.cpp diff --git a/docs/changelog_format.md b/docs/changelog_format.md new file mode 100644 index 000000000..16fe4552a --- /dev/null +++ b/docs/changelog_format.md @@ -0,0 +1,18 @@ + +- Categories + - `Important changes:` + - summary of immediate and obvious changes to the program + - `Improvements:` + - additions and refactoring + - `Bug fixes:` + - any bug fixes + - `Internal:` + - meta changes, including changes regarding to the repository or CI +- Format + - ` ([issue_author] [commit_author] [#] [#])` + - only put in issue author and number if it exists + - only put one author if issue and commit author is the same + - sort by category, then by issue number, then by PR number + - ex: + - `Fix access violation in MRU submenu list update (@eugene-s-nesdev @Gumball2415 #243 #214)` + - `Pick song length mode when typing length time in WAV export dialog (@nyanpasu64 #346)` \ No newline at end of file diff --git a/docs/version_update.md b/docs/version_update.md index 6695748cb..d887b07ba 100644 --- a/docs/version_update.md +++ b/docs/version_update.md @@ -1,47 +1,19 @@ # Version Update Checklist +listing out things to do so i won't forget to do them -persune + - [ ] Update changelogs: - - [CHANGELOG.md](CHANGELOG.md), which will update [../Dn-Help/hlp/changelog_shell.htm](changelog_shell.htm) upon build - - Categories - - `Important changes:` - - summary of immediate and obvious changes to the program - - `Improvements:` - - additions and refactoring - - `Bug fixes:` - - any bug fixes - - `Internal:` - - meta changes, including changes regarding to the repository or CI - - Format - - ` ([issue_author] [commit_author] [#] [#])` - - only put in issue author and number if it exists - - only put one author if issue and commit author is the same - - sort by category, then by issue number, then by PR number - - ex: - - `Fix access violation in MRU submenu list update (@eugene-s-nesdev @Gumball2415 #243 #214)` -- [ ] Create Version Tag - - Format: `Dnx.y.z.b` - - x: Major (API change) - - y: Minor (backward compatible change) - - z: Patch (backward compatible bugfix) - - b: Build type (internal, not visible) - - 0: stable release - - 9: "dirty"/beta/in-development build - - Double check that this tag is higher than the previous release tag - - Version tag must be appropriate to Semantic Versioning -- [ ] Edit every file with version info:` - - [version.h](../version.h) - - [Dn-FamiTracker.rc](../Dn-FamiTracker.rc) gets its version constants from here - - [Readme.txt](../Readme.txt) -- [ ] **IMPORTANT**: update ConfigVersion.cpp + - [CHANGELOG.md](Dn-FamiTracker/CHANGELOG.md), which will update [../Dn-Help/hlp/changelog_shell.htm](changelog_shell.htm) upon build + - see [changelog format](changelog_format.md) - [ ] Update copyright years: - Update License years in - [LICENSE.md](../LICENSE.md) - [README.md](../README.md) - - Update all source files with copyright info: + - Update all edited source files with latest copyright info: ``` Dn-FamiTracker - NES/Famicom sound tracker -Copyright (C) 2020-2025 D.P.C.M. +Copyright (C) 2020-2026 D.P.C.M. FamiTracker Copyright (C) 2005-2020 Jonathan Liss 0CC-FamiTracker Copyright (C) 2014-2018 HertzDevil @@ -60,10 +32,26 @@ along with this program. If not, see https://www.gnu.org/licenses/. ``` - [ ] ***important***: set date of release at the last moment! +- [ ] Create Version Tag + - Format: `Dnx.y.z.b` + - x: Major (API change) + - y: Minor (backward compatible change) + - z: Patch (backward compatible bugfix) + - b: Build type (internal, not visible) + - 0: stable release + - 9: "dirty"/beta/in-development build + - Double check that this tag is higher than the previous release tag + - Version tag's first three digits must be appropriate to Semantic Versioning +- [ ] Edit every file with version info:` + - [version.h](../version.h) + - [Dn-FamiTracker.rc](../Dn-FamiTracker.rc) gets its version constants from here through a build script + - [Readme.txt](../Readme.txt) +- [ ] **IMPORTANT**: update ConfigVersion.cpp +- [ ] [Dn-help update](../Dn-help/version_update.md) - [ ] Create and push Version Tag to the repo - There is a GitHub Actions script to build a drafted release upon a tag push - Tag must be on commit deemed appropriate for release - [ ] Edit and publish the draft release page in GitHub - [ ] Triple check that the tag on the release matches the Version Tag (apart from the build type number) - [ ] Double check the build artifacts to be accurate and working -- [ ] Notify everyone about the new version \ No newline at end of file +- [ ] Notify everyone about the new version diff --git a/cmake/compile-chm.bat b/generate-helpmap.bat similarity index 60% rename from cmake/compile-chm.bat rename to generate-helpmap.bat index 70f965fc5..94f5a7c11 100644 --- a/cmake/compile-chm.bat +++ b/generate-helpmap.bat @@ -1,6 +1,3 @@ -rem call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 -@echo off -powershell -Command "(Get-Content Dn-help\hlp\changelog_shell.htm).Replace('', (pandoc docs/CHANGELOG.md -f gfm -t html5)) | Set-Content -encoding UTF8 Dn-help\hlp\changelog.htm" echo // Generated Help Map file. Used by Dn-FamiTracker.hhp. > "Dn-help\hlp\HTMLDefines.h" echo. > "Dn-help\hlp\HTMLDefines.h" echo // Commands (ID_* and IDM_*) >> "Dn-help\hlp\HTMLDefines.h" @@ -17,12 +14,3 @@ makehm /h IDD_,HIDD_,0x20000 "resource.h" >> "Dn-help\hlp\HTMLDefines.h" echo. >> "Dn-help\hlp\HTMLDefines.h" echo // Frame Controls (IDW_*) >> "Dn-help\hlp\HTMLDefines.h" makehm /h /a "afxhh.h" IDW_,HIDW_,0x50000 "resource.h" >> "Dn-help\hlp\HTMLDefines.h" -start /wait hhc "Dn-help\hlp\Dn-FamiTracker.hhp" -if not exist "Dn-help\hlp\Dn-FamiTracker.chm" goto :HelpError -move "Dn-help\hlp\Dn-FamiTracker.chm" "Dn-FamiTracker.chm" -goto :HelpDone -:HelpError -echo Dn-help\hlp\Dn-FamiTracker.hhp(1) : error:Problem encountered creating help file -echo. -:HelpDone -echo. \ No newline at end of file diff --git a/release.bat b/release.bat index f3cdc0297..56e9931ad 100644 --- a/release.bat +++ b/release.bat @@ -17,7 +17,7 @@ goto endfile if "%~3"=="" goto compileversion cd %2/%1/ -call 7z a -t7z -mx=9 -mmt=3 -m0=LZMA2:d=26:fb=128 -ms=on ..\..\distribute\Dn-FamiTracker_"%~3"_"%~2"_"%~1".7z Dn-FamiTracker.exe Dn-FamiTracker.chm Dn-FamiTracker.pdb vc143.pdb ..\..\docs\CHANGELOG.md ..\..\demo ..\..\Readme.txt ..\..\LICENSE.md ..\..\LICENSE-GPLv2.txt ..\..\LICENSE-GPLv3.txt +call 7z a -t7z -mx=9 -mmt=3 -m0=LZMA2:d=26:fb=128 -ms=on ..\..\distribute\Dn-FamiTracker_"%~3"_"%~2"_"%~1".7z Dn-FamiTracker.exe Dn-FamiTracker.chm Dn-FamiTracker.pdb vc143.pdb ..\..\CHANGELOG.md ..\..\demo ..\..\Readme.txt ..\..\LICENSE.md ..\..\LICENSE-GPLv2.txt ..\..\LICENSE-GPLv3.txt cd ..\.. goto endfile @@ -32,6 +32,6 @@ for /F "tokens=1,2,3,4,5 delims=, " %%A in (Dn-FamiTracker.rc) do ( ) ) cd %2/%1/ -call 7z a -t7z -mx=9 -mmt=3 -m0=LZMA2:d=26:fb=128 -ms=on ..\..\distribute\Dn-FamiTracker_%version%_"%~2"_"%~1".7z Dn-FamiTracker.exe Dn-FamiTracker.chm Dn-FamiTracker.pdb vc143.pdb ..\..\docs\CHANGELOG.md ..\..\demo ..\..\Readme.txt ..\..\LICENSE.md ..\..\LICENSE-GPLv2.txt ..\..\LICENSE-GPLv3.txt +call 7z a -t7z -mx=9 -mmt=3 -m0=LZMA2:d=26:fb=128 -ms=on ..\..\distribute\Dn-FamiTracker_%version%_"%~2"_"%~1".7z Dn-FamiTracker.exe Dn-FamiTracker.chm Dn-FamiTracker.pdb vc143.pdb ..\..\CHANGELOG.md ..\..\demo ..\..\Readme.txt ..\..\LICENSE.md ..\..\LICENSE-GPLv2.txt ..\..\LICENSE-GPLv3.txt cd ..\.. :endfile