Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
voice_modulation_buffer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <span>
5#include <vector>
6
7namespace pulp::audio {
8
24
25enum class VoiceModulationRate : std::uint8_t {
28};
29
39
44
51
53 std::uint32_t max_lanes = 0;
54 std::uint32_t max_frames = 0;
55};
56
60 float constant_value = 0.0f;
61 const float* values = nullptr;
62 std::uint32_t frame_count = 0;
63
64 float value_at(std::uint32_t frame) const noexcept;
65};
66
68 std::span<const VoiceModulationLane> lanes{};
69 std::uint32_t frame_count = 0;
70
71 bool empty() const noexcept { return lanes.empty(); }
72 const VoiceModulationLane* find(VoiceModulationTarget target) const noexcept;
74 std::uint32_t frame,
75 float fallback = 0.0f) const noexcept;
76};
77
79public:
81
82 // Control/background-thread only. Allocates fixed lane and audio-rate
83 // storage. The buffer stores resolved values; it does not apply routing,
84 // scaling, smoothing, unit conversion, or range clamping.
86 // Control/background-thread only. Invalidates prepared storage.
87 void release() noexcept;
88 // RT-safe after prepare. Clears current block lanes and counters while
89 // keeping prepared storage.
90 void reset() noexcept;
91
92 bool prepared() const noexcept { return prepared_; }
93 std::uint32_t max_lanes() const noexcept { return max_lanes_; }
94 std::uint32_t max_frames() const noexcept { return max_frames_; }
95 std::uint32_t frame_count() const noexcept { return frame_count_; }
96 // Lane-overflow count accumulated since prepare(), release(), or reset().
97 std::uint32_t overflow_count() const noexcept { return overflow_count_; }
98
99 // RT-safe after prepare. Failure always exposes an empty block.
101
102 // RT-safe after begin_block(). One lane per target is allowed per block.
104 float value) noexcept;
106 std::span<const float> values) noexcept;
107 // RT-safe after begin_block(). On success the returned writable buffer is
108 // zero-filled and valid until the next begin_block(), prepare(), release(),
109 // reset(), or destruction of this object. Callers must write finite values;
110 // direct reservations intentionally avoid post-write validation.
112 VoiceModulationTarget target) noexcept;
113
114 VoiceModulationBlock block() const noexcept;
115
116private:
117 static bool target_valid(VoiceModulationTarget target) noexcept;
120 float constant_value,
121 const float* values) noexcept;
122 bool target_exists(VoiceModulationTarget target) const noexcept;
123 float* values_for_lane(std::uint32_t lane_index) noexcept;
124
125 std::vector<VoiceModulationLane> lanes_;
126 std::vector<float> values_;
127 std::uint32_t max_lanes_ = 0;
128 std::uint32_t max_frames_ = 0;
129 std::uint32_t frame_count_ = 0;
130 std::uint32_t lane_count_ = 0;
131 std::uint32_t overflow_count_ = 0;
132 bool prepared_ = false;
133};
134
135} // namespace pulp::audio
VoiceModulationResult begin_block(std::uint32_t frame_count) noexcept
std::uint32_t overflow_count() const noexcept
Definition voice_modulation_buffer.hpp:97
VoiceModulationResult add_constant(VoiceModulationTarget target, float value) noexcept
std::uint32_t max_frames() const noexcept
Definition voice_modulation_buffer.hpp:94
bool prepare(const VoiceModulationBufferConfig &config)
VoiceModulationResult add_audio_rate(VoiceModulationTarget target, std::span< const float > values) noexcept
bool prepared() const noexcept
Definition voice_modulation_buffer.hpp:92
std::uint32_t max_lanes() const noexcept
Definition voice_modulation_buffer.hpp:93
VoiceModulationBlock block() const noexcept
VoiceModulationAudioRateReservation reserve_audio_rate(VoiceModulationTarget target) noexcept
std::uint32_t frame_count() const noexcept
Definition voice_modulation_buffer.hpp:95
Definition analyzer_provider.hpp:12
@ Gain
Definition live_dsp_telemetry.hpp:40
VoiceModulationRate
Definition voice_modulation_buffer.hpp:25
@ AudioRate
Definition voice_modulation_buffer.hpp:27
@ Constant
Definition voice_modulation_buffer.hpp:26
@ NotPrepared
Definition sample_heritage_bus_dsp.hpp:21
@ Ok
Definition loop_types.hpp:34
@ InvalidTarget
Definition finite_time_stretch.hpp:16
VoiceModulationTarget
Definition voice_modulation_buffer.hpp:9
@ Aux6
Definition voice_modulation_buffer.hpp:21
@ PitchCents
Definition voice_modulation_buffer.hpp:11
@ Aux4
Definition voice_modulation_buffer.hpp:19
@ Gain
Definition voice_modulation_buffer.hpp:10
@ Aux7
Definition voice_modulation_buffer.hpp:22
@ Aux1
Definition voice_modulation_buffer.hpp:16
@ Aux5
Definition voice_modulation_buffer.hpp:20
@ Aux3
Definition voice_modulation_buffer.hpp:18
@ Pressure
Definition voice_modulation_buffer.hpp:13
@ Aux0
Definition voice_modulation_buffer.hpp:15
@ Timbre
Definition voice_modulation_buffer.hpp:14
@ Pan
Definition voice_modulation_buffer.hpp:12
@ Aux2
Definition voice_modulation_buffer.hpp:17
VoiceModulationStatus
Definition voice_modulation_buffer.hpp:30
@ NonFiniteValue
Definition voice_modulation_buffer.hpp:35
@ NotPrepared
Definition voice_modulation_buffer.hpp:32
@ LaneOverflow
Definition voice_modulation_buffer.hpp:37
@ InvalidFrameCount
Definition voice_modulation_buffer.hpp:33
@ DuplicateTarget
Definition voice_modulation_buffer.hpp:36
STL namespace.
Definition voice_modulation_buffer.hpp:45
VoiceModulationStatus status
Definition voice_modulation_buffer.hpp:47
bool ok
Definition voice_modulation_buffer.hpp:46
float * values
Definition voice_modulation_buffer.hpp:48
std::uint32_t frame_count
Definition voice_modulation_buffer.hpp:49
Definition voice_modulation_buffer.hpp:67
std::span< const VoiceModulationLane > lanes
Definition voice_modulation_buffer.hpp:68
std::uint32_t frame_count
Definition voice_modulation_buffer.hpp:69
float value_at(VoiceModulationTarget target, std::uint32_t frame, float fallback=0.0f) const noexcept
const VoiceModulationLane * find(VoiceModulationTarget target) const noexcept
bool empty() const noexcept
Definition voice_modulation_buffer.hpp:71
Definition voice_modulation_buffer.hpp:52
std::uint32_t max_lanes
Definition voice_modulation_buffer.hpp:53
std::uint32_t max_frames
Definition voice_modulation_buffer.hpp:54
Definition voice_modulation_buffer.hpp:57
VoiceModulationRate rate
Definition voice_modulation_buffer.hpp:59
const float * values
Definition voice_modulation_buffer.hpp:61
float constant_value
Definition voice_modulation_buffer.hpp:60
float value_at(std::uint32_t frame) const noexcept
VoiceModulationTarget target
Definition voice_modulation_buffer.hpp:58
std::uint32_t frame_count
Definition voice_modulation_buffer.hpp:62
Definition voice_modulation_buffer.hpp:40
VoiceModulationStatus status
Definition voice_modulation_buffer.hpp:42
bool ok
Definition voice_modulation_buffer.hpp:41