cite scientific articles
This commit is contained in:
parent
c3d8546e75
commit
82f66009f7
5
TODO
5
TODO
@ -7,14 +7,11 @@ code:
|
|||||||
* osc post filter (and one pole init, slew rate, etc.) val from input? set state instead?
|
* osc post filter (and one pole init, slew rate, etc.) val from input? set state instead?
|
||||||
* audio rate optional pulse width/slope inputs?
|
* audio rate optional pulse width/slope inputs?
|
||||||
* empty functions etc. to keep consistency and forward compatibility?
|
* empty functions etc. to keep consistency and forward compatibility?
|
||||||
* float in [-1,1] for velocity, pitch bend, mod wheel
|
|
||||||
* should clip slope in triangle?
|
* should clip slope in triangle?
|
||||||
* common smoothing policy (as control rate as possible?) - smoothing control?
|
* common smoothing policy (as control rate as possible?) - smoothing control?
|
||||||
* svf bandpass out polarity too confusing (inverted in mm2)?
|
* svf bandpass out polarity too confusing (inverted in mm2)?
|
||||||
* pan process with no out: should just reset coeffs?
|
|
||||||
* get_y_z1, common strategy?
|
* get_y_z1, common strategy?
|
||||||
* bw_satur gain compensation to divide by actual gain (derivative) rather than gain parameter?
|
* bw_satur gain compensation to divide by actual gain (derivative) rather than gain parameter?
|
||||||
* cite papers, thank authors
|
|
||||||
* add initial state (x0) to reset state of lp1, ap1, mm1, hs1, ls1, others? all?
|
* add initial state (x0) to reset state of lp1, ap1, mm1, hs1, ls1, others? all?
|
||||||
* bw_comb: should also modulate feedback?
|
* bw_comb: should also modulate feedback?
|
||||||
* bw_comb: integer target delay values?
|
* bw_comb: integer target delay values?
|
||||||
@ -69,6 +66,8 @@ code:
|
|||||||
* heavy debug (e.g. also stripping restrict) vs light debug vs release vs optimized makefile rules
|
* heavy debug (e.g. also stripping restrict) vs light debug vs release vs optimized makefile rules
|
||||||
* smaller optimized modules (e.g., simple one pole)
|
* smaller optimized modules (e.g., simple one pole)
|
||||||
* one pole, slew lim, maybe others: process const input? (return also if const out)
|
* one pole, slew lim, maybe others: process const input? (return also if const out)
|
||||||
|
* pan process with no out: should just reset coeffs?
|
||||||
|
* float in [0,1] or [-1,1] for velocity, pitch bend, mod wheel in examples
|
||||||
|
|
||||||
build system:
|
build system:
|
||||||
* make makefiles handle paths with spaces etc
|
* make makefiles handle paths with spaces etc
|
||||||
|
@ -35,6 +35,13 @@
|
|||||||
* As a side effect, antialiasing causes attenuation at higher frequencies
|
* As a side effect, antialiasing causes attenuation at higher frequencies
|
||||||
* (about 3 dB at 0.5 × Nyquist frequency and rapidly increasing at higher
|
* (about 3 dB at 0.5 × Nyquist frequency and rapidly increasing at higher
|
||||||
* frequencies).
|
* frequencies).
|
||||||
|
*
|
||||||
|
* The antialiasing technique used here is described in
|
||||||
|
*
|
||||||
|
* J. D. Parker, V. Zavalishin, and E. Le Bivic, "Reducing the Aliasing of
|
||||||
|
* Nonlinear Waveshaping Using Continuous-Time Convolution", Proc. 19th Intl.
|
||||||
|
* Conf. Digital Audio Effects (DAFx-16), pp. 137-144, Brno, Czech Republic,
|
||||||
|
* September 2016.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -79,8 +79,8 @@ typedef struct {
|
|||||||
/*! <<<```
|
/*! <<<```
|
||||||
* Note status:
|
* Note status:
|
||||||
* * `pressed`: whether the note is pressed (non-`0`) or not (`0`);
|
* * `pressed`: whether the note is pressed (non-`0`) or not (`0`);
|
||||||
* * `velocity`: velocity in [`0.f`, `1.f`], otherwise negative to indicate
|
* * `velocity`: velocity in [`0.f`, `1.f`] or otherwise negative to
|
||||||
* unknown / not available.
|
* indicate unknown / not available.
|
||||||
*
|
*
|
||||||
* #### bw_note_queue_event
|
* #### bw_note_queue_event
|
||||||
* ```>>> */
|
* ```>>> */
|
||||||
|
@ -28,6 +28,12 @@
|
|||||||
*
|
*
|
||||||
* It turns a normalized phase signal, such as that geneated by
|
* It turns a normalized phase signal, such as that geneated by
|
||||||
* [bw\_phase\_gen](bw_phase_gen), into a pulse wave.
|
* [bw\_phase\_gen](bw_phase_gen), into a pulse wave.
|
||||||
|
*
|
||||||
|
* The antialiasing algorithm is based on
|
||||||
|
*
|
||||||
|
* V. Valimaki and A. Huovilainen, "Antialiasing Oscillators in Subtractive
|
||||||
|
* Synthesis", IEEE Signal Processing Magazine, vol. 24, no. 2, pp. 116-125,
|
||||||
|
* March 2007.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -27,6 +27,12 @@
|
|||||||
*
|
*
|
||||||
* It turns a normalized phase signal, such as that geneated by
|
* It turns a normalized phase signal, such as that geneated by
|
||||||
* [bw\_phase\_gen](bw_phase_gen), into a sawtooth wave.
|
* [bw\_phase\_gen](bw_phase_gen), into a sawtooth wave.
|
||||||
|
*
|
||||||
|
* The antialiasing algorithm is based on
|
||||||
|
*
|
||||||
|
* V. Valimaki and A. Huovilainen, "Antialiasing Oscillators in Subtractive
|
||||||
|
* Synthesis", IEEE Signal Processing Magazine, vol. 24, no. 2, pp. 116-125,
|
||||||
|
* March 2007.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -28,6 +28,12 @@
|
|||||||
*
|
*
|
||||||
* It turns a normalized phase signal, such as that geneated by
|
* It turns a normalized phase signal, such as that geneated by
|
||||||
* [bw\_phase\_gen](bw_phase_gen), into a triangle wave.
|
* [bw\_phase\_gen](bw_phase_gen), into a triangle wave.
|
||||||
|
*
|
||||||
|
* The antialiasing algorithm is based on
|
||||||
|
*
|
||||||
|
* V. Valimaki and A. Huovilainen, "Antialiasing Oscillators in Subtractive
|
||||||
|
* Synthesis", IEEE Signal Processing Magazine, vol. 24, no. 2, pp. 116-125,
|
||||||
|
* March 2007.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
* version {{{ 1.0.0 }}}
|
* version {{{ 1.0.0 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_gain bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Stereo panner.
|
* Stereo panner with -3 dB center pan law.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -31,6 +31,12 @@
|
|||||||
* 3 dB/oct from about 0.000046 × Nyquist frequency to about 0.9 × Nyquist
|
* 3 dB/oct from about 0.000046 × Nyquist frequency to about 0.9 × Nyquist
|
||||||
* frequency. It can be used to turn white noise into pink noise (hence the
|
* frequency. It can be used to turn white noise into pink noise (hence the
|
||||||
* name).
|
* name).
|
||||||
|
*
|
||||||
|
* The filter design is based on
|
||||||
|
*
|
||||||
|
* P. P. La Pastina and S. D'Angelo, "Optimal Integer Order Approximation of
|
||||||
|
* Fractional Order Filters", Proc. 24th Intl. Conf. Digital Audio Effects
|
||||||
|
* (DAFx20in21), pp. 89-96, Vienna, Austria, September 2021.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -31,6 +31,14 @@
|
|||||||
* All functions in this module are [reentrant](api#reentrant-function),
|
* All functions in this module are [reentrant](api#reentrant-function),
|
||||||
* [RT-safe](api#rt-safe-function), [thread-safe](api#thread-safe-function),
|
* [RT-safe](api#rt-safe-function), [thread-safe](api#thread-safe-function),
|
||||||
* and have [no side effects](api#no-side-effects).
|
* and have [no side effects](api#no-side-effects).
|
||||||
|
*
|
||||||
|
* The algorithms are based on the ["simplified" Permuted Congruential
|
||||||
|
* Generator (PCG)](https://nullprogram.com/blog/2017/09/21/#permuted-congruential-generator-pcg)
|
||||||
|
* by Chris Wellons, which is itself taken from
|
||||||
|
*
|
||||||
|
* M. E. O'Neill, "PCG: A Family of Simple Fast Space-Efficient Statistically
|
||||||
|
* Good Algorithms for Random Number Generation", September 2014, available
|
||||||
|
* at https://www.cs.hmc.edu/tr/hmc-cs-2014-0905.pdf.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -35,6 +35,13 @@
|
|||||||
* As a side effect, antialiasing causes attenuation at higher frequencies
|
* As a side effect, antialiasing causes attenuation at higher frequencies
|
||||||
* (about 3 dB at 0.5 × Nyquist frequency and rapidly increasing at higher
|
* (about 3 dB at 0.5 × Nyquist frequency and rapidly increasing at higher
|
||||||
* frequencies).
|
* frequencies).
|
||||||
|
*
|
||||||
|
* The antialiasing technique used here is described in
|
||||||
|
*
|
||||||
|
* J. D. Parker, V. Zavalishin, and E. Le Bivic, "Reducing the Aliasing of
|
||||||
|
* Nonlinear Waveshaping Using Continuous-Time Convolution", Proc. 19th Intl.
|
||||||
|
* Conf. Digital Audio Effects (DAFx-16), pp. 137-144, Brno, Czech Republic,
|
||||||
|
* September 2016.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
* description {{{
|
* description {{{
|
||||||
* Integer-ratio IIR sample rate converter.
|
* Integer-ratio IIR sample rate converter.
|
||||||
*
|
*
|
||||||
* Multi-rate filtering inspired by
|
* The multi-rate filtering approach was inspired by
|
||||||
*
|
*
|
||||||
* M. Holters and J.Parker, "A Combined Model for a Bucket Brigade Device and
|
* M. Holters and J.Parker, "A Combined Model for a Bucket Brigade Device and
|
||||||
* its Input and Output Filters", 21st Intl. Conf. Digital Audio Effects
|
* its Input and Output Filters", 21st Intl. Conf. Digital Audio Effects
|
||||||
|
@ -25,6 +25,13 @@
|
|||||||
* description {{{
|
* description {{{
|
||||||
* State variable filter (2nd order, 12 dB/oct) model with separated lowpass,
|
* State variable filter (2nd order, 12 dB/oct) model with separated lowpass,
|
||||||
* bandpass, and highpass outputs.
|
* bandpass, and highpass outputs.
|
||||||
|
*
|
||||||
|
* The module implements a robust original algorithm design, which I later
|
||||||
|
* found to be probably related to the one described in
|
||||||
|
*
|
||||||
|
* A. Wishnick, "Time-Varying Filters for Musical Applications", Proc. 17th
|
||||||
|
* Intl. Conf. Digital Audio Effects (DAFx-14), Erlangen, Germany, September
|
||||||
|
* 2014.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -29,6 +29,8 @@
|
|||||||
* <ul>
|
* <ul>
|
||||||
* <li>Version <strong>1.0.0</strong>:
|
* <li>Version <strong>1.0.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Specified that velocity can be negative in
|
||||||
|
* <code>bw_voice_alloc_opts</code>.</li>
|
||||||
* <li>Now using <code>size_t</code> instead of
|
* <li>Now using <code>size_t</code> instead of
|
||||||
* <code>BW_SIZE_T</code>.</li>
|
* <code>BW_SIZE_T</code>.</li>
|
||||||
* <li>Added <code>const</code> and <code>BW_RESTRICT</code> where
|
* <li>Added <code>const</code> and <code>BW_RESTRICT</code> where
|
||||||
@ -94,9 +96,11 @@ typedef struct {
|
|||||||
* * `priority`: note priority;
|
* * `priority`: note priority;
|
||||||
* * `note_on`: note on callback, where `voice` is an opaque pointer to the
|
* * `note_on`: note on callback, where `voice` is an opaque pointer to the
|
||||||
* chosen voice, `note` is the note number, and `velocity` is the note
|
* chosen voice, `note` is the note number, and `velocity` is the note
|
||||||
* velocity in [`0.f`, `1.f`];
|
* velocity in [`0.f`, `1.f`] or otherwise negative to indicate unknown /
|
||||||
|
* not available;
|
||||||
* * `note_off`: note off callback, where `voice` is an opaque pointer to
|
* * `note_off`: note off callback, where `voice` is an opaque pointer to
|
||||||
* the chosen voice and `velocity` is the note velocity in [`0.f`, `1.f`];
|
* the chosen voice and `velocity` is the note velocity in [`0.f`, `1.f`]
|
||||||
|
* or otherwise negative to indicate unknown / not available;
|
||||||
* * `get_note`: callback that returns the note number associated to the
|
* * `get_note`: callback that returns the note number associated to the
|
||||||
* given `voice`;
|
* given `voice`;
|
||||||
* * `is_free`: callback that returns whether the given `voice` is free
|
* * `is_free`: callback that returns whether the given `voice` is free
|
||||||
|
Loading…
Reference in New Issue
Block a user