Common operations on buffers.
Version: 1.2.0
License:
Requires:
Included in Brickworks, which is:
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).
| Description | Link |
|---|---|
| Monophonic subtractive synth | Download |
| Polyphonic subtractive synth | Download |
| Simple monophonic sampler | Download |
| Simple monophonic subtractive synth | Download |

Module type: Utility
static inline void bw_buf_fill(
float k,
float * BW_RESTRICT dest,
size_t n_elems);
Sets the first n_elems in dest to k.
static inline void bw_buf_copy(
const float * src,
float * dest,
size_t n_elems);
Copies the first n_elems in src into the first n_elems of dest.
static inline void bw_buf_neg(
const float * src,
float * dest,
size_t n_elems);
Inverts the sign of the first n_elems in src and stores the results in the first n_elems of dest.
static inline void bw_buf_add(
const float * src,
float k,
float * dest,
size_t n_elems);
Adds k to the first n_elems in src and stores the results in the first n_elems of dest.
static inline void bw_buf_scale(
const float * src,
float k,
float * dest,
size_t n_elems);
Multiplies the first n_elems in src by k and stores the results in the first n_elems of dest.
static inline void bw_buf_mix(
const float * src1,
const float * src2,
float * dest,
size_t n_elems);
Adds the first n_elems of src1 and src2 and stores the results in the first n_elems of dest.
static inline void bw_buf_mul(
const float * src1,
const float * src2,
float * dest,
size_t n_elems);
Multiplies the first n_elems of src1 and src2 and stores the results in the first n_elems of dest.
static inline void bw_buf_fill_multi(
float k,
float * BW_RESTRICT const * BW_RESTRICT dest,
size_t n_channels,
size_t n_elems);
Sets the first n_elems in each of the n_channels buffers dest to k.
static inline void bw_buf_copy_multi(
const float * const * src,
float * const * dest,
size_t n_channels,
size_t n_elems);
Copies the first n_elems in each of the n_channels buffers src into the first n_elems in each of the n_channels buffers dest.
static inline void bw_buf_neg_multi(
const float * const * src,
float * const * dest,
size_t n_channels,
size_t n_elems);
Inverts the sign of the first n_elems in each of the n_channels buffers src and stores the results in the first n_elems in each of the n_channels buffers dest.
static inline void bw_buf_add_multi(
const float * const * src,
float k,
float * const * dest,
size_t n_channels,
size_t n_elems);
Adds k to the first n_elems in each of the n_channels buffers src and stores the results in the first n_elems in each of the n_channels buffers dest.
static inline void bw_buf_scale_multi(
const float * const * src,
float k,
float * const * dest,
size_t n_channels,
size_t n_elems);
Multiplies the first n_elems in each of the n_channels buffers src by k and stores the results in the first n_elems in each of the n_channels buffers dest.
static inline void bw_buf_mix_multi(
const float * const * src1,
const float * const * src2,
float * const * dest,
size_t n_channels,
size_t n_elems);
Adds the first n_elems in each of the n_channels buffers src1 and src2 and stores the results in the first n_elems in each of the n_channels buffers dest.
static inline void bw_buf_mul_multi(
const float * const * src1,
const float * const * src2,
float * const * dest,
size_t n_channels,
size_t n_elems);
Multiplies the first n_elems in each of the n_channels buffers src1 and src2 and stores the results in the first n_elems in each of the n_channels buffers dest.
template<size_t N_CHANNELS>
inline void bufFill(
float k,
float * BW_RESTRICT const * BW_RESTRICT dest,
size_t nSamples);
# ifndef BW_CXX_NO_ARRAY
template<size_t N_CHANNELS>
inline void bufFill(
float k,
std::array<float * BW_RESTRICT, N_CHANNELS> dest,
size_t nSamples);
# endif
template<size_t N_CHANNELS>
inline void bufCopy(
const float * const * src,
float * const * dest,
size_t nSamples);
# ifndef BW_CXX_NO_ARRAY
template<size_t N_CHANNELS>
inline void bufCopy(
const std::array<const float *, N_CHANNELS> src,
const std::array<float *, N_CHANNELS> dest,
size_t nSamples);
# endif
template<size_t N_CHANNELS>
inline void bufNeg(
const float * const * src,
float * const * dest,
size_t nSamples);
# ifndef BW_CXX_NO_ARRAY
template<size_t N_CHANNELS>
inline void bufNeg(
const std::array<const float *, N_CHANNELS> src,
const std::array<float *, N_CHANNELS> dest,
size_t nSamples);
# endif
template<size_t N_CHANNELS>
inline void bufAdd(
const float * const * src,
float k,
float * const * dest,
size_t nSamples);
# ifndef BW_CXX_NO_ARRAY
template<size_t N_CHANNELS>
inline void bufAdd(
const std::array<const float *, N_CHANNELS> src,
float k,
const std::array<float *, N_CHANNELS> dest,
size_t nSamples);
# endif
template<size_t N_CHANNELS>
inline void bufScale(
const float * const * src,
float k,
float * const * dest,
size_t nSamples);
# ifndef BW_CXX_NO_ARRAY
template<size_t N_CHANNELS>
inline void bufScale(
const std::array<const float *, N_CHANNELS> src,
float k,
const std::array<float *, N_CHANNELS> dest,
size_t nSamples);
# endif
template<size_t N_CHANNELS>
inline void bufMix(
const float * const * src1,
const float * const * src2,
float * const * dest,
size_t nSamples);
# ifndef BW_CXX_NO_ARRAY
template<size_t N_CHANNELS>
inline void bufMix(
const std::array<const float *, N_CHANNELS> src1,
const std::array<const float *, N_CHANNELS> src2,
const std::array<float *, N_CHANNELS> dest,
size_t nSamples);
# endif
template<size_t N_CHANNELS>
inline void bufMul(
const float * const * src1,
const float * const * src2,
float * const * dest,
size_t nSamples);
# ifndef BW_CXX_NO_ARRAY
template<size_t N_CHANNELS>
inline void bufMul(
const std::array<const float *, N_CHANNELS> src1,
const std::array<const float *, N_CHANNELS> src2,
const std::array<float *, N_CHANNELS> dest,
size_t nSamples);
# endif
bw_buf_copy() and bw_buf_copy_multi().BW_INCLUDE_WITH_QUOTES, BW_NO_CXX, and BW_CXX_NO_EXTERN_C.bw_buf_{neg,add,scale,mix,mul}_multi() to ensure that buffers used for both input and output appear at the same channel indices.BW_NULL and BW_CXX_NO_ARRAY.size_t instead of BW_SIZE_T.size_t to count samples.const and BW_RESTRICT specifiers to input arguments.NULL and that output buffers are different in debugging code.bw_buf_*_multi().bw_buf_neg().bw_buf_fill() and bw_buf_add().