Commit graph

10093 commits

Author SHA1 Message Date
tildearrow 8f54445625 GA20: acquireDirect optimizations, part 1
buggy, slow and glitchy
output is good but chan osc is now broken

from 1.5 to 0.4 seconds
2025-03-02 20:29:28 -05:00
tildearrow 2c75555fae GA20: excellent... 2025-03-02 19:34:52 -05:00
tildearrow f13824525a MORE NOTES FOR NEW OSC BUFFER API
in your init or setFlags function,
instead of `oscBuf[i]->rate=rate;` do `oscBuf[i]->setRate(rate)`. this is necessary as it sets the appropriate needle multiplier for it to remain 65536Hz.

if your dispatch submits to the osc buffers at a slower rate (check out nes.cpp for an example), do not divide the rate anymore. it will work regardless.

this ends the notes (hopefully)
2025-03-02 18:56:11 -05:00
tildearrow cf86b9ab9a Merge branch 'newChanOsc' - read for info
copy-paste from Discord

the new DivDispatch::acquireDirect() function allows optimizing emulation cores by only rendering what is needed (such as state changes in PC Speaker).
it gives DivDispatch direct access to blip_buf structures in order to allow that.

however, this requires changes to the chan osc buffer API since we're not gonna fill entire bufs anymore with acquireDirect

