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 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()
.