Commit graph

10706 commits

Author SHA1 Message Date
tildearrow
ff1aad8959 limit the maximum speed
too high and it will never seek
2025-11-21 20:16:07 -05:00
tildearrow
de0a4e652a add button to access macro menu on mobile 2025-11-21 16:42:00 -05:00
Eknous-P
f61f9efccf chan color in sys manager 2025-11-21 23:17:33 +04:00
Eknous-P
1d331f451c compiler warning paranoia 2025-11-21 22:58:14 +04:00
tildearrow
6ad8a0893b dev240 - Merge branch 'inf2' - READ
this introduces several major changes to Furnace. I hope this message explains everything.

**File Format Changes**

a new song info header (`INF2`) has been introduced, which:
- cleans up the mess I made when adding sub-songs to Furnace
- allows better forward compatibility and extensibility
- uses 16-bit chip IDs
- moves compatibility flags to another block and is stored as a DivConfig
- stores channel count in the file, allowing chips with dynamic channel count (e.g. Namco 163)

a new sub-song data block has been introduced as well.

check out papers/format.md for information.

**Furnace Changes**

TimeBase ("Divider" in the UI) has been REMOVED. it was a DefleMask leftover.
to compensate, the speeds are now 16-bit. older songs will have their speeds converted, but this may fail if you use grooves or change speed mid-song.

dynamic channel count support has been added. the following chips are currently supported:
- Namco 163 (1-8 channels)
- ES5506 (5-32 channels)
- Generic PCM DAC (1-128 channels, with software mixing!)

channel colors have been added (thanks Eknous!).

SegaPCM (compatible 5-channel mode) and Neo Geo CD have been REMOVED. when loading previous files, including .dmf ones, these will have compatible SegaPCM and Neo Geo CD chips converted to normal SegaPCM and YM2610 respectively.
their channel count remains unaltered though. you can fix this by going into the chip manager and clicking the button next to "irregular channel count" in each chip config section.

**Code Changes**

a couple refactors have been made for the sake of code cleanliness and depending less on DivEngine...

=> Chip Channel Count

two new values, adjacent to the channel count, have been added to DivSysDef.
these specify the minimum and maximum channel count for a chip.

if your chip doesn't require dynamic channels, feel free to set these to the channel count.

for example, here's an old definition:

```
sysDefs[DIV_SYSTEM_NES]=new DivSysDef(
  _("NES (Ricoh 2A03)"), NULL, 0x06, 0x06, 5 /* channel count*/, false, true, 0x161, false, (1U<<DIV_SAMPLE_DEPTH_1BIT_DPCM)|(1U<<DIV_SAMPLE_DEPTH_8BIT), 0, 0,
  ...
```

and here's how it looks now:

```
sysDefs[DIV_SYSTEM_NES]=new DivSysDef(
  _("NES (Ricoh 2A03)"), NULL, 0x06, 0x06, 5 /* nominal channel count*/, 5 /* min channels */, 5 /* max channels */,
  false, true, 0x161, false, (1U<<DIV_SAMPLE_DEPTH_1BIT_DPCM)|(1U<<DIV_SAMPLE_DEPTH_8BIT), 0, 0,
  ...
```

=> New Channel Definition

a new way to define chip channels has been introduced, replacing the old one.
it looks cleaner and is more flexible (even supporting dynamic channel count).

it works by defining a function in the chip definition, which returns a DivChanDef with channel information (name, short name, type and instrument type(s)).
alternatively, a list can be provided in the DivChanDefFunc() constructor, in the event channels differ greatly and/or the number of channels is small.
for example, if your chip's channel definition code looked like this:

```
{_("Pulse 1"), _("Pulse 2"), _("Triangle"), _("Noise"), _("DPCM")}, // names
{"S1", "S2", "TR", "NO", "DMC"}, // short names
{DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_WAVE, DIV_CH_NOISE, DIV_CH_PCM}, // types
{DIV_INS_NES, DIV_INS_NES, DIV_INS_NES, DIV_INS_NES, DIV_INS_NES}, // ins types
{DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_AMIGA}, // secondary ins types
```

now they look like this:

