Commit Graph

102 Commits

Author SHA1 Message Date
Veikko Sariola
af14cd310b Change .asm files that are actually only ever included into .inc-files, and rename all files as _header.inc & _footer.inc, depending where they are included. 2020-10-21 11:01:09 +03:00
Veikko Sariola
7e3dc19c83 Add inverse gain to compressor. The inverse gain is applied to the signal before any compressor calculations. 2020-05-27 18:54:37 +03:00
Veikko Sariola
c5b6e6e28c Move su_load_gmdls into the responsibility of the intro to call, anticipating multicore rendering so it is called once before all the cores are spun up. 2020-05-27 18:54:34 +03:00
Veikko
5e05057240 Fix builds and tests to pass on Linux.
Builds on both 32-bit and 64-bit executables and all tests (except gm.dls stuff obviously, which was excluded) pass on 64-bit Linux. Cannot test the 32-bit executables, as WSL does not support running 32-bit.
2020-05-27 10:54:37 +03:00
Veikko Sariola
e049bf2dce Change loadnote to load values from [-1,1], to allow using notes for both positive and negative modulations.
Also change SPEED to take this change into account.
2020-05-26 19:21:35 +03:00
Veikko Sariola
91b8912015 Rename all SU_BEGIN_* macros into BEGIN_*; there's no real risk of nameclash and makes the code more readable. 2020-05-26 17:45:37 +03:00
Veikko Sariola
efc6db71ab Reverse the logic of USE_SECTIONS (it's now DISABLE_SECTIONS) and then remove unnecessary defines. 2020-05-26 17:30:50 +03:00
Veikko Sariola
dac5afea60 Implement IN, OUTAUX and AUX opcodes, to conveniently input from or output to global ports. 2020-05-25 23:23:24 +03:00
Veikko Sariola
6f06306f0c Re-engineer delay, to use stack for the delay WRK pointer and to support note-syncing transpose. 2020-05-23 15:05:38 +03:00
Veikko Sariola
654e5868bc Implement support for 64-bit builds.
The implentation is through a few macros to handle the fact in 64-bit, all addresses have to be loaded first to register and only offsets are ok. Also, push only supports 64-bit registers in 64-bit, so we have _AX, _BX, _CX etc. defines, which are eax, ebx and ecx on 32bit and rax, rbx and rcx on 64bit.
2020-05-21 17:18:18 +03:00
Veikko Sariola
dc99157fbb Implement unison oscillators: multiple versions of slightly detuned oscillators that are added up to make a signal. 2020-05-19 22:52:21 +03:00
Veikko Sariola
adc4a6e45f Implement sample-based oscillators, with sample import from gm.dls. 2020-05-19 18:29:47 +03:00
Veikko Sariola
fc0ad4c011 Implement compressor. 2020-05-17 16:37:08 +03:00
Veikko Sariola
71a5a18257 Implement player speed modulation opcode for triplets and such. 2020-05-17 09:51:20 +03:00
Veikko Sariola
15717557f1 Split polyphony test into two tests. 2020-05-17 08:32:35 +03:00
Veikko Sariola
d87d2e22cf Implement new effect: bit-crusher.
Maybe a combined hold/bit-crusher effect is needed someday.
2020-05-16 23:27:29 +03:00
Veikko Sariola
ac5b4dd496 Make clip opcode working and add regression tests to it. 2020-05-16 22:49:59 +03:00
Veikko Sariola
5760f78201 Implement gain and inverse gain effects, for the moments when you just need them. 2020-05-16 22:29:08 +03:00
Veikko Sariola
87264c443c Add tests for opcode stereo variants, squashing several bugs in the process. Implement receive opcode to test stereo sending. 2020-05-16 21:23:41 +03:00
Veikko Sariola
f9388b028a Rename test files to represent better the new opcodes they correspond to. 2020-05-16 18:32:56 +03:00
Veikko Sariola
42ebc52c96 Remove trailing spaces and convert tabs to spaces. 2020-05-16 09:16:23 +03:00
Veikko Sariola
78d4cd50e8 Rewrote most of the synth to better support stereo signals and polyphony. VSTi removed as there is no plan to update the VSTi to support the new features.
The stereo opcode variants have bit 1 of the command stream set. The polyphony is split into two parts: 1) polyphony, meaning that voices reuse the same opcodes; 2) multitrack voices, meaning that a track triggers more than voice. They both can be flexible defined in any combinations: for example voice 1 and 2 can be triggered by track 1 and use instrument 1, and voice 3 by track 2/instrument 2 and voice 4 by track 3/instrument 2. This is achieved through the use of bitmasks: in the aforementioned example, bit 1 of su_voicetrack_bitmask would be set, meaning "the voice after voice #1 will be triggered by the same track". On the other hand, bits 1 and 3 of su_polyphony_bitmask would be set to indicate that "the voices after #1 and #3 will reuse the same instruments".
2020-05-16 08:25:52 +03:00
Veikko Sariola
6be7959cd1 Refactor the waveshaper function to save some bytes. 2020-05-03 17:02:08 +03:00
Veikko Sariola
212951c75d Make tests rebuild when 4klang.asm and 4klang.inc are changed. 2020-05-03 12:50:42 +03:00
Veikko Sariola
9546574f13 Add regression test for AUX output. 2020-05-03 11:21:09 +03:00
Veikko Sariola
53a1be9b61 Refactor all values to have a universal support for modulations.
The modulation is now always added during value transformation.
With this, a lot of *_MOD defines could be removed.
The waveform for some tests changed slightly, because when the
value is saved to memory after modulating it, there is some
rounding errors.
2020-05-03 10:41:24 +03:00
Veikko Sariola
660da68a48 Add regression test for polyphony (MAX_VOICES = 2). 2020-05-01 08:51:43 +03:00
Veikko Sariola
f97cea2a17 Refactor 4klang to use cross-platform defines and 4klang.asm & .inc to work more like .c and .h. 2020-04-30 13:36:22 +03:00
Veikko Sariola
09c497fef6 Add regression tests for delay modulations. 2020-04-25 11:29:14 +03:00
Veikko Sariola
7170b049d3 Add regression tests for VCF opcode and its modulations. 2020-04-24 22:51:42 +03:00
Veikko Sariola
4b9b1710eb Add regression tests for delay (DLL) opcode. 2020-04-23 20:06:41 +03:00
Veikko Sariola
a49fba060c Add regression tests for distortion, including sample-and-hold and modulations. 2020-04-18 21:21:21 +03:00
Veikko Sariola
41222b09a7 Move all raw audio files related to tests into subfolders, to have slightly more clean folder structure and to avoid mixing source files and data files. 2020-04-18 19:47:16 +03:00
Veikko Sariola
886ee85a09 Improve CMakeLists.txt for tests, so it is easier to define test prerequirements.
Also added a few missing prerequirements.
2020-04-18 13:16:33 +03:00
Veikko Sariola
d9f4def1d4 Add regression tests for vco modulations (cm, dm, fm, gm, pm, sm and tm) 2020-04-17 19:36:09 +03:00
Veikko Sariola
cc2babde9c Add regression test for envelope modulation. 2020-04-17 18:21:37 +03:00
Veikko Sariola
462521518f Add regression tests for FST and FSTG opcodes. 2020-04-16 22:05:50 +03:00
Veikko Sariola
9c7db45a46 Rewrote parts of the test renderer to read the whole data from disk in one fread. 2020-04-16 14:05:17 +03:00
Veikko Sariola
374be5256e Add regression test for VCO opcode, lfo variant. 2020-04-16 13:37:30 +03:00
Veikko Sariola
83e3ab165e Add test for 16-bit output, also moving the testname for test_renderer into compiler definition to avoid rewriting it everytime. 2020-04-15 23:17:03 +03:00
Veikko Sariola
cff4538b8c Make the CMakeLists.txt for the tests a slightly more sensible; the data files are copied after every build if they are newer. 2020-04-15 21:43:22 +03:00
Veikko Sariola
d6798bdae3 Add regression test for VCO opcode (oscillator) for testing stereo sound creation. 2020-04-14 23:37:15 +03:00
Veikko Sariola
34a98ebc4a Add regression test for VCO opcode (oscillator): gate, noise, pulse and trisaw variants. 2020-04-14 23:11:10 +03:00
Veikko Sariola
38499e01bb Add regression test for VCO opcode (oscillator), sine wave variant. 2020-04-14 22:23:09 +03:00
Veikko Sariola
ce81ef5ef9 Add regression test for FOP opcode, loadnote variant. 2020-04-14 21:44:05 +03:00
Veikko Sariola
398543d67c Add regression tests for FOP opcode: add, addp2, mul, mulp2, push and xchg variants. 2020-04-14 18:08:57 +03:00
Veikko Sariola
e790549d27 Add regression test to test fop opcode / addp, mulp and pop variants. 2020-04-13 19:10:46 +03:00
Veikko Sariola
08518a9527 Add regression test to test multiple instruments. 2020-04-13 17:50:09 +03:00
Veikko Sariola
b1ba5e9e6b Add regression test to test panning opcode. 2020-04-13 17:34:46 +03:00
Veikko Sariola
f33da76d1e Add regression test to test load opcode. 2020-04-13 17:18:26 +03:00
Veikko Sariola
1f0fdfc30e Improve and rename envelope test. The test focuses on GO4k_ENV opcode only and does not use panning. 2020-04-13 16:53:11 +03:00
Veikko Sariola
8d984cbc38 Implement ctest unit test, first test simply testing that envelope works as it used to. 2020-04-12 22:05:39 +03:00