bwp_env_gen

Advanced version of bw_env_gen with extra delay and hold phases (DADSHR), controllable linear/exponential curve shapes, fixed phase duration, and higher/sub-sample accuracy.

Examples

We can privately hand you one or more example plugins if you are interested.

Contact us

API

Module type: DSP

bwp_env_gen_coeffs

typedef struct bwp_env_gen_coeffs bwp_env_gen_coeffs;

Coefficients and related.

bwp_env_gen_state

typedef struct bwp_env_gen_state bwp_env_gen_state;

Internal state and related.

bwp_env_gen_phase

typedef enum {
	bwp_env_gen_phase_off,
	bwp_env_gen_phase_delay,
	bwp_env_gen_phase_attack,
	bwp_env_gen_phase_decay,
	bwp_env_gen_phase_sustain,
	bwp_env_gen_phase_hold,
	bwp_env_gen_phase_release
} bwp_env_gen_phase;

Envelope generator phase:

  • bwp_env_gen_phase_off: off phase;
  • bwp_env_gen_phase_delay: delay phase;
  • bwp_env_gen_phase_attack: attack phase;
  • bwp_env_gen_phase_decay: decay phase;
  • bwp_env_gen_phase_sustain: sustain phase;
  • bwp_env_gen_phase_hold: hold phase;
  • bwp_env_gen_phase_release: release phase.

bwp_env_gen_init()

static inline void bwp_env_gen_init(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs);

Initializes input parameter values in coeffs.

bwp_env_gen_set_sample_rate()

static inline void bwp_env_gen_set_sample_rate(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            sample_rate);

Sets the sample_rate (Hz) value in coeffs.

bwp_env_gen_reset_coeffs()

static inline void bwp_env_gen_reset_coeffs(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs);

Resets coefficients in coeffs to assume their target values.

bwp_env_gen_reset_state()

static inline float bwp_env_gen_reset_state(
	const bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	bwp_env_gen_state * BW_RESTRICT        state,
	char                                   gate_0);

Resets the given state to its initial values using the given coeffs and the initial gate value (0 for off, non-0 for on) gate_0.

Returns the corresponding initial output value.

bwp_env_gen_reset_state_multi()

static inline void bwp_env_gen_reset_state_multi(
	const bwp_env_gen_coeffs * BW_RESTRICT              coeffs,
	bwp_env_gen_state * BW_RESTRICT const * BW_RESTRICT state,
	const char * BW_RESTRICT                            gate_0,
	float * BW_RESTRICT                                 y_0,
	size_t                                              n_channels);

Resets each of the n_channels states to its initial values using the given coeffs and the corresponding initial gate values (0 for off, non-0 for on) in the gate_0 array.

The corresponding initial output values are written into the y_0 array, if not BW_NULL.

bwp_env_gen_update_coeffs_ctrl()

static inline void bwp_env_gen_update_coeffs_ctrl(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs);

Triggers control-rate update of coefficients in coeffs.

bwp_env_gen_update_coeffs_audio()

static inline void bwp_env_gen_update_coeffs_audio(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs);

Triggers audio-rate update of coefficients in coeffs.

bwp_env_gen_process_ctrl()

static inline void bwp_env_gen_process_ctrl(
	const bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	bwp_env_gen_state * BW_RESTRICT        state,
	char                                   gate);

Triggers control-rate update of the internal state using coeffs and the given gate value (0 for off, non-0 for on).

bwp_env_gen_process1()

static inline float bwp_env_gen_process1(
	const bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	bwp_env_gen_state * BW_RESTRICT        state);

Generates and returns one sample using coeffs, while using and updating state (audio rate only).

bwp_env_gen_process()

static inline void bwp_env_gen_process(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	bwp_env_gen_state * BW_RESTRICT  state,
	char                             gate,
	float * BW_RESTRICT              y,
	size_t                           n_samples);

Generates and fills the first n_samples of the output buffer y using the given gate value (0 for off, non-0 for on), while using and updating both coeffs and state (control and audio rate).

y may be BW_NULL.

bwp_env_gen_process_multi()

static inline void bwp_env_gen_process_multi(
	bwp_env_gen_coeffs * BW_RESTRICT                    coeffs,
	bwp_env_gen_state * BW_RESTRICT const * BW_RESTRICT state,
	const char * BW_RESTRICT                            gate,
	float * BW_RESTRICT const * BW_RESTRICT             y,
	size_t                                              n_channels,
	size_t                                              n_samples);

Generates and fills the first n_samples of the n_channels output buffers y using the given n_channels gate values (0 for off, non-0 for on), while using and updating both the common coeffs and each of the n_channels states (control and audio rate).

y or any element of y may be BW_NULL.

bwp_env_gen_set_delay()

static inline void bwp_env_gen_set_delay(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            value);

Sets the delay time to value (s) in coeffs.

Valid range: [0.f, 60.f].

Default value: 0.f.

bwp_env_gen_set_attack()

static inline void bwp_env_gen_set_attack(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            value);

Sets the attack time to value (s) in coeffs.

Valid range: [0.f, 60.f].

Default value: 0.f.

bwp_env_gen_set_decay()

static inline void bwp_env_gen_set_decay(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            value);