```
DivChanDefFunc({
  DivChanDef(_("Pulse 1") , "S1" , DIV_CH_PULSE, DIV_INS_NES),
  DivChanDef(_("Pulse 2") , "S2" , DIV_CH_PULSE, DIV_INS_NES),
  DivChanDef(_("Triangle"), "TR" , DIV_CH_WAVE , DIV_INS_NES),
  DivChanDef(_("Noise")   , "NO" , DIV_CH_NOISE, DIV_INS_NES),
  DivChanDef(_("DPCM")    , "DMC", DIV_CH_PCM  , DIV_INS_NES, DIV_INS_AMIGA)
}),
```

some helper templates, such as stockChanDef and simpleChanDef also exist, which automatically map channel names and types regardless of count.
this is useful if all your channels happen to be named "Channel 1", "Channel 2" and so on, while sharing the same type and instrument type (this is the case for many sampler chips).

if you've been working on a custom chip, make sure to adapt your chip definitions.

=> More Chip Definition Changes

the DivSystem enum is now in src/engine/sysDef.h

channel definitions are cached in the DivSong.

=> Reducing Dependency on DivEngine

many functions have been moved away from DivEngine where possible. these include:

- recalcChans() (now on DivSong)
  - chans, sysOfChan, dispatchOfChan, dispatchChanOfChan and dispatchFirstChan have been moved to DivSong as well.
- asset dir storage/modification/check finctions (now on src/engine/assetDir.cpp)
- DivEngine::getSystemDef() is now a static function, so it can be called without a DivEngine (engine still has to initialize systems first!)

IMPORTANT: hasLoadedSomething is no longer set in recalcChans() because it is part of DivEngine. if you have import code, MAKE SURE TO SET hasLoadedSomething TO true AFTER SWITCHING THE SONG (song=ds).

=> Dynamic Channel Count

a new array called systemChans[] has been added to DivSong, allowing you to define the number of channels for each chip.
if you change this, make sure to call recalcChans() afterwards.

if you use dispatchChanOfChan[], treat `-1` as "no channel". this is set when the channel count is higher than the chip's maximum.

if you're working on import code, and are certain you won't use dynamic channel count, call DivSong::initDefaultSystemChans() before recalcChans(). this will set up default channel counts for you.
otherwise, set systemChans[] appropriately.
2025-11-21 11:26:27 -05:00
tildearrow
f4bd61df41 fix the doc 2025-11-21 11:14:24 -05:00
tildearrow
c3394594a6 giga-refactor, part 21
store channel colors!
2025-11-21 11:08:13 -05:00
tildearrow
fea3bab550 Merge branch 'chanColorsEtc' into inf2 2025-11-21 10:51:44 -05:00
tildearrow
1882a4f12d consider channel color for the rest of functions 2025-11-21 10:51:03 -05:00
tildearrow
47e2910498 giga-refactor, part 20
convert compat SegaPCM to normal SegaPCM with 5 channels
convert Neo Geo CD to YM2610
2025-11-21 04:58:56 -05:00
Eknous-P
62afabbc0b GBA DMA: initalize wtMem to 0 on reset 2025-11-21 13:09:38 +04:00
tildearrow
26993d2b40 giga-refactor, part 19
fix Namco 163 stuff
2025-11-19 19:35:18 -05:00
Electric Keet
80e51d9b99 Updated FAQ and formats docs.
Hooray for more audio export formats!
2025-11-19 19:17:11 -05:00
Electric Keet
ba84c60034 Revisions to doc updates. 2025-11-19 19:17:11 -05:00
Electric Keet
f8872b9386 Updated mixer image for new default. 2025-11-19 19:17:11 -05:00
Electric Keet
ad38e7cdfe Documentation updates.
My, an awful lot has changed!
2025-11-19 19:17:11 -05:00
tildearrow
5f2c309abd IT/S3M/XM import: use systemChans 2025-11-19 19:00:39 -05:00
Eknous-P
0d396d4416 fix sample list right click, again
pls dont crash...
2025-11-19 17:07:22 +04:00
tildearrow
f1a3295a78 giga-refactor, part 18
ES5506 and Namco 163 channel count improvements
2025-11-19 05:20:32 -05:00
Eknous-P
afb9b07f3b join the vectors into one 2025-11-19 14:05:00 +04:00
tildearrow
caea061cbb giga-refactor, part 17
don't clear chip flags when changing channel count
2025-11-19 01:47:14 -05:00
tildearrow
24aa37c66f ...... 2025-11-19 01:26:18 -05:00
tildearrow
bdd916a4c7 PCM DAC: fix mixing 2025-11-18 15:40:53 -05:00
tildearrow
42538049fe fix MPT pasting! 2025-11-18 13:57:08 -05:00
tildearrow
d437ab4c22 MPT paste debug 2025-11-18 13:51:15 -05:00
tildearrow
5032394507 giga-refactor, part 16
fix ds.chans not being set when loading old .fur
2025-11-18 03:27:37 -05:00
tildearrow
8f7fd0a229 Merge branch 'master' into inf2 2025-11-18 03:12:11 -05:00
tildearrow
32dacdcd65 fix refPlayer cue input time error false positive 2025-11-18 03:09:22 -05:00
tildearrow
907ad14a98 GUI: fix note deletion deleting volume
instead of instrument
2025-11-18 02:55:11 -05:00
tildearrow
0bae94ad2c fix certain issues with TimeMicros 2025-11-18 02:51:20 -05:00
tildearrow
93f2e638cc GUI: fix macro editor duplicate Selectable ID
in list view
2025-11-18 01:27:28 -05:00
tildearrow
8138a3c252 fix legacy sample conversion for Y8950 2025-11-18 01:19:56 -05:00
tildearrow
cb72e3e46f fix DIV_PAT_IS_EFFECT 2025-11-17 23:53:20 -05:00
tildearrow
1a113a4d52 giga-refactor, part 15
dynamic PCM DAC
2025-11-17 21:09:43 -05:00
tildearrow
9b35ca77c5 giga-refactor, part 14 - READ
a new way to define chip channels has been introduced, replacing the old one.
it looks cleaner and is more flexible (even supporting dynamic channel count).

