revised process_multi buffer assumptions
This commit is contained in:
parent
1d731eaafb
commit
10a2d1ff45
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_lp1 bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_lp1 bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* First-order allpass filter (90° shift at cutoff, approaching 180° shift
|
* First-order allpass filter (90° shift at cutoff, approaching 180° shift
|
||||||
@ -28,6 +28,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_ap1_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -518,6 +525,9 @@ static inline void bw_ap1_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_ap1_update_coeffs_ctrl(coeffs);
|
bw_ap1_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole bw_svf }}}
|
* requires {{{ bw_common bw_math bw_one_pole bw_svf }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Second-order allpass filter (180° shift at cutoff, approaching 360° shift
|
* Second-order allpass filter (180° shift at cutoff, approaching 360° shift
|
||||||
@ -28,6 +28,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_ap2_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -531,6 +538,9 @@ static inline void bw_ap2_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_ap2_update_coeffs_ctrl(coeffs);
|
bw_ap2_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,20 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_gain bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Stereo balance.
|
* Stereo balance.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_balance_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -398,6 +405,13 @@ static inline void bw_balance_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = 0; j < n_channels; j++)
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
BW_ASSERT(y_l[i] != y_r[j]);
|
BW_ASSERT(y_l[i] != y_r[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++) {
|
||||||
|
BW_ASSERT(i == j || x_l[i] != y_l[j]);
|
||||||
|
BW_ASSERT(i == j || x_l[i] != y_r[j]);
|
||||||
|
BW_ASSERT(i == j || x_r[i] != y_l[j]);
|
||||||
|
BW_ASSERT(i == j || x_r[i] != y_r[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_balance_update_coeffs_ctrl(coeffs);
|
bw_balance_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -28,14 +28,16 @@
|
|||||||
* This is purely an audio effect, it doesn't actually produce an output
|
* This is purely an audio effect, it doesn't actually produce an output
|
||||||
* signal with a different encoding. The algorithm is deliberately crude to
|
* signal with a different encoding. The algorithm is deliberately crude to
|
||||||
* obtain the characteristic noise due to lo-fi A/D quantization.
|
* obtain the characteristic noise due to lo-fi A/D quantization.
|
||||||
*
|
|
||||||
* It
|
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Version <strong>1.2.0</strong>:
|
* <li>Version <strong>1.2.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Added gate parameter.</li>
|
* <li>Added gate parameter.</li>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_balance_bd_reduce_multi()</code> to ensure that buffers
|
||||||
|
* used for both input and output appear at the same channel
|
||||||
|
* indices.</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
* </li>
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
@ -409,6 +411,9 @@ static inline void bw_bd_reduce_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_bd_reduce_update_coeffs_ctrl(coeffs);
|
bw_bd_reduce_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,21 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ utility }}}
|
* module_type {{{ utility }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common }}}
|
* requires {{{ bw_common }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Common operations on buffers.
|
* Common operations on buffers.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_buf_{neg,add,scale,mix,mul}_multi()</code> to ensure
|
||||||
|
* that buffers used for both input and output appear at the same
|
||||||
|
* channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -362,6 +370,9 @@ static inline void bw_buf_neg_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(dest[i] != dest[j]);
|
BW_ASSERT(dest[i] != dest[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || src[i] != dest[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
@ -381,6 +392,9 @@ static inline void bw_buf_add_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(dest[i] != dest[j]);
|
BW_ASSERT(dest[i] != dest[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || src[i] != dest[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
@ -400,6 +414,9 @@ static inline void bw_buf_scale_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(dest[i] != dest[j]);
|
BW_ASSERT(dest[i] != dest[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || src[i] != dest[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
@ -419,6 +436,11 @@ static inline void bw_buf_mix_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(dest[i] != dest[j]);
|
BW_ASSERT(dest[i] != dest[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++) {
|
||||||
|
BW_ASSERT(i == j || src1[i] != dest[j]);
|
||||||
|
BW_ASSERT(i == j || src2[i] != dest[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
@ -438,6 +460,11 @@ static inline void bw_buf_mul_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(dest[i] != dest[j]);
|
BW_ASSERT(dest[i] != dest[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++) {
|
||||||
|
BW_ASSERT(i == j || src1[i] != dest[j]);
|
||||||
|
BW_ASSERT(i == j || src2[i] != dest[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.0.0 }}}
|
* version {{{ 1.0.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_math bw_one_pole bw_svf }}}
|
* requires {{{ bw_common bw_gain bw_math bw_one_pole bw_svf }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Cab simulator effect.
|
* Cab simulator effect.
|
||||||
@ -30,6 +30,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.0.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_cab_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.0.0</strong>:
|
* <li>Version <strong>1.0.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>First release.</li>
|
* <li>First release.</li>
|
||||||
@ -528,6 +535,9 @@ static inline void bw_cab_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_cab_update_coeffs_ctrl(coeffs);
|
bw_cab_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{
|
* requires {{{
|
||||||
* bw_buf bw_comb bw_common bw_delay bw_gain bw_math bw_one_pole bw_osc_sin
|
* bw_buf bw_comb bw_common bw_delay bw_gain bw_math bw_one_pole bw_osc_sin
|
||||||
* bw_phase_gen
|
* bw_phase_gen
|
||||||
@ -36,6 +36,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_chorus_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -662,6 +669,9 @@ static inline void bw_chorus_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_chorus_update_coeffs_ctrl(coeffs);
|
bw_chorus_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Antialiased hard clipper with parametric bias and gain
|
* Antialiased hard clipper with parametric bias and gain
|
||||||
@ -45,6 +45,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_clip_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -600,6 +607,9 @@ static inline void bw_clip_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (coeffs->gain_compensation)
|
if (coeffs->gain_compensation)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{
|
* requires {{{
|
||||||
* bw_buf bw_common bw_delay bw_gain bw_math bw_one_pole
|
* bw_buf bw_common bw_delay bw_gain bw_math bw_one_pole
|
||||||
* }}}
|
* }}}
|
||||||
@ -37,6 +37,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_comb_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -718,6 +725,9 @@ static inline void bw_comb_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_comb_update_coeffs_ctrl(coeffs);
|
bw_comb_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{
|
* requires {{{
|
||||||
* bw_common bw_env_follow bw_gain bw_math bw_one_pole
|
* bw_common bw_env_follow bw_gain bw_math bw_one_pole
|
||||||
* }}}
|
* }}}
|
||||||
@ -29,6 +29,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_comp_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Relaxed <code>bw_comp_reset_state_multi</code>,
|
* <li>Relaxed <code>bw_comp_reset_state_multi</code>,
|
||||||
@ -658,6 +665,13 @@ static inline void bw_comp_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
|
if (x_sc != BW_NULL)
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x_sc[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_comp_update_coeffs_ctrl(coeffs);
|
bw_comp_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_buf bw_common bw_math }}}
|
* requires {{{ bw_buf bw_common bw_math }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Interpolated delay line, not smoothed.
|
* Interpolated delay line, not smoothed.
|
||||||
@ -31,6 +31,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_delay_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -667,6 +674,9 @@ static inline void bw_delay_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_delay_update_coeffs_ctrl(coeffs);
|
bw_delay_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{
|
* requires {{{
|
||||||
* bw_clip bw_common bw_gain bw_hp1 bw_lp1 bw_math bw_mm2 bw_one_pole bw_peak
|
* bw_clip bw_common bw_gain bw_hp1 bw_lp1 bw_math bw_mm2 bw_one_pole bw_peak
|
||||||
* bw_satur bw_svf
|
* bw_satur bw_svf
|
||||||
@ -32,6 +32,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_dist_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -558,6 +565,9 @@ static inline void bw_dist_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_dist_update_coeffs_ctrl(coeffs);
|
bw_dist_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{
|
* requires {{{
|
||||||
* bw_common bw_gain bw_hs1 bw_lp1 bw_math bw_mm2 bw_one_pole bw_peak
|
* bw_common bw_gain bw_hs1 bw_lp1 bw_math bw_mm2 bw_one_pole bw_peak
|
||||||
* bw_satur bw_svf
|
* bw_satur bw_svf
|
||||||
@ -32,6 +32,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_drive_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -561,6 +568,9 @@ static inline void bw_drive_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_drive_update_coeffs_ctrl(coeffs);
|
bw_drive_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -32,6 +32,9 @@
|
|||||||
* <li>Added <code>bw_dry_wet_get_wet()</code> and
|
* <li>Added <code>bw_dry_wet_get_wet()</code> and
|
||||||
* <code>bw_dry_wet_get_wet_cur()</code>, and corresponding C++
|
* <code>bw_dry_wet_get_wet_cur()</code>, and corresponding C++
|
||||||
* API.</li>
|
* API.</li>
|
||||||
|
* <li>Added debugging check in <code>bw_dry_wet_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
* </li>
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
@ -379,6 +382,11 @@ static inline void bw_dry_wet_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++) {
|
||||||
|
BW_ASSERT(i == j || x_dry[i] != y[j]);
|
||||||
|
BW_ASSERT(i == j || x_wet[i] != y[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_dry_wet_update_coeffs_ctrl(coeffs);
|
bw_dry_wet_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Envelope follower made of a full-wave rectifier followed by
|
* Envelope follower made of a full-wave rectifier followed by
|
||||||
@ -28,6 +28,14 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_env_follow_process_multi()</code> to ensure that
|
||||||
|
* buffers used for both input and output appear at the same
|
||||||
|
* channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -521,10 +529,14 @@ static inline void bw_env_follow_process_multi(
|
|||||||
#endif
|
#endif
|
||||||
BW_ASSERT(x != BW_NULL);
|
BW_ASSERT(x != BW_NULL);
|
||||||
#ifndef BW_NO_DEBUG
|
#ifndef BW_NO_DEBUG
|
||||||
if (y != BW_NULL)
|
if (y != BW_NULL) {
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] == BW_NULL || y[j] == BW_NULL || y[i] != y[j]);
|
BW_ASSERT(y[i] == BW_NULL || y[j] == BW_NULL || y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_env_follow_update_coeffs_ctrl(coeffs);
|
bw_env_follow_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{
|
* requires {{{
|
||||||
* bw_common bw_gain bw_hp1 bw_lp1 bw_math bw_mm2 bw_one_pole bw_peak
|
* bw_common bw_gain bw_hp1 bw_lp1 bw_math bw_mm2 bw_one_pole bw_peak
|
||||||
* bw_satur bw_svf
|
* bw_satur bw_svf
|
||||||
@ -32,6 +32,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_fuzz_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -547,6 +554,9 @@ static inline void bw_fuzz_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_fuzz_update_coeffs_ctrl(coeffs);
|
bw_fuzz_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,20 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Gain.
|
* Gain.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_gain_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -405,6 +412,9 @@ static inline void bw_gain_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_gain_update_coeffs_ctrl(coeffs);
|
bw_gain_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_lp1 bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_lp1 bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* First-order highpass filter (6 dB/oct) with gain asymptotically
|
* First-order highpass filter (6 dB/oct) with gain asymptotically
|
||||||
@ -28,6 +28,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_hp1_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -514,6 +521,9 @@ static inline void bw_hp1_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_hp1_update_coeffs_ctrl(coeffs);
|
bw_hp1_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,20 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_lp1 bw_math bw_mm1 bw_one_pole }}}
|
* requires {{{ bw_common bw_gain bw_lp1 bw_math bw_mm1 bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* First-order high shelf filter (6 dB/oct) with unitary DC gain.
|
* First-order high shelf filter (6 dB/oct) with unitary DC gain.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_hs1_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -590,6 +597,9 @@ static inline void bw_hs1_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_hs1_update_coeffs_ctrl(coeffs);
|
bw_hs1_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,20 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_math bw_mm2 bw_one_pole bw_svf }}}
|
* requires {{{ bw_common bw_gain bw_math bw_mm2 bw_one_pole bw_svf }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Second-order high shelf filter (12 dB/oct) with unitary DC gain.
|
* Second-order high shelf filter (12 dB/oct) with unitary DC gain.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_hs2_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -618,6 +625,9 @@ static inline void bw_hs2_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_hs2_update_coeffs_ctrl(coeffs);
|
bw_hs2_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* First-order lowpass filter (6 dB/oct) with unitary DC gain.
|
* First-order lowpass filter (6 dB/oct) with unitary DC gain.
|
||||||
@ -30,6 +30,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_lp1_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -565,6 +572,9 @@ static inline void bw_lp1_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_samples; i++) {
|
for (size_t i = 0; i < n_samples; i++) {
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_lp1 bw_math bw_mm1 bw_one_pole }}}
|
* requires {{{ bw_common bw_gain bw_lp1 bw_math bw_mm1 bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* First-order low shelf filter (6 dB/oct) with gain asymptotically
|
* First-order low shelf filter (6 dB/oct) with gain asymptotically
|
||||||
@ -28,6 +28,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_ls1_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -588,6 +595,9 @@ static inline void bw_ls1_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_ls1_update_coeffs_ctrl(coeffs);
|
bw_ls1_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_math bw_mm2 bw_one_pole bw_svf }}}
|
* requires {{{ bw_common bw_gain bw_math bw_mm2 bw_one_pole bw_svf }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Second-order low shelf filter (12 dB/oct) with gain asymptotically
|
* Second-order low shelf filter (12 dB/oct) with gain asymptotically
|
||||||
@ -28,6 +28,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_ls2_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -624,6 +631,9 @@ static inline void bw_ls2_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_ls2_update_coeffs_ctrl(coeffs);
|
bw_ls2_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,20 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_lp1 bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_gain bw_lp1 bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* First-order multimode filter.
|
* First-order multimode filter.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_mm1_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Fixed computation of initial state in
|
* <li>Fixed computation of initial state in
|
||||||
@ -557,6 +564,9 @@ static inline void bw_mm1_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_mm1_update_coeffs_ctrl(coeffs);
|
bw_mm1_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,20 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_math bw_one_pole bw_svf }}}
|
* requires {{{ bw_common bw_gain bw_math bw_one_pole bw_svf }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Second-order multimode filter.
|
* Second-order multimode filter.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_mm2_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Fixed computation of initial state in
|
* <li>Fixed computation of initial state in
|
||||||
@ -618,6 +625,9 @@ static inline void bw_mm2_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_mm2_update_coeffs_ctrl(coeffs);
|
bw_mm2_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,21 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_env_follow bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_env_follow bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Noise gate with independent sidechain input.
|
* Noise gate with independent sidechain input.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_noise_gate_process_multi()</code> to ensure that
|
||||||
|
* buffers used for both input and output appear at the same
|
||||||
|
* channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Relaxed <code>bw_noise_gate_reset_state_multi</code>,
|
* <li>Relaxed <code>bw_noise_gate_reset_state_multi</code>,
|
||||||
@ -598,7 +606,8 @@ static inline void bw_noise_gate_process(
|
|||||||
static inline void bw_noise_gate_process_multi(
|
static inline void bw_noise_gate_process_multi(
|
||||||
bw_noise_gate_coeffs * BW_RESTRICT coeffs,
|
bw_noise_gate_coeffs * BW_RESTRICT coeffs,
|
||||||
bw_noise_gate_state * BW_RESTRICT const * BW_RESTRICT state,
|
bw_noise_gate_state * BW_RESTRICT const * BW_RESTRICT state,
|
||||||
const float * const * x, const float * const * x_sc,
|
const float * const * x,
|
||||||
|
const float * const * x_sc,
|
||||||
float * const * y,
|
float * const * y,
|
||||||
size_t n_channels,
|
size_t n_channels,
|
||||||
size_t n_samples) {
|
size_t n_samples) {
|
||||||
@ -617,6 +626,13 @@ static inline void bw_noise_gate_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
|
if (x_sc != BW_NULL)
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x_sc[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_noise_gate_update_coeffs_ctrl(coeffs);
|
bw_noise_gate_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole bw_svf }}}
|
* requires {{{ bw_common bw_math bw_one_pole bw_svf }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Second-order notch filter with unitary gain at DC and asymptotically as
|
* Second-order notch filter with unitary gain at DC and asymptotically as
|
||||||
@ -28,6 +28,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_notch_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -529,6 +536,9 @@ static inline void bw_notch_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_notch_update_coeffs_ctrl(coeffs);
|
bw_notch_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math }}}
|
* requires {{{ bw_common bw_math }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* One-pole (6 dB/oct) lowpass filter with unitary DC gain, separate attack
|
* One-pole (6 dB/oct) lowpass filter with unitary DC gain, separate attack
|
||||||
@ -30,6 +30,14 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_one_pole_process_multi()</code> to ensure that buffers
|
||||||
|
* used for both input and output appear at the same channel
|
||||||
|
* indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -901,10 +909,14 @@ static inline void bw_one_pole_process_multi(
|
|||||||
#endif
|
#endif
|
||||||
BW_ASSERT(x != BW_NULL);
|
BW_ASSERT(x != BW_NULL);
|
||||||
#ifndef BW_NO_DEBUG
|
#ifndef BW_NO_DEBUG
|
||||||
if (y != BW_NULL)
|
if (y != BW_NULL) {
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] == BW_NULL || y[j] == BW_NULL || y[i] != y[j]);
|
BW_ASSERT(y[i] == BW_NULL || y[j] == BW_NULL || y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_one_pole_update_coeffs_ctrl(coeffs);
|
bw_one_pole_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common }}}
|
* requires {{{ bw_common }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Post-filter to decolorate oscillator waveshapers when antialiasing is on.
|
* Post-filter to decolorate oscillator waveshapers when antialiasing is on.
|
||||||
@ -33,6 +33,14 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_osc_filt_process_multi()</code> to ensure that buffers
|
||||||
|
* used for both input and output appear at the same channel
|
||||||
|
* indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -290,6 +298,9 @@ static inline void bw_osc_filt_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Pulse oscillator waveshaper with variable pulse width (actually, duty
|
* Pulse oscillator waveshaper with variable pulse width (actually, duty
|
||||||
@ -37,6 +37,15 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging checks in
|
||||||
|
* <code>bw_osc_pulse_process_multi()</code> to ensure that
|
||||||
|
* <code>x_inc</code> is not <code>BW_NULL</code> when antialiasing
|
||||||
|
* is on and that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -467,11 +476,19 @@ static inline void bw_osc_pulse_process_multi(
|
|||||||
BW_ASSERT_DEEP(bw_osc_pulse_coeffs_is_valid(coeffs));
|
BW_ASSERT_DEEP(bw_osc_pulse_coeffs_is_valid(coeffs));
|
||||||
BW_ASSERT_DEEP(coeffs->state >= bw_osc_pulse_coeffs_state_reset_coeffs);
|
BW_ASSERT_DEEP(coeffs->state >= bw_osc_pulse_coeffs_state_reset_coeffs);
|
||||||
BW_ASSERT(x != BW_NULL);
|
BW_ASSERT(x != BW_NULL);
|
||||||
|
BW_ASSERT(coeffs->antialiasing ? x_inc != BW_NULL : 1);
|
||||||
BW_ASSERT(y != BW_NULL);
|
BW_ASSERT(y != BW_NULL);
|
||||||
#ifndef BW_NO_DEBUG
|
#ifndef BW_NO_DEBUG
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
|
if (coeffs->antialiasing)
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x_inc[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (coeffs->antialiasing)
|
if (coeffs->antialiasing)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math }}}
|
* requires {{{ bw_common bw_math }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Sawtooth oscillator waveshaper with PolyBLEP antialiasing.
|
* Sawtooth oscillator waveshaper with PolyBLEP antialiasing.
|
||||||
@ -36,6 +36,15 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging checks in
|
||||||
|
* <code>bw_osc_saw_process_multi()</code> to ensure that
|
||||||
|
* <code>x_inc</code> is not <code>BW_NULL</code> when antialiasing
|
||||||
|
* is on and that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -434,11 +443,19 @@ static inline void bw_osc_saw_process_multi(
|
|||||||
BW_ASSERT_DEEP(bw_osc_saw_coeffs_is_valid(coeffs));
|
BW_ASSERT_DEEP(bw_osc_saw_coeffs_is_valid(coeffs));
|
||||||
BW_ASSERT_DEEP(coeffs->state >= bw_osc_saw_coeffs_state_reset_coeffs);
|
BW_ASSERT_DEEP(coeffs->state >= bw_osc_saw_coeffs_state_reset_coeffs);
|
||||||
BW_ASSERT(x != BW_NULL);
|
BW_ASSERT(x != BW_NULL);
|
||||||
|
BW_ASSERT(coeffs->antialiasing ? x_inc != BW_NULL : 1);
|
||||||
BW_ASSERT(y != BW_NULL);
|
BW_ASSERT(y != BW_NULL);
|
||||||
#ifndef BW_NO_DEBUG
|
#ifndef BW_NO_DEBUG
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
|
if (coeffs->antialiasing)
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x_inc[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (x_inc != BW_NULL)
|
if (x_inc != BW_NULL)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math }}}
|
* requires {{{ bw_common bw_math }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Sinusoidal oscillator waveshaper.
|
* Sinusoidal oscillator waveshaper.
|
||||||
@ -30,6 +30,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_osc_sin_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -176,6 +183,9 @@ static inline void bw_osc_sin_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Triangle oscillator waveshaper with variable slope (increasing time over
|
* Triangle oscillator waveshaper with variable slope (increasing time over
|
||||||
@ -37,6 +37,15 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging checks in
|
||||||
|
* <code>bw_osc_tri_process_multi()</code> to ensure that
|
||||||
|
* <code>x_inc</code> is not <code>BW_NULL</code> when antialiasing
|
||||||
|
* is on and that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -474,11 +483,19 @@ static inline void bw_osc_tri_process_multi(
|
|||||||
BW_ASSERT_DEEP(bw_osc_tri_coeffs_is_valid(coeffs));
|
BW_ASSERT_DEEP(bw_osc_tri_coeffs_is_valid(coeffs));
|
||||||
BW_ASSERT_DEEP(coeffs->state >= bw_osc_tri_coeffs_state_reset_coeffs);
|
BW_ASSERT_DEEP(coeffs->state >= bw_osc_tri_coeffs_state_reset_coeffs);
|
||||||
BW_ASSERT(x != BW_NULL);
|
BW_ASSERT(x != BW_NULL);
|
||||||
|
BW_ASSERT(coeffs->antialiasing ? x_inc != BW_NULL : 1);
|
||||||
BW_ASSERT(y != BW_NULL);
|
BW_ASSERT(y != BW_NULL);
|
||||||
#ifndef BW_NO_DEBUG
|
#ifndef BW_NO_DEBUG
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
|
if (coeffs->antialiasing)
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x_inc[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (coeffs->antialiasing)
|
if (coeffs->antialiasing)
|
||||||
|
@ -20,13 +20,20 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_gain bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Stereo panner with -3 dB center pan law.
|
* Stereo panner with -3 dB center pan law.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_pan_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -390,6 +397,11 @@ static inline void bw_pan_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = 0; j < n_channels; j++)
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
BW_ASSERT(y_l[i] != y_r[j]);
|
BW_ASSERT(y_l[i] != y_r[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++) {
|
||||||
|
BW_ASSERT(i == j || x[i] != y_l[j]);
|
||||||
|
BW_ASSERT(i == j || x[i] != y_r[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_pan_update_coeffs_ctrl(coeffs);
|
bw_pan_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_gain bw_math bw_mm2 bw_one_pole bw_svf }}}
|
* requires {{{ bw_common bw_gain bw_math bw_mm2 bw_one_pole bw_svf }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Second-order peak filter with unitary gain at DC and asymptotically
|
* Second-order peak filter with unitary gain at DC and asymptotically
|
||||||
@ -35,6 +35,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_peak_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -678,6 +685,9 @@ static inline void bw_peak_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_peak_update_coeffs_ctrl(coeffs);
|
bw_peak_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Phase generator with portamento and exponential frequency modulation.
|
* Phase generator with portamento and exponential frequency modulation.
|
||||||
@ -29,6 +29,17 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_phase_gen_process_multi()</code> to ensure that buffers
|
||||||
|
* used for both input and output appear at the same channel
|
||||||
|
* indices.</li>
|
||||||
|
* <li>Fixed bug in <code>bw_phase_gen_process_multi()</code> by which
|
||||||
|
* debugging code could report false negatives when
|
||||||
|
* <code>BW_NULL</code> buffers are used.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Fixed rounding bug when frequency is tiny and negative.</li>
|
* <li>Fixed rounding bug when frequency is tiny and negative.</li>
|
||||||
@ -682,15 +693,25 @@ static inline void bw_phase_gen_process_multi(
|
|||||||
if (y != BW_NULL)
|
if (y != BW_NULL)
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] == BW_NULL || y[j] == BW_NULL || y[i] != y[j]);
|
||||||
if (y_inc != BW_NULL)
|
if (y_inc != BW_NULL)
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y_inc[i] != y_inc[j]);
|
BW_ASSERT(y_inc[i] == BW_NULL || y_inc[j] == BW_NULL || y_inc[i] != y_inc[j]);
|
||||||
if (y != BW_NULL && y_inc != BW_NULL)
|
if (y != BW_NULL && y_inc != BW_NULL)
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = 0; j < n_channels; j++)
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y_inc[j]);
|
BW_ASSERT(y[i] == BW_NULL || y_inc[j] == BW_NULL || y[i] != y_inc[j]);
|
||||||
|
if (x_mod != BW_NULL) {
|
||||||
|
if (y != BW_NULL)
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x_mod[i] == BW_NULL || y[i] == BW_NULL || x_mod[i] != y[j]);
|
||||||
|
if (y_inc != BW_NULL)
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x_mod[i] == BW_NULL || y_inc[i] == BW_NULL || x_mod[i] != y_inc[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_phase_gen_update_coeffs_ctrl(coeffs);
|
bw_phase_gen_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{
|
* requires {{{
|
||||||
* bw_ap1 bw_common bw_lp1 bw_math bw_one_pole bw_osc_sin bw_phase_gen
|
* bw_ap1 bw_common bw_lp1 bw_math bw_one_pole bw_osc_sin bw_phase_gen
|
||||||
* }}}
|
* }}}
|
||||||
@ -30,6 +30,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_phaser_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -548,6 +555,9 @@ static inline void bw_phaser_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(state[i] != state[j]);
|
BW_ASSERT(state[i] != state[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
BW_ASSERT(x != BW_NULL);
|
BW_ASSERT(x != BW_NULL);
|
||||||
BW_ASSERT(y != BW_NULL);
|
BW_ASSERT(y != BW_NULL);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common }}}
|
* requires {{{ bw_common }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Pinking filter.
|
* Pinking filter.
|
||||||
@ -40,6 +40,14 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_pink_filt_process_multi()</code> to ensure that buffers
|
||||||
|
* used for both input and output appear at the same channel
|
||||||
|
* indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -576,6 +584,9 @@ static inline void bw_pink_filt_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_env_follow bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_env_follow bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Digital peak programme meter with adjustable integration time constant.
|
* Digital peak programme meter with adjustable integration time constant.
|
||||||
@ -30,6 +30,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_ppm_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -509,10 +516,14 @@ static inline void bw_ppm_process_multi(
|
|||||||
#endif
|
#endif
|
||||||
BW_ASSERT(x != BW_NULL);
|
BW_ASSERT(x != BW_NULL);
|
||||||
#ifndef BW_NO_DEBUG
|
#ifndef BW_NO_DEBUG
|
||||||
if (y != BW_NULL)
|
if (y != BW_NULL) {
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] == BW_NULL || y[j] == BW_NULL || y[i] != y[j]);
|
BW_ASSERT(y[i] == BW_NULL || y[j] == BW_NULL || y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_ppm_update_coeffs_ctrl(coeffs);
|
bw_ppm_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{
|
* requires {{{
|
||||||
* bw_buf bw_common bw_delay bw_dry_wet bw_gain bw_lp1 bw_math bw_one_pole
|
* bw_buf bw_common bw_delay bw_dry_wet bw_gain bw_lp1 bw_math bw_one_pole
|
||||||
* bw_osc_sin bw_phase_gen
|
* bw_osc_sin bw_phase_gen
|
||||||
@ -35,6 +35,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_reverb_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Fixed smoothing of decay parameter in
|
* <li>Fixed smoothing of decay parameter in
|
||||||
@ -1004,6 +1011,13 @@ static inline void bw_reverb_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = 0; j < n_channels; j++)
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
BW_ASSERT(y_l[i] != y_r[j]);
|
BW_ASSERT(y_l[i] != y_r[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++) {
|
||||||
|
BW_ASSERT(i == j || x_l[i] != y_l[j]);
|
||||||
|
BW_ASSERT(i == j || x_l[i] != y_r[j]);
|
||||||
|
BW_ASSERT(i == j || x_r[i] != y_l[j]);
|
||||||
|
BW_ASSERT(i == j || x_r[i] != y_r[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_reverb_update_coeffs_ctrl(coeffs);
|
bw_reverb_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,21 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Ring modulator with variable modulation amount.
|
* Ring modulator with variable modulation amount.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_ring_mod_process_multi()</code> to ensure that buffers
|
||||||
|
* used for both input and output appear at the same channel
|
||||||
|
* indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -362,6 +370,11 @@ static inline void bw_ring_mod_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++) {
|
||||||
|
BW_ASSERT(i == j || x_mod[i] != y[j]);
|
||||||
|
BW_ASSERT(i == j || x_car[i] != y[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_samples; i++) {
|
for (size_t i = 0; i < n_samples; i++) {
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Antialiased tanh-based saturation with parametric bias and gain
|
* Antialiased tanh-based saturation with parametric bias and gain
|
||||||
@ -45,6 +45,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_satur_process_multi()</code>
|
||||||
|
* to ensure that buffers used for both input and output appear at
|
||||||
|
* the same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Fixed gain compensation in <code>bw_satur_process_multi().</li>
|
* <li>Fixed gain compensation in <code>bw_satur_process_multi().</li>
|
||||||
@ -621,6 +628,9 @@ static inline void bw_satur_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_satur_update_coeffs_ctrl(coeffs);
|
bw_satur_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,13 +20,21 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math }}}
|
* requires {{{ bw_common bw_math }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Slew-rate limiter with separate maximum increasing and decreasing rates.
|
* Slew-rate limiter with separate maximum increasing and decreasing rates.
|
||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_slew_lim_process_multi()</code> to ensure that buffers
|
||||||
|
* used for both input and output appear at the same channel
|
||||||
|
* indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -677,10 +685,14 @@ static inline void bw_slew_lim_process_multi(
|
|||||||
#endif
|
#endif
|
||||||
BW_ASSERT(x != BW_NULL);
|
BW_ASSERT(x != BW_NULL);
|
||||||
#ifndef BW_NO_DEBUG
|
#ifndef BW_NO_DEBUG
|
||||||
if (y != BW_NULL)
|
if (y != BW_NULL) {
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] == BW_NULL || y[j] == BW_NULL || y[i] != y[j]);
|
BW_ASSERT(y[i] == BW_NULL || y[j] == BW_NULL || y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_slew_lim_update_coeffs_ctrl(coeffs);
|
bw_slew_lim_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math }}}
|
* requires {{{ bw_common bw_math }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Sample rate reducer.
|
* Sample rate reducer.
|
||||||
@ -31,6 +31,14 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in
|
||||||
|
* <code>bw_sr_reduce_process_multi()</code> to ensure that buffers
|
||||||
|
* used for both input and output appear at the same channel
|
||||||
|
* indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -494,6 +502,9 @@ static inline void bw_sr_reduce_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole }}}
|
* requires {{{ bw_common bw_math bw_one_pole }}}
|
||||||
* 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,
|
||||||
@ -28,6 +28,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_svf_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -773,18 +780,30 @@ static inline void bw_svf_process_multi(
|
|||||||
BW_ASSERT(y_lp == BW_NULL || y_hp == BW_NULL || y_lp != y_hp);
|
BW_ASSERT(y_lp == BW_NULL || y_hp == BW_NULL || y_lp != y_hp);
|
||||||
BW_ASSERT(y_bp == BW_NULL || y_hp == BW_NULL || y_bp != y_hp);
|
BW_ASSERT(y_bp == BW_NULL || y_hp == BW_NULL || y_bp != y_hp);
|
||||||
#ifndef BW_NO_DEBUG
|
#ifndef BW_NO_DEBUG
|
||||||
if (y_lp != BW_NULL)
|
if (y_lp != BW_NULL) {
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y_lp[i] == BW_NULL || y_lp[j] == BW_NULL || y_lp[i] != y_lp[j]);
|
BW_ASSERT(y_lp[i] == BW_NULL || y_lp[j] == BW_NULL || y_lp[i] != y_lp[j]);
|
||||||
if (y_bp != BW_NULL)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y_lp[j]);
|
||||||
|
}
|
||||||
|
if (y_bp != BW_NULL) {
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y_bp[i] == BW_NULL || y_bp[j] == BW_NULL || y_bp[i] != y_bp[j]);
|
BW_ASSERT(y_bp[i] == BW_NULL || y_bp[j] == BW_NULL || y_bp[i] != y_bp[j]);
|
||||||
if (y_hp != BW_NULL)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y_bp[j]);
|
||||||
|
}
|
||||||
|
if (y_hp != BW_NULL) {
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y_hp[i] == BW_NULL || y_hp[j] == BW_NULL || y_hp[i] != y_hp[j]);
|
BW_ASSERT(y_hp[i] == BW_NULL || y_hp[j] == BW_NULL || y_hp[i] != y_hp[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y_hp[j]);
|
||||||
|
}
|
||||||
if (y_lp != BW_NULL && y_bp != BW_NULL)
|
if (y_lp != BW_NULL && y_bp != BW_NULL)
|
||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = 0; j < n_channels; j++)
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{
|
* requires {{{
|
||||||
* bw_common bw_math bw_one_pole bw_osc_sin bw_phase_gen bw_ring_mod
|
* bw_common bw_math bw_one_pole bw_osc_sin bw_phase_gen bw_ring_mod
|
||||||
* }}}
|
* }}}
|
||||||
@ -29,6 +29,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_trem_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -511,6 +518,9 @@ static inline void bw_trem_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_trem_update_coeffs_ctrl(coeffs);
|
bw_trem_update_coeffs_ctrl(coeffs);
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
/*!
|
/*!
|
||||||
* module_type {{{ dsp }}}
|
* module_type {{{ dsp }}}
|
||||||
* version {{{ 1.1.0 }}}
|
* version {{{ 1.1.1 }}}
|
||||||
* requires {{{ bw_common bw_math bw_one_pole bw_svf }}}
|
* requires {{{ bw_common bw_math bw_one_pole bw_svf }}}
|
||||||
* description {{{
|
* description {{{
|
||||||
* Wah effect.
|
* Wah effect.
|
||||||
@ -29,6 +29,13 @@
|
|||||||
* }}}
|
* }}}
|
||||||
* changelog {{{
|
* changelog {{{
|
||||||
* <ul>
|
* <ul>
|
||||||
|
* <li>Version <strong>1.1.1</strong>:
|
||||||
|
* <ul>
|
||||||
|
* <li>Added debugging check in <code>bw_wah_process_multi()</code> to
|
||||||
|
* ensure that buffers used for both input and output appear at the
|
||||||
|
* same channel indices.</li>
|
||||||
|
* </ul>
|
||||||
|
* </li>
|
||||||
* <li>Version <strong>1.1.0</strong>:
|
* <li>Version <strong>1.1.0</strong>:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>Now using <code>BW_NULL</code> and
|
* <li>Now using <code>BW_NULL</code> and
|
||||||
@ -501,6 +508,9 @@ static inline void bw_wah_process_multi(
|
|||||||
for (size_t i = 0; i < n_channels; i++)
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
for (size_t j = i + 1; j < n_channels; j++)
|
for (size_t j = i + 1; j < n_channels; j++)
|
||||||
BW_ASSERT(y[i] != y[j]);
|
BW_ASSERT(y[i] != y[j]);
|
||||||
|
for (size_t i = 0; i < n_channels; i++)
|
||||||
|
for (size_t j = 0; j < n_channels; j++)
|
||||||
|
BW_ASSERT(i == j || x[i] != y[j]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bw_wah_update_coeffs_ctrl(coeffs);
|
bw_wah_update_coeffs_ctrl(coeffs);
|
||||||
|
Loading…
Reference in New Issue
Block a user