bwp_smintheus_dist_clip_filt

Nonlinear digital model of the Pro Co® Rat® clipping and filter circuit.

A parameter allows you to control an extra capacitance added in parallel to the output resistance as present in the "fat" variant of the original device.

Examples

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

Contact us

API

Module type: DSP

bwp_smintheus_dist_clip_filt_coeffs

typedef struct bwp_smintheus_dist_clip_filt_coeffs bwp_smintheus_dist_clip_filt_coeffs;

Coefficients and related.

bwp_smintheus_dist_clip_filt_state

typedef struct bwp_smintheus_dist_clip_filt_state bwp_smintheus_dist_clip_filt_state;

Internal state and related.

bwp_smintheus_dist_clip_filt_init()

static inline void bwp_smintheus_dist_clip_filt_init(
	bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs);

Initializes input parameter values in coeffs.

bwp_smintheus_dist_clip_filt_set_sample_rate()

static inline void bwp_smintheus_dist_clip_filt_set_sample_rate(
	bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs,
	float                                             sample_rate);

Sets the sample_rate (Hz) value in coeffs.

bwp_smintheus_dist_clip_filt_reset_coeffs()

static inline void bwp_smintheus_dist_clip_filt_reset_coeffs(
	bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs);

Resets coefficients in coeffs to assume their target values.

bwp_smintheus_dist_clip_filt_reset_state()

static inline float bwp_smintheus_dist_clip_filt_reset_state(
	const bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs,
	bwp_smintheus_dist_clip_filt_state * BW_RESTRICT        state,
	float                                                   x_0);

Resets the given state to its initial values using the given coeffs and the initial input value x_0.

Returns the corresponding initial output value.

bwp_smintheus_dist_clip_filt_reset_state_multi()

static inline void bwp_smintheus_dist_clip_filt_reset_state_multi(
	const bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT              coeffs,
	bwp_smintheus_dist_clip_filt_state * BW_RESTRICT const * BW_RESTRICT state,
	const float *                                                        x_0,
	float *                                                              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 input value in the x_0 array.

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

bwp_smintheus_dist_clip_filt_update_coeffs_ctrl()

static inline void bwp_smintheus_dist_clip_filt_update_coeffs_ctrl(
	bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs);

Triggers control-rate update of coefficients in coeffs.

bwp_smintheus_dist_clip_filt_update_coeffs_audio()

static inline void bwp_smintheus_dist_clip_filt_update_coeffs_audio(
	bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs);

Triggers audio-rate update of coefficients in coeffs.

bwp_smintheus_dist_clip_filt_process1()

static inline float bwp_smintheus_dist_clip_filt_process1(
	const bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs,
	bwp_smintheus_dist_clip_filt_state * BW_RESTRICT        state,
	float                                                   x);

Processes one input sample x using coeffs, while using and updating state. Returns the corresponding output sample.

bwp_smintheus_dist_clip_filt_process()

static inline void bwp_smintheus_dist_clip_filt_process(
	bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs,
	bwp_smintheus_dist_clip_filt_state * BW_RESTRICT  state,
	const float *                                     x,
	float *                                           y,
	size_t                                            n_samples);

Processes the first n_samples of the input buffer x and fills the first n_samples of the output buffer y, while using and updating both coeffs and state (control and audio rate).

bwp_smintheus_dist_clip_filt_process_multi()

static inline void bwp_smintheus_dist_clip_filt_process_multi(
	bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT                    coeffs,
	bwp_smintheus_dist_clip_filt_state * BW_RESTRICT const * BW_RESTRICT state,
	const float * const *                                                x,
	float * const *                                                      y,
	size_t                                                               n_channels,
	size_t                                                               n_samples);

Processes the first n_samples of the n_channels input buffers x and fills the first n_samples of the n_channels output buffers y, while using and updating both the common coeffs and each of the n_channels states (control and audio rate).

bwp_smintheus_dist_clip_filt_set_filter()

static inline void bwp_smintheus_dist_clip_filt_set_filter(
	bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs,
	float                                             value);

Sets the filter potentiometer wiper position (linear mapping — beware, the original device uses a logarithmic pot) to the given value in coeffs.

Valid range: [0.f (bright), 1.f (dark)].

Default value: 0.f.

bwp_smintheus_dist_clip_filt_set_Cout()

static inline void bwp_smintheus_dist_clip_filt_set_Cout(
	bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs,
	float                                             value);

Sets the value of the output capacitance (F) to the given value in coeffs.

Valid range: [0.f, 1e-3f].

Default value: 0.f.

bwp_smintheus_dist_clip_filt_coeffs_is_valid()

static inline char bwp_smintheus_dist_clip_filt_coeffs_is_valid(
	const bwp_smintheus_dist_clip_filt_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_smintheus_dist_clip_filt_coeffs.

bwp_smintheus_dist_clip_filt_state_is_valid()

static inline char bwp_smintheus_dist_clip_filt_state_is_valid(
	const bwp_smintheus_dist_clip_filt_coeffs * BW_RESTRICT coeffs,
	const bwp_smintheus_dist_clip_filt_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_smintheus_dist_clip_filt_state.

C++ wrapper

BrickworksPro::SmintheusDistClipFilt
template<size_t N_CHANNELS = 1>
class SmintheusDistClipFilt {
public:
	SmintheusDistClipFilt();

	void setSampleRate(
		float sampleRate);

	void reset(
		float               x0 = 0.f,
		float * BW_RESTRICT y0 = BW_NULL);

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

	void reset(
		const float * x0,
		float *       y0 = BW_NULL);

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

	void process(
		const float * const * x,
		float * const *       y,
		size_t                nSamples);

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

	void setFilter(
		float value);

	void setCout(
		float value);
...
}

Changelog

  • Version 1.0.0:
    • First release.