Age | Commit message (Collapse) | Author |
|
|
|
|
|
Previously, output was always considered as non-const, even if is was
zero and without any controller-influence, because output had always
pfactor-influence. Now, a pfactor-influenced output which is constant
zero is considered as still constant, because pfactor*0 is always 0.
|
|
|
|
Also, changed .gitignore to ignore gmon.out
|
|
|
|
The following has been changed
- Note::set_param now sets orig-values and does an apply_pfactor()
- Note::reattack now also reattacks the filter's envelope
- oscval[i]=0 has been removed as it's unneccessary in Note::get_sample()
- in Note::get_sample: fm- and out-sums are calculated in 2SCALE now
and scaled down (via >>SCALE) afterwards (instead of while every
single add-operation)
- the filter-envelope is now inited with the shorter constructor
- todo-list updated
|
|
When in monomode, not pressing the legato pedal will cause the note
always being reattacked, while pressing it will cause it to be only
reattacked if it's envelopes are done (i.e., past release phase)
When in polymode, the legato pedal is ignored, notes will always be
reattacked, because not doing so would cause interference between the
two generated sounds.
|
|
|
|
|
|
|
|
There are still issues:
- filtertest.prog.so: output_note-message which is not true
- huge size of the .so (48K are too much!)
|
|
The note-compiler now also generates code for set_param, and
a function has been added which returns a pointer to a newly
created object (important for loading from a shared object).
There's also a destroyer function.
TODO:
- write a CLI for the note-compiler
- let the note-compiler issue the build-commands on his own
- make the synth load instruments from shared objects
|
|
The note-compiler can read a program-definition and emits a cpp-file
which implements that definition. This implementation is optimized.
HOWEVER, the compiler still does not emit a set_param() function. this
will lead to a linker error because the function is not implemented
(but defined). After adding an empty implementation by hand the emitted
compiles well, and also seems to work when used in the synth.
TODO:
- implement set_param()
- compiler must emit a loader-function (which returns a new Note)
- use that loader function in the synth
|
|
|
|
|
|
The note-compiler now has a Parser class which knows about possible
parameter changes (by controller, velocity or simply user definition).
Furthermore, several files were adapted (by stripping unneeded code,
adding the bool foo_const variables etc.).
Small fix in util.c which causes extract_var("foo") to return "foo"
instead of "".
Fixes in both Makefiles.
|
|
|
|
Notes are still created from the built-in Note class, but
theoretically, other classes could be used, too.
|
|
|
|
The program compiles well, but as soon as a note is created,
it exits, because a pure virtual method is called in NoteSkel's
ctor (which is called before Note's ctor) which tries to call a
function which is implemented in Note, but not in NoteSkel
|
|
|
|
|