Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
spectral_mask_processor.hpp File Reference

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

Detailed Description

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:

  • a time-domain wet-source stage (set_wet_source_stage()) rewrites the block the wet path analyzes, before the STFT;
  • a frame-domain pre-mask stage (set_pre_mask_stage()) rewrites each analysis frame group after the STFT and before the mask. Unset, each costs one pointer test per block or frame.