Sets the decay time to value (s) in coeffs.

Valid range: [0.f, 60.f].

Default value: 0.f.

bwp_env_gen_set_sustain()

static inline void bwp_env_gen_set_sustain(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            value);

Sets the sustain level to value in coeffs.

Valid range: [0.f, 1.f].

Default value: 1.f.

bwp_env_gen_set_hold()

static inline void bwp_env_gen_set_hold(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            value);

Sets the hold time to value (s) in coeffs.

Valid range: [0.f, 60.f].

Default value: 0.f.

bwp_env_gen_set_release()

static inline void bwp_env_gen_set_release(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            value);

Sets the release time to value (s) in coeffs.

Valid range: [0.f, 60.f].

Default value: 0.f.

bwp_env_gen_set_attack_midpoint()

static inline void bwp_env_gen_set_attack_midpoint(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            value);

Sets the attack midpoint value (%) in coeffs.

Valid range: [0.001f, 99.999f].

Default value: 50.f.

bwp_env_gen_set_decay_midpoint()

static inline void bwp_env_gen_set_decay_midpoint(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            value);

Sets the decay midpoint value (%) in coeffs.

Valid range: [0.001f, 99.999f].

Default value: 50.f.

bwp_env_gen_set_decay_midpoint()

static inline void bwp_env_gen_set_release_midpoint(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	float                            value);

Sets the release midpoint value (%) in coeffs.

Valid range: [0.001f, 99.999f].

Default value: 50.f.

bwp_env_gen_set_skip_sustain()

static inline void bwp_env_gen_set_skip_sustain(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	char                             value);

Sets whether the sustain phase should be skipped (value non-0) or not (0).

Default value: 0 (do not skip).

bwp_env_gen_set_always_reach_sustain()

static inline void bwp_env_gen_set_always_reach_sustain(
	bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	char                             value);

Sets whether the sustain phase should be reached even if gate goes off before (value non-0) or not (0).

Default value: 0 (off).

bwp_env_gen_get_phase()

static inline bwp_env_gen_phase bwp_env_gen_get_phase(
	const bwp_env_gen_state * BW_RESTRICT state);

Returns the current envelope generator phase as stored in state.

bwp_env_gen_get_y_z1()

static inline float bwp_env_gen_get_y_z1(
	const bwp_env_gen_state * BW_RESTRICT state);

Returns the last output sample as stored in state.

bwp_env_gen_coeffs_is_valid()

static inline char bwp_env_gen_coeffs_is_valid(
	const bwp_env_gen_coeffs * BW_RESTRICT coeffs);

Tries to determine whether coeffs is valid and returns non-0 if it seems to be the case and 0 if it is certainly not. False positives are possible, false negatives are not.

coeffs must at least point to a readable memory block of size greater than or equal to that of bwp_env_gen_coeffs.

bwp_env_gen_state_is_valid()

static inline char bwp_env_gen_state_is_valid(
	const bwp_env_gen_coeffs * BW_RESTRICT coeffs,
	const bwp_env_gen_state * BW_RESTRICT  state);

Tries to determine whether state is valid and returns non-0 if it seems to be the case and 0 if it is certainly not. False positives are possible, false negatives are not.

If coeffs is not BW_NULL extra cross-checks might be performed (state is supposed to be associated to coeffs).

state must at least point to a readable memory block of size greater than or equal to that of bwp_env_gen_state.

C++ wrapper

BrickworksPro::EnvGen
template<size_t N_CHANNELS>
class EnvGen {
public:
	EnvGen();

	void setSampleRate(
		float sampleRate);

	void reset(
		char                gate0 = 0,
		float * BW_RESTRICT y0 = nullptr);

# ifndef BW_CXX_NO_ARRAY
	void reset(
		char                                        gate0,
		std::array<float, N_CHANNELS> * BW_RESTRICT y0);
# endif

	void reset(
		const char * BW_RESTRICT gate0,
		float * BW_RESTRICT      y0 = nullptr);

# ifndef BW_CXX_NO_ARRAY
	void reset(
		std::array<char, N_CHANNELS>                gate0,
		std::array<float, N_CHANNELS> * BW_RESTRICT y0 = nullptr);
# endif

	void process(
		const char * BW_RESTRICT                gate,
		float * BW_RESTRICT const * BW_RESTRICT y,
		size_t                                  nSamples);

# ifndef BW_CXX_NO_ARRAY
	void process(
		std::array<char, N_CHANNELS>                gate,
		std::array<float * BW_RESTRICT, N_CHANNELS> y,
		size_t                                      nSamples);
# endif

	void setDelay(
		float value);

	void setAttack(
		float value);

	void setDecay(
		float value);

	void setSustain(
		float value);

	void setHold(
		float value);

	void setRelease(
		float value);

	void setAttackMidpoint(
		float value);

	void setDecayMidpoint(
		float value);

	void setReleaseMidpoint(
		float value);

	void setSkipSustain(
		bool value);

	void setAlwaysReachSustain(
		bool value);

	bwp_env_gen_phase getPhase(
		size_t channel);

	float getYZ1(
		size_t channel);
...
}

Changelog

  • Version 1.0.0:
    • First release.