30#ifndef SBL_DSP_TYPES_FRAME_HPP_
31#define SBL_DSP_TYPES_FRAME_HPP_
39template<u
int16_t MaxFrames = 48>
51 uint16_t
begin(uint16_t requested) {
52 uint16_t n = (requested > MaxFrames) ? MaxFrames : requested;
53 for (uint16_t i = 0; i < n; ++i) {
67 void end(int32_t* tx, uint16_t n)
const {
77 void scale(
float gain, uint16_t n) {
78 for (uint16_t i = 0; i < n; ++i) {
91 void apply(
const float* mod, uint16_t n) {
92 for (uint16_t i = 0; i < n; ++i) {
106 void mix_mono(
const float* src,
float gain, uint16_t n) {
107 for (uint16_t i = 0; i < n; ++i) {
108 float s = src[i] * gain;
119 void mix(
const Frame& other,
float gain, uint16_t n) {
120 for (uint16_t i = 0; i < n; ++i) {
132 void mix_stereo(
const float* src_l,
const float* src_r,
float gain,
134 for (uint16_t i = 0; i < n; ++i) {
135 left[i] += src_l[i] * gain;
136 right[i] += src_r[i] * gain;
149 void tap(
float* dst_l,
float* dst_r, uint16_t n)
const {
150 for (uint16_t i = 0; i < n; ++i) {
160 for (uint16_t i = 0; i < n; ++i) {
DMA boundary conversion utilities.
Sample rate, sample formats, blocks and frames.
void interleave_from_float(const float *left, const float *right, int32_t *interleaved, uint16_t frames)
void end(int32_t *tx, uint16_t n) const
void mix(const Frame &other, float gain, uint16_t n)
void mix_mono(const float *src, float gain, uint16_t n)
void apply(const float *mod, uint16_t n)
void tap(float *dst_l, float *dst_r, uint16_t n) const
void mix_stereo(const float *src_l, const float *src_r, float gain, uint16_t n)
uint16_t begin(uint16_t requested)
void scale(float gain, uint16_t n)