it works by defining a function in the chip definition, which returns a DivChanDef with channel information (name, short name, type and instrument type(s)).
alternatively, a list can be provided in the DivChanDefFunc() constructor, in the event channels differ greatly and/or the number of channels is small.

some helper templates, such as stockChanDef and simpleChanDef also exist, which automatically map channel names and types regardless of count.
2025-11-17 19:38:45 -05:00
tildearrow
8497024079 GUI: speeds should be unsigned short 2025-11-16 20:24:27 -05:00
tildearrow
96152f90f3 don't allow going out of bounds 2025-11-16 20:06:34 -05:00
tildearrow
06c698e054 don't show channel selector on unsupported chip 2025-11-16 17:33:26 -05:00
tildearrow
f6d0979209 don't allow chip channel count to be set to 0 2025-11-16 17:05:43 -05:00
tildearrow
663f32d9d4 giga-refactor, part 13
get rid of time base
2025-11-16 15:45:24 -05:00
tildearrow
334d8708e2 giga-refactor, part 12
loading works
2025-11-16 07:13:30 -05:00
tildearrow
94044ef210 giga-refactor, part 1
work on loading - NOT WORKING
2025-11-16 05:42:47 -05:00
tildearrow
dc0eda0445 giga-refactor, part 10
fix saving
2025-11-16 02:59:02 -05:00
Eknous-P
14fd246edb improve chanosc note text and chan volume feedback 2025-11-16 11:15:21 +04:00
tildearrow
90a9a86e09 giga-refactor, part 9
new format saving
compatibility flags now part of own struct
2025-11-16 01:41:17 -05:00
tildearrow
9b3e6cea5b giga-refactor, part 8
allow setting channel count
2025-11-15 10:00:17 -05:00
tildearrow
7bb770ad01 giga-refactor, part 7 2025-11-15 05:09:11 -05:00
tildearrow
a1bca68e4a asgfdlhjkashdjfl 2025-11-15 03:00:40 -05:00
Eknous-P
f93dd893c8 chan color in piano and real volume chan feedback (w/ gamma correction)
now i can recreate the bee video! :>
2025-11-14 18:37:23 +04:00
Eknous-P
205df7adb3 fix mixer layout default value
oops
2025-11-14 12:58:27 +04:00