• v1.2.0 5c91a48e42

    v 1.2.0 Stable

    stefano released this 2024-12-04 11:40:54 +00:00 | 1 commits to main since this release

    • Added BW_INCLUDE_WITH_QUOTES, BW_NO_CXX, and BW_CXX_NO_EXTERN_C to bw_common and used them everywhere.
    • Added optional sticky gain-reach threshold and related API to bw_gain.
    • Added gate parameter to bw_bd_reduce and fx_bitcrush example.
    • Added phase_inc_min and phase_inc_max parameters and related debugging checks to bw_phase_gen.
    • Added bw_dry_wet_get_wet() and bw_dry_wet_get_wet_cur() and corresponding C++ API.
    • Added bw_signfilli64(), bw_mini64(), bw_maxi64(), bw_clipi64(), bw_minu64(), bw_maxu64(), bw_clipu64(), bw_log2_1p2xf(), bw_log_1pexpxf(), and bw_log10_1p10xf() to bw_math.
    • Added bw_buf_copy() and bw_buf_copy_multi() to bw_buf.
    • Added bw_note_queue_all_notes_off() to bw_note_queue.
    • Strengthened bw_env_gen implementation and fixed bw_env_reset_state() and bw_env_reset_state_multi() to take into account skip_sustain parameter value.
    • Fixed rounding bug in bw_phase_gen when frequency is tiny.
    • Fixed bug in bw_note_queue_is_valid() by which the 128th event or note pressed was incorrectly considered invalid.
    • Accomodated MSVC reporting incorrect C++ standard support in bw_common.
    • Added more checks in bw_osc_pulse_coeffs_is_valid() and bw_osc_tri_coeffs_is_valid().
    • Revised debugging checks in *process_multi() in all modules.
    • Added debugging checks on combined parameter limits in *reset_state() in bw_hs1, bw_hs2, bw_ls1, bw_ls2, bw_peak, bw_phaser.
    • Added debugging check in bw_phase_reset_state() to ensure phase_0 is in valid range and documented valid range.
    • Added debugging check in bw_env_gen_process1() to ensure that output is in valid range.
    • Added missing static inline to bw_voice_alloc().
    • Added missing BW_RESTRICT to the output arguments of bw_reverb_process1().
    • Fixed buffering issue in fx_bitcrush example.
    • Fixed process() call in fxpp_pan.
    • Fixed sample counting in synth* examples.
    • Fixed fx_bitcrush on Daisy Seed.
    • Adapted all examples to Tibia 0.0.4.
    • All iOS examples now target iOS 14.0.
    • Clarified which transfer functions are implemented in the documentation of bw_mm1 and bw_mm2.
    • Fixed documentation typo in bw_phase_gen's module description.
    • Removed spurious sentence from the documentation of bw_reverb_reset_state().
    • Fixed typos in the documentation of bw_note_queue_reset().
    Downloads
  • v1.1.0 5a4b9dc9b3

    v 1.1.0 Stable

    stefano released this 2024-02-24 18:23:25 +00:00 | 54 commits to main since this release

    • Added new bw_cab module.
    • Added new fx_cab and fxpp_cab examples.
    • Added skip_sustain and always_reach_sustain parameters to bw_env_gen.
    • Added silence_dc parameter to bw_bd_reduce.
    • Added BW_NULL definition in bw_common and used it throughout the entire codebase.
    • Added BW_CXX_NO_ARRAY to control the inclusion of features depending on C++ .
    • Relaxed sidechain APIs in bw_comp and bw_noise_gate to accept BW_NULL to represent null sidechain inputs.
    • Added setThreshLin() and setThreshDb() methods to the C++ APIs of bw_comp and bw_noise_gate to fix naming typos without breaking the API.
    • Reworked all example code and added LV2, command line application, and C++/WebAssembly targets.
    • Fixed gain compensation in bw_satur_process_multi().
    • Fixed rounding bug in bw_phase_gen when frequency is tiny and negative.
    • Fixed smoothing of decay parameter in bw_reverb.
    • Fixed computation of initial states in bw_mm1 and bw_mm2.
    • Fixed sign-related issues in bw_hash_sdbm(), bw_truncf(), bw_roundf(), and bw_sqrtf() (thanks Kevin Molcard).
    • Replace GCC pragmas to suppress uninitalized variable warnings with useless harmless statements in bw_env_gen, bw_hs2, bw_ls2, bw_one_pole, and bw_peak.
    • Fixed documentation typos in bw_ls2.
    • Updated examples' documentation.
    Downloads
  • v1.0.0 dad7485016

    v 1.0.0 Stable

    stefano released this 2023-09-28 11:31:20 +00:00 | 138 commits to main since this release

    • Removed C++ headers and moved C++ code to now-unique C/C++ headers.
    • Added extern "C" linkage specifier to C functions declarations and definitions.
    • Added bw_*_reset_state_multi() and updated C++ APIs in this regard.
    • Now bw_*_reset_state() take initial input values and return initial output values.
    • Added more const and BW_RESTRICT specifiers to input arguments.
    • Added overloaded C++ functions taking C-style arrays as arguments.
    • Added debugging code to all modules and improved existing debugging code.
    • Removed usage of reserved identifiers and designated initializers.
    • Now using size_t rather than BW_SIZE_T and for counting items.
    • Improved documentation w.r.t. validity of input values and approximation errors.
    • Added pragmas to silence bogus GCC uninitialized variable warnings.
    • Made control over inclusion of standard library headers more explicit via specific preprocessor definitions.
    • Introduced BW_NO_DEBUG and prevented useless inclusion of assert.h.
    • Changed order of arguments to improve consistency in bw_buf.
    • Renamed bw_min0xf() as bw_min0f() and bw_max0xf() as bw_max0f().
    • Removed precision suffixes from function names in bw_math.
    • New implementations for bw_min0f(), bw_max0f(), bw_minf(), bw_maxf(), and bw_clipf().
    • Fixed rounding bug in bw_roundf() when absolute value of input was in [0.5f, 1.f].
    • Fixed bw_ceilf() for negative input values.
    • Fixed bw_sqrtf() for very large input values and improved implementation.
    • Fixed input validity ranges in bw_asinhf() and bw_acoshf().
    • Removed redundant status member from bw_note_queue_event.
    • Possibly improved memeory layout of bw_note_queue.
    • Clarified ambiguity in the documentation of bw_note_queue_status.
    • Specified that velocity can be negative in bw_voice_alloc_opts.
    • Fixed output polarity in bw_ap1.
    • Added bw_bd_reduce_set_sample_rate().
    • Changed default value for gain compensation to off in bw_clip.
    • Fixed missing smoothing filter initialization in bw_comp.
    • Fixed missing forced coefficients' update in bw_comp_reset_coeffs().
    • Improved and strengthened algorithm in bw_comp.
    • Removed read() and write() from C++ API in bw_delay.
    • Adjusted internal peak cutoff to more sensible value in bw_dist.
    • Improved algorithm to be a bit more faithful to the original in bw_drive.
    • bw_drywet renamed as bw_dry_wet.
    • Renamed bw_env_gen_update_state_ctrl() as bw_env_gen_process_ctrl().
    • Faster and more robust implementation in bw_env_gen.
    • Improved algorithm to be a bit more faithful to the original in bw_fuzz.
    • Added bw_gain_get_gain_lin().
    • Renamed bw_gain_get_gain() as bw_gain_get_gain_cur().
    • Simplified implementation to use less memory in bw_gain.
    • Added prewarp_at_cutoff and prewarp_freq parameters in bw_ap1, bw_ap2, bw_hp1, bw_hs1, bw_ls1, bw_ls2, bw_notch, and bw_peak.
    • Fixed documentation to indicate correct default parameter values in bw_hs1, bw_hs2, bw_ls1, bw_ls2, bw_notch, and bw_peak.
    • Fixed bug when setting default parameter values in bw_hs1_init().
    • Limited actual prewarping frequency to prevent instability in bw_lp1.
    • Fixed missing smoothing filter initialization in bw_noise_gate.
    • Fixed missing forced coefficients' update in bw_noise_gate_reset_coeffs().
    • Added bw_noise_gen_reset_coeffs(), bw_noise_gen_update_coeffs_ctrl(), and bw_noise_gen_update_coeffs_audio().
    • Improved and strengthened algorithm in bw_noise_gate.
    • Now using backward Euler rather than impulse invariant method in bw_one_pole.
    • Added coeffs argument to bw_one_pole_state_is_valid().
    • Changed implementation topology to use less memory in bw_osc_filt.
    • Now antialiasing should work also with negative input increments in bw_osc_pulse, bw_osc_saw, and bw_osc_tri.
    • Clearly specified validity ranges for audio-rate signals in bw_osc_pulse, bw_osc_saw, bw_osc_sin, and bw_osc_tri.
    • Added bw_osc_saw_set_sample_rate(), bw_osc_saw_reset_coeffs(), bw_osc_saw_update_coeffs_ctrl(), and bw_osc_saw_update_coeffs_audio().
    • Now using parabolic curves instead of trigonometric ones in bw_pan.
    • Fixed smoothing coefficients update in bw_phase_gen_reset_coeffs().
    • Removed internal limits on cutoff frequency in bw_phaser.
    • Added bw_pink_filt_reset_coeffs(), bw_pink_filt_update_coeffs_ctrl(), and bw_pink_filt_update_coeffs_audio().
    • Fixed type of coefficient in bw_pink_filt_process1().
    • Enforced minimum output value -600.f in bw_ppm.
    • bw_ringmod renamed as bw_ring_mod.
    • Fixed inverted-polarity modulation (for real this time) in bw_ring_mod.
    • Changed default value for gain compensation to off in bw_satur.
    • Added bw_slew_lim_process1_none().
    • Fixed setting of default parameter values in bw_slew_lim_init().
    • Fixed documentation of bw_slew_lim_update_coeffs_audio().
    • Added bw_sr_reduce_set_sample_rate(), bw_sr_reduce_reset_coeffs(), bw_sr_reduce_update_coeffs_ctrl(), and bw_sr_reduce_update_coeffs_audio().
    • Removed useless computation when upsampling in bw_src.
    • Clarified when the same buffers cannot be used for both input and output in bw_src and bw_src_int.
    • Fixed frequency response and improved speed in bw_src_int.
    • Changed model to get positive polarity at the bandpass output in bw_svf.
    • Limited actual prewarping frequency to prevent instability in bw_svf.
    • Adjusted examples accordingly to changes.
    Downloads
  • v0.6.0 fd6c9cc052

    v 0.6.0 Pre-Release

    stefano released this 2023-08-05 07:11:31 +00:00 | 262 commits to main since this release

    • Added support and examples for Android and iOS.
    • Added debugging definitions and related new functions in bw_common.
    • Added debugging code to bw_buf, bw_math, bw_note_queue, bw_rand, and bw_voice_alloc, and also partly to bw_one_pole.
    • Removed bw_config module.
    • Removed bw_omega_3log() and bw_omega_3lognr() from bw_math.
    • bw_one_pole_process*() now use BW_SIZE_T to count samples and channels.
    • bw_voice_alloc() now uses BW_SIZE_T to count voices.
    • Fixed bugs in bw_pow10f_3() and bw_acoshf_3().
    • Fixed bug when using very high cutoff values in bw_one_pole.
    • Fixed bug when signal level is extremely low in bw_ppm.
    • Fixed harmless compiler warning in bw_randu32().
    • Fixed number of channels in fx_reverb.
    • Fixed (unused) note velocity in synth_poly and synthpp_poly.
    Downloads
  • v0.5.0 41e87b69a4

    v 0.5.0 Pre-Release

    stefano released this 2023-07-13 14:40:31 +00:00 | 287 commits to main since this release

    • Added new bw_fuzz, bw_clip, bw_dist, bw_drive, bw_drywet, bw_reverb, bw_note_queue, and bw_voice_alloc modules.
    • Added new fx_fuzz, fx_clip, fx_dist, fx_drive, fx_reverb, synth_poly, fx_lp1, fx_one_pole, and fx_slew_lim examples.
    • Added C++ wrappers for all dsp modules and for bw_buf.
    • Added new corresponding C++ examples for each C example.
    • Added multichannel API to all dsp modules and to bw_buf.
    • Added new bw_buf_neg() routine to bw_buf.
    • Added new bw_gain_get_gain() function to bw_gain.
    • Changed mem_req/set API in bw_delay, bw_comb, bw_chorus, bw_reverb.
    • Turned gate parameter into a control-rate input in bw_env_gen.
    • bw_balance_process() and bw_pan_process() do not accept NULL buffers anymore.
    • Made VST3 and web examples' common code stricter and more redundant w.r.t. memory usage and finalization.
    • Fixed bug in bw_svf_process() occurring when only y_hp was NULL.
    • Fixed prewarping-related instability bug in bw_svf.
    • Fixed inverted-polarity modulation in bw_ringmod.
    • Fixed coefficients' reset in bw_phaser and bw_chorus.
    • Fixed initial conditions in bw_satur.
    • Fixed unused variable warnings in VST3 and Daisy Seed examples' common code.
    • Fixed unused variable warnings in bw_slew_lim.
    • Fixed left shift of negative value warnings in bw_math.
    • Fixed typos in the documentaion of bw_peak, bw_comp, bw_osc_tri, bw_ringmod, bw_balance, bw_slew_lim, and bw_common.
    • Fixed code tags and heading levels in documentation of several modules.
    • Fixed setting of default parameter values in synth_simple and synth_mono.
    • Updated examples to use multichannel APIs where possible.
    • Removed useless random state from synth_simple.
    • Now forcing minimum attack and release times for VCAs of synth examples.
    • Build system updated to emit as many compilation warnings as possible.
    Downloads
  • v0.4.0 5dfa580d3e

    v 0.4.0 Pre-Release

    stefano released this 2023-04-19 06:49:20 +00:00 | 372 commits to main since this release

    • Added new bw_ringmod, bw_trem, bw_phaser, bw_delay, bw_src_int, bw_src, bw_comb, and bw_chorus modules.
    • Added new fx_ringmod, fx_trem, fx_phaser, fx_delay, fx_comb, fx_chorus, fx_vibrato, and fx_flanger examples.
    • Added MIDI over UART support for example synthesizers running on the Daisy Seed platform.
    • Added new bw_buf_add() and bw_buf_fill() routines to bw_buf.
    • Added new bw_ceilf(), bw_intfracf(), bw_sinhf_3(), bw_coshf_3(), bw_asinhf_3(), and bw_acoshf_3() math routines.
    • Added BW_SIZE_T definition to bw_common.
    • Added initial value parameters to bw_*reset_state() in bw{lp1,ap1,hp1,hs1,ls1,mm1,ap2,hs2,ls2,mm2,notch,peak,svf}.
    • Fixed typos in the documentation of bw_wah.
    • Fixed unused parameter warnings.
    • Now using bw_src_int in fx_satur.
    Downloads
  • v0.3.0 fd2b8e69fe

    v 0.3.0 Pre-Release

    stefano released this 2023-02-22 13:35:50 +00:00 | 413 commits to main since this release

    • Added new bw_ap1, bw_ap2, bw_balance, bw_bd_reduce, bw_buf, bw_comp, bw_hp1, bw_hs1, bw_hs2, bw_lp1, bw_ls1, bw_ls2, bw_mm1, bw_mm2, bw_notch, bw_noise_gate, bw_pan, bw_peak, bw_ppm, and bw_sr_reduce modules.
    • Added new fx_ap1, fx_ap2, fx_balance, fx_bitcrush, fx_comp, fx_eq_3band, fx_hp1, fx_hs1, fx_ls1, fx_mm1, fx_mm2, fx_noise_gate, fx_notch, fx_pan examples.
    • Added support and examples for the Daisy Seed platform.
    • Strengthened bw_svf algorithm for modulation and added prewarp_at_cutoff and prewarp_freq parameters.
    • Changed bw_wah to be a bandpass and not a lowpass filter.
    • Renamed bw_vol as bw_gain, added new smooth_tau parameter, and changed gain parameter API to express values in linear gain an dB.
    • Added new bw_log10f_3(), bw_pow10f_3(), bw_dB2linf_3(), and bw_lin2dBf_3() math routines.
    • Fixed computation bug in bw_sqrtf_2().
    • Avoid a warning related to a potentially uninitialized variable in bw_env_gen.
    • Reworked example source code structure and Makefiles.
    • Stopped using dynamic memory allocation for individual modules in example code.
    • Adjusted noise levels in synth_mono example.
    • Added BW_RESTRICT to bw_svf_process1() arguments.
    • Fixed bad defintion of bw_pink_filt_set_sample_rate_scaling().
    • Now using bw_ppm in synth_mono and synth_simple examples.
    • Moved header inclusions where most appropriate in bw_env_follow.
    • Added missing API documentation in bw_pink_filt.
    • Fixed typo in the documentation of bw_svf_set_Q().
    • Fixed license headers in all source files.
    Downloads
  • v0.2.0 ed1cb6dab1

    v 0.2.0 Pre-Release

    stefano released this 2022-12-04 18:19:08 +00:00 | 479 commits to main since this release

    • Refactored API of DSP modules for better flexibility and performance.
    • Removed bw_inline_one_pole and bw_inline_slew_rate (functionality implemented by bw_one_pole and bw_slew_rate, respectively).
    • Added bw_wah and bw_example_fx_wah.
    • Added bw_satur and bw_example_fx_satur.
    • Added bw_pink_filt.
    • Added BW_RESTRICT and removed BW_MALLOC, BW_REALLOC, and BW_FREE from bw_common.
    • Added new monophonic synth example bw_example_synth_mono.
    • Added new bw_sin2pif_3(), bw_cos2pif_3(), bw_tan2pif_3(), bw_omega_3lognr(), and bw_tanhf_3() fast math routines.
    • Using bw_one_pole for smoothing bw_vol.
    • Simplified and rewritten example synth, renamed as bw_example_synth_simple.
    • Renamed bw_example_fx to bw_example_fx_svf are removed output "Level" parameter from it.
    • Using correct "Fx|Filter" VST3 subcategory for bw_example_fx_svf.
    • Correctly handling note on events with velocity 0 as note offs.
    • Using official logo as VST3 plugin icon.
    • Minor performance improvements in bw_svf.
    • Fixed potential bug when setting parameters in examples.
    • Fixed missing initialization of sticky mode in bw_one_pole.
    Downloads
  • v0.1.0 61d0c690e9

    v 0.1.0 Pre-Release

    stefano released this 2022-11-15 23:49:51 +00:00 | 531 commits to main since this release

    First public alpha release

    Downloads