Veikko Sariola
e0a793ea6d
Reorganize the project folder structure and how go packages are organized.
...
Sointu.asm / lib stuff lives at the root folder. There is a folder called "go4k", which is where
all go stuff lives. Following the ideas from https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1
the go4k folder is the "domain-model" of the go side, and should have no dependencies.
It contains Unit, Instrument, Synth interface etc. Putting go4k under a sub-folder is actually
in the spirit of Ben, as go4k adds dependency to the go language.
Bridge ties the domain-model to the sointulib through cgo. It returns C.Synth, but
makes sure the C.Synth implements the Synth interface, so others are able to use the
Synth no matter how it actually is done. MockSynth and WebProxy synth are good
prospects for other implementations of Synth.
It is a bit fuzzy where methods like "Play" that have no dependencies other than domain
model structs should go. They probably should live in the go4k package as well.
The file-organization on the Go-side is not at all finalized. But how packages are broken
into files is mostly a documentation issue; it does not affect the users of the packages at
all.
BTW: The name go4k was chosen because Ben advocated naming the subpackages
according to the dependency they introduce AND because the prototype of 4klang was
called go4k (there are still some defines in the 4klang source revealing this). go4k thus
honors our roots but is also not so bad name: it's the main package of a 4k synth tracker,
written in go.
2020-10-31 22:05:47 +02:00
Veikko Sariola
23e8bc0c5f
Remove bridge.newSynthState & add 1 to RandSeed during Render calls, so now an empty struct corresponds to the Sointu default behavior.
2020-10-28 20:03:21 +02:00
Veikko Sariola
8183c698da
Separate Synth and SynthState: SynthState is the part that Render changes.
...
This should make testing easier, as Synth can be assumed to stay the same
during each call. Synth is also the part that we can parse from .asm/.json file
and a Patch can be compiled into a synth. Synth can be eventually made
quite opaque to the user. The user should not need to worry about opcodes
etc.
2020-10-28 19:47:59 +02:00
Veikko Sariola
64afa9fb48
Change the C-API to roughly match the new Go-API.
...
The parameter order is now so that all the in/out int parameters are in the end of the signature.
2020-10-27 21:58:56 +02:00
Veikko Sariola
5f4b85b0a4
Change the Go API to have two versions: Render(buffer []float32), which always fill the whole buffer, and RenderTime(buffer []float32,int maxtime), which ends either when the buffer is full, or modulated time is reached.
2020-10-27 17:26:08 +02:00
Veikko Sariola
470ba28592
Change the Render function in bridge.go to return a tuple of: number of samples rendered; bool indicating if rowend was reached; and a possible error.
...
The callbacks are gone; the row looping is the job of the user which is probably better for everyone.
2020-10-26 08:30:43 +02:00
Veikko Sariola
6e85ff674a
Change the sointu.h api to return -1, 0 or n>0 depending if buffer is full and/or row ended.
...
test_render_samples_api.c was added to test the api. bridge.go was modified to reflect that there is no need to check for row manually; su_render_samples already returns the information if a row has ended.
2020-10-24 13:00:08 +03:00
Veikko Sariola and Veikko Sariola
7aac3917b7
Implement a bridge to call Sointu from Go language.
...
The main interface is render_samples function, which renders several samples in one call,
to limit the number of calls from Go to C. This is compiled into a library, which is then
linked and called from bridge.go.
2020-10-22 21:19:13 +03:00
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
45e554a9f9
Fix yasm warnings about flags being ignored on section redeclaration.
2020-05-27 13:17:28 +03:00
Veikko Sariola
6f7fed4c6b
Move jnc *_mono, ..., *_mono: code from function bodies to the stereofilter helper.
2020-05-20 08:49:23 +03:00
Veikko Sariola and 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
77b989d88d
Optimize size.
2020-05-18 16:25:20 +03:00
Veikko Sariola
666fd385d1
Fix bug in SEND STEREO.
2020-05-18 16:23:49 +03:00
Veikko Sariola
f06810d956
Optimize size.
2020-05-17 01:24:38 +03:00
Veikko Sariola
3b33b4e4d2
Improve README.
2020-05-16 23:27:30 +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
6a0a2fc36c
Optimize the implementations of gain and invgain.
2020-05-16 23:23:05 +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
e966bc0084
Improve README.
2020-05-16 21:57:32 +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
5c1b87f254
Improve comments for UpdateInstrument
2020-05-04 20:19:58 +03:00
Veikko Sariola and 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
35b2df2a2f
Require CMake version 3.15, as the Visual Studio statically linking runtime policy was introduced in it.
2020-04-14 21:44:45 +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