bw_balance

Stereo balance.

Examples

Here you can download one or more example VST3 plugins for Windows, macOS and Linux. Source code of the audio engine(s) is included in the archive(s).

DescriptionLink
Stereo balance Download
VST® is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.

API

Module type: DSP

bw_balance_coeffs

typedef struct bw_balance_coeffs bw_balance_coeffs;

Coefficients and related.

bw_balance_init()

static inline void bw_balance_init(
	bw_balance_coeffs * BW_RESTRICT coeffs);

Initializes input parameter values in coeffs.

bw_balance_set_sample_rate()

static inline void bw_balance_set_sample_rate(
	bw_balance_coeffs * BW_RESTRICT coeffs,
	float                           sample_rate);

Sets the sample_rate (Hz) value in coeffs.

bw_balance_reset_coeffs()

static inline void bw_balance_reset_coeffs(
	bw_balance_coeffs * BW_RESTRICT coeffs);

Resets coefficients in coeffs to assume their target values.

bw_balance_update_coeffs_ctrl()

static inline void bw_balance_update_coeffs_ctrl(
	bw_balance_coeffs * BW_RESTRICT coeffs);

Triggers control-rate update of coefficients in coeffs.

bw_balance_update_coeffs_audio()

static inline void bw_balance_update_coeffs_audio(
	bw_balance_coeffs * BW_RESTRICT coeffs);

Triggers audio-rate update of coefficients in coeffs.

bw_balance_process1()

static inline void bw_balance_process1(
	const bw_balance_coeffs * BW_RESTRICT coeffs,
	float                                 x_l,
	float                                 x_r,
	float * BW_RESTRICT                   y_l,
	float * BW_RESTRICT                   y_r);

Processes one set of input samples x_l (left) and x_r (right) using coeffs. The left and right output samples are put into y_l (left) and y_r (right) respectively.

bw_balance_process()

static inline void bw_balance_process(
	bw_balance_coeffs * BW_RESTRICT coeffs,
	const float *                   x_l,
	const float *                   x_r,
	float *                         y_l,
	float *                         y_r,
	size_t                          n_samples);

Processes the first n_samples of the input buffers x_l (left) and x_r (right) and fills the first n_samples of the output buffers y_l (left) and y_r (right), while using and updating coeffs (control and audio rate).

bw_balance_process_multi()

static inline void bw_balance_process_multi(
	bw_balance_coeffs * BW_RESTRICT coeffs,
	const float * const *           x_l,
	const float * const *           x_r,
	float * const *                 y_l,
	float * const *                 y_r,
	size_t                          n_channels,
	size_t                          n_samples);

Processes the first n_samples of the n_channels input buffers x_l (left) and x_r (right) and fills the first n_samples of the n_channels output buffers y_l (left) and y_r (right), while using and updating the common coeffs (control and audio rate).

bw_balance_set_balance()

static inline void bw_balance_set_balance(
	bw_balance_coeffs * BW_RESTRICT coeffs,
	float                           value);

Sets the balance value, where -1.f corresponds to hard left balance, 0.f to center balance, and 1.f to hard right balance.

Valid range: [-1.f (hard left balance), 1.f (hard right balance)].

Default value: 0.f.

bw_balance_coeffs_is_valid()

static inline char bw_balance_coeffs_is_valid(
	const bw_balance_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 bw_balance_coeffs.

C++ wrapper

Brickworks::Balance
template<size_t N_CHANNELS>
class Balance {
public:
	Balance();

	void setSampleRate(
		float sampleRate);

	void reset();

	void process(
		const float * const * xL,
		const float * const * xR,
		float * const *       yL,
		float * const *       yR,
		size_t                nSamples);

# ifndef BW_CXX_NO_ARRAY
	void process(
		std::array<const float *, N_CHANNELS> xL,
		std::array<const float *, N_CHANNELS> xR,
		std::array<float *, N_CHANNELS>       yL,
		std::array<float *, N_CHANNELS>       yR,
		size_t                                nSamples);
# endif

	void setBalance(
		float value);
...
}

Changelog

  • Version 1.2.0:
    • Added support for BW_INCLUDE_WITH_QUOTES, BW_NO_CXX, and BW_CXX_NO_EXTERN_C.
    • Added debugging checks from bw_balance_process() to bw_balance_process_multi().
    • Added debugging checks in bw_balance_process_multi() to ensure that buffers used for both input and output appear at the same channel indices.
  • Version 1.1.0:
    • Now using BW_NULL and BW_CXX_NO_ARRAY.
  • Version 1.0.0:
    • bw_balance_process() and bw_balance_process_multi() now use size_t to count samples and channels.
    • Added more const specifiers to input arguments.
    • Moved C++ code to C header.
    • Added overloaded C++ process() function taking C-style arrays as arguments.
    • Removed usage of reserved identifiers.
    • Clearly specified parameter validity ranges.
    • Added debugging code.
  • Version 0.6.0:
    • Removed dependency on bw_config.
  • Version 0.5.0:
    • Added bw_balance_process_multi().
    • bw_balance_process() does not accept NULL buffers anymore.
    • Fixed documentation of bw_balance_process1().
    • Added C++ wrapper.
  • Version 0.3.0:
    • First release.