the accommodations consist of:
- new functions to fill a chan osc buffer
- the sample `-1` means "no changes" (don't worry, the new funcs will handle this for you), and
- all chan osc bufs now run at 65536Hz (as opposed to a rate defined by the dispatch). this also avoids buffer overruns and maybe glitches when audio buf size is too large.

if you've been working on a DivDispatch (in other words, a new chip or system), make sure to adapt your code to the new API. here are some guidelines:
1. in your acquire() function, call begin(len) of all DivDispatchOscBuffers before you run emu code and fill the out buffer.
2. replace `oscBuf[]->data[oscBuf[]->needle++]=val` with `oscBuf[]->putSample(h,val)`. `h` is the position of the buffer iterator (e.g. in the `for (size_t h=0; h<len; h++)` function). yes, this API is positional...
3. after emulation code runs and you fill the out buf (including all osc bufs), call end(len). this will advance the needle and all.

here's some sample code.

```
int DivPlatformDango::acquire(short** buf, size_t len) {
  for (size_t h=0; h<len; h++) {
    buf[0][h]=dango.tick();
    for (int i=0; i<16; i++) {
      oscBuf[i]->data[oscBuf[i]->needle++]=dango.getChOut(i);
    }
  }
}
```

```
int DivPlatformDango::acquire(short** buf, size_t len) {
  for (int i=0; i<16; i++) {
    oscBuf[i]->begin(len);
  }
  for (size_t h=0; h<len; h++) {
    buf[0][h]=dango.tick();
    for (int i=0; i<16; i++) {
      oscBuf[i]->putSample(h,dango.getChOut(i));
    }
  }
  for (int i=0; i<16; i++) {
    oscBuf[i]->end(len);
  }
}
```

thanks and sorry for any trouble this may cause
i kept running into the character limit
2025-03-02 18:52:01 -05:00
tildearrow 6813c30e3a new chan osc, part 8
fix remaining bugs
2025-03-02 18:02:38 -05:00
tildearrow 49a8693dcb new chan osc, part 7
i am done
2025-03-02 16:14:49 -05:00
tildearrow 6265d2cd39 new chan osc, part 6
more adaptations

how can I get you out of my head... I want to go back to work!
2025-03-02 04:11:10 -05:00
tildearrow fe00ee805d new chan osc, part 5
fix C64 rate
2025-03-01 19:57:16 -05:00
tildearrow a16d20e190 new chan osc, part 4
adapt dispatch code to it
2025-03-01 19:49:56 -05:00
tildearrow c0e4552c52 new chan osc, part 3
fix the jerkiness!
2025-03-01 18:46:11 -05:00
tildearrow 10e60ec8c1 new chan osc, part 2
why is it jerky?
2025-03-01 17:22:34 -05:00
tildearrow 6dc4f16689 GUI: add an audio load chart 2025-03-01 06:10:59 -05:00
tildearrow dd7e1def3d new chan osc work in progress 2025-03-01 05:05:50 -05:00
tildearrow 0eea0ec139 a new method for setting chan osc rate... 2025-03-01 00:33:15 -05:00
LionHeartChiptuner 8bfb174b4f
2 Demos (#2390)
* Add files via upload

* Delete demos/c64/UnreeealSuperhero3.fur
2025-03-01 00:07:58 -05:00
tildearrow c83ecfe993 prepare new chan osc code
chan osc output will be 65536Hz - always
new functions for initializing the osc buffer and all
2025-02-26 20:29:13 -05:00
tildearrow e94d99d79e PC Speaker: fix it 2025-02-26 15:45:26 -05:00
tildearrow d935d3c6d1 acquireDirect proof of concept
extremely low CPU usage in PC Speaker

WARNING! no per-chan osc yet!
2025-02-25 19:58:25 -05:00
tildearrow 4502fa6912 FIX BUILD FAILURE 2025-02-25 18:56:04 -05:00
tildearrow 4b1e883d1b PC speaker: prepare for acquireDirect 2025-02-25 18:53:02 -05:00
tildearrow 231819da2e Revert "Revert "prepare acquireDirect API" - stupid crap"
thought of an idea for optimization. let's try again.

This reverts commit 4ca7033dec.
2025-02-25 18:45:28 -05:00
tildearrow 8d8e51d36a disable 32-bit float audio export in per-chip mode
issue #2389
2025-02-25 15:34:36 -05:00
trademarkedpatty d4bd649fa0
Fix of "Entry"'s Credits and New Demo (Into The Light, QSound) (#2388) 2025-02-23 22:53:14 -05:00
Eknous-P a7e9b26957 how could i forget 2025-02-23 04:50:06 -05:00
Eknous-P 4bf8b98fe8 last updates to my demos
- remove genesis demo
- remove cover demo
- remove esfm demo and add its instruments instead
- add licensing to my remaining demos
2025-02-23 04:50:06 -05:00
tildearrow 81ed5b69c9 update es.po 2025-02-23 00:40:51 -05:00
tildearrow 7d0ef24574 GUI: use three hashes
it wasn't two...
2025-02-22 20:25:42 -05:00
tildearrow f674a38d8e GUI: optimize pattern view
don't render what isn't visible
from 3.5ms to 2ms in my phone

to-do: check for regressions...
2025-02-22 19:57:53 -05:00
tildearrow dd9983778b GUI: selection/scroll improvements
now you can scroll left/right by dragging selection to the side edges
2025-02-22 18:43:46 -05:00
tildearrow f59cb23d9b new strings for translation! 2025-02-22 16:08:35 -05:00
tildearrow 1dd65e413c sostén -> sostener 2025-02-22 16:04:47 -05:00
thacuber2a03 084bf79c8f strings 2025-02-22 16:03:55 -05:00
tildearrow f4d357ff6f GUI: update credits 2025-02-22 15:55:04 -05:00
tildearrow 6852cf9616 merge ko.po
pull request #2368

co-authored-by Nicknamé
2025-02-22 15:53:57 -05:00
tildearrow 1c38f54e3f Merge branch 'master' of github.com:tildearrow/furnace 2025-02-22 15:46:07 -05:00
tildearrow 69f13e7998 Merge remote-tracking branch 'Nickname29216 PART 1 2025-02-22 15:44:17 -05:00
techmetx11 18c5d80a09 Use more .getPattern() 2025-02-22 15:18:23 -05:00
techmetx11 27a1914924 Use .getPattern() 2025-02-22 15:18:23 -05:00
techmetx11 56937d8f05 Fix naming 2025-02-22 15:18:23 -05:00
techmetx11 308aacc1e6 Implement looping in TFM import 2025-02-22 15:18:23 -05:00
tildearrow c02e80a269 make Furnace build using CMake 4.0 2025-02-22 14:54:11 -05:00
tildearrow 165b814f5d desubmodulize portaudio - PLEASE READ
this is necessary in order to get Furnace to build using CMake 4.0.

you should do:

git submodule deinit extern/portaudio
2025-02-22 14:47:45 -05:00
LTVA1 c58a7cba20 Update sid3.c 2025-02-22 14:45:09 -05:00
tildearrow a80cdbb1dd ES5506: increase precision in Amiga pitch mode
issue #2120
2025-02-22 01:32:31 -05:00
tildearrow c5576ebcd2 PCE: fix sample linger in VGM export
issue #2322
2025-02-21 19:41:48 -05:00
tildearrow 9af53cac73 PCE: fix sample volume in VGM export
issue #2319
2025-02-21 19:35:29 -05:00
tildearrow 41d3dcde66 Virtual Boy: handle phase reset first 2025-02-21 18:58:58 -05:00
tildearrow 0b1e90b908 Virtual Boy: disable channel 5 when changing mod t
able
2025-02-21 18:50:00 -05:00
tildearrow cfb962236a WaveSynth: add change detection
don't update wave if it is intact
issue #2298
2025-02-21 17:25:05 -05:00
tildearrow 8c67ea8eb9 GUI: load fallback fonts in pattern font...
issue #2312
2025-02-21 16:58:59 -05:00