Sound Byte Libs 29c5ff3
C++ firmware library for audio applications on 32-bit ARM Cortex-M processors
Loading...
Searching...
No Matches
vca.hpp
Go to the documentation of this file.
1// sbl/widgets/proc/vca.hpp — Voltage Controlled Amplifier (Audio Stack — Widgets)
2//
3// Stateless amplitude modulation. Multiplies audio by a control signal
4// (envelope) or a constant gain.
5//
6// Usage:
7// sbl::widgets::proc::Vca::process(audio, envelope, frames); // modulation
8// sbl::widgets::proc::Vca::apply_gain(audio, gain, frames); // constant
9
10#pragma once
11
12#include <cstdint>
13
14namespace sbl::widgets::proc {
15
16class Vca {
17public:
18 /// @note All public methods are ISR-safe — bounded computation, no I/O.
19
20 /**
21 * @brief Multiply audio by per-sample control signal (envelope)
22 *
23 * Control signal is float [0.0, 1.0] matching Envelope output.
24 *
25 * @param audio Audio buffer (modified in-place, float)
26 * @param control Control buffer (envelope output, [0.0, 1.0])
27 * @param frames Number of samples
28 */
29 static void process(float* audio, const float* control, uint16_t frames) {
30 for (uint16_t i = 0; i < frames; ++i) {
31 audio[i] *= control[i];
32 }
33 }
34
35 /**
36 * @brief Apply constant gain
37 *
38 * @param audio Audio buffer (modified in-place, float)
39 * @param gain Gain factor (0.0 = silence, 1.0 = unity)
40 * @param frames Number of samples
41 */
42 static void apply_gain(float* audio, float gain, uint16_t frames) {
43 for (uint16_t i = 0; i < frames; ++i) {
44 audio[i] *= gain;
45 }
46 }
47};
48
49} // namespace sbl::widgets::proc
static void process(float *audio, const float *control, uint16_t frames)
Multiply audio by per-sample control signal (envelope)
Definition vca.hpp:29
static void apply_gain(float *audio, float gain, uint16_t frames)
Apply constant gain.
Definition vca.hpp:42
Signal processing widgets.
Definition delay.hpp:31