Streaming spectral-mask processor with race-free, frame-boundary table publication and latency-aligned dry/wet mixing. More...
#include <pulp/runtime/seqlock.hpp>#include <pulp/runtime/triple_buffer.hpp>#include <pulp/signal/checked_allocation.hpp>#include <pulp/signal/dry_wet_mixer.hpp>#include <pulp/signal/spectral_band_mask.hpp>#include <pulp/signal/spectral_frame_engine.hpp>#include <algorithm>#include <array>#include <cmath>#include <complex>#include <cstddef>#include <cstdint>#include <limits>#include <memory>#include <optional>#include <type_traits>#include <vector>Go to the source code of this file.
Classes | |
| struct | pulp::signal::SpectralMaskProcessorConfigT< SampleType > |
| class | pulp::signal::SpectralPreMaskStageT< SampleType > |
| A frame-domain stage that SpectralMaskProcessorT::process() runs on each analysis frame group before the mask. More... | |
| class | pulp::signal::SpectralWetSourceStageT< SampleType > |
| A time-domain stage that SpectralMaskProcessorT::process() runs on each block before the wet path's analysis. More... | |
| class | pulp::signal::SpectralMaskProcessorT< SampleType > |
Namespaces | |
| namespace | pulp |
| namespace | pulp::signal |
Typedefs | |
| using | pulp::signal::SpectralMaskProcessorConfig = SpectralMaskProcessorConfigT<float> |
| using | pulp::signal::SpectralMaskProcessorConfig64 = SpectralMaskProcessorConfigT<double> |
| using | pulp::signal::SpectralMaskProcessor = SpectralMaskProcessorT<float> |
| using | pulp::signal::SpectralMaskProcessor64 = SpectralMaskProcessorT<double> |
| using | pulp::signal::SpectralPreMaskStage = SpectralPreMaskStageT<float> |
| using | pulp::signal::SpectralPreMaskStage64 = SpectralPreMaskStageT<double> |
| using | pulp::signal::SpectralWetSourceStage = SpectralWetSourceStageT<float> |
| using | pulp::signal::SpectralWetSourceStage64 = SpectralWetSourceStageT<double> |
Variables | |
| constexpr std::uint64_t | pulp::signal::kSpectralMaskProcessorDefaultMaximumRetainedBytes |
Streaming spectral-mask processor with race-free, frame-boundary table publication and latency-aligned dry/wet mixing.
Control code compiles a SpectralMaskTableT directly or publishes a SpectralBandLayoutT through publish_layout(). The audio owner adopts only the latest complete table at a spectral-frame boundary and interpolates from its current gain curve over the table's requested transition length. No allocation or locks occur in process() or process_frame() after a successful prepare(). An audio-owner may also stage the latest layout with set_layout_rt(); fixed-capacity compilation and adoption happen at the next spectral-frame boundary without a control-thread round trip.
Two optional source seams let a freeze, hold, loop, or granular source replace what the live mask shapes, while the dry path stays live: