Offline (non-realtime), maximum-quality time-stretch / pitch-shift / formant engine. More...
#include <pulp/signal/interpolator.hpp>#include <pulp/signal/realtime_pitch_time_processor.hpp>#include <algorithm>#include <cmath>#include <string>#include <vector>Go to the source code of this file.
Classes | |
| struct | pulp::signal::OfflineStretchOptions |
| Whole-input render options. More... | |
| class | pulp::signal::OfflineStretchT< SampleType > |
| Offline stretcher. More... | |
| struct | pulp::signal::OfflineStretchT< SampleType >::Window |
| Material-adaptive window/overlap recommendation. More... | |
Namespaces | |
| namespace | pulp |
| namespace | pulp::signal |
Typedefs | |
| using | pulp::signal::OfflineStretch = OfflineStretchT<float> |
| using | pulp::signal::OfflineStretch64 = OfflineStretchT<double> |
Enumerations | |
| enum class | pulp::signal::OfflineFormantMode { pulp::signal::follow_pitch , pulp::signal::preserve_original , pulp::signal::shift_independently } |
| Formant behavior for the spectral modes. More... | |
| enum class | pulp::signal::StretchTransientMode { pulp::signal::phase_reset , pulp::signal::verbatim_relocate } |
| Transient strategy. More... | |
| enum class | pulp::signal::StretchCharacter { pulp::signal::clean , pulp::signal::varispeed , pulp::signal::phase_vocoder , pulp::signal::granular } |
| Character mode — the musically-distinct "engine per job" selector. More... | |
Functions | |
| long | pulp::signal::offline_stretch_output_frames (long in_frames, double time_ratio) noexcept |
| The exact, sample-accurate output length for an input of in_frames frames at the given time ratio: round(in_frames * time_ratio). | |
Offline (non-realtime), maximum-quality time-stretch / pitch-shift / formant engine.
It orchestrates the realtime spectral primitives already in pulp::signal — SpectralFrameEngine (STFT/WOLA), RealtimePitchTimeProcessor (Laroche-Dolson TSM+resample, peak phase locking), SpectralEnvelopeShifter (formant), TransientPhasePolicy (transient reset), StnDecomposer/NoiseMorpher (natural noise stretch) and Resampler (polyphase Kaiser-sinc) — over the WHOLE input with no latency constraint, and adds the offline-only refinements a realtime design cannot do: a distributed time-warp length-lock to an EXACT output length, non-causal (look-ahead) transient handling, and (gated) verbatim transient relocation.
Tiering: this orchestration is the v1 BASELINE built on the hop-quantized, causal realtime core. A native offline-quality path can follow if measured quality warrants it. The realtime core's validated numbers are realtime results; offline must prove its own quality.
───────────────────────────────────────────────────────────────────────── Current status: tempo stretch, pitch shift, varispeed, formant modes, repitch-linked resampling, independent time+pitch, draft OLA preview, and STN routing are implemented over the realtime spectral primitives, as is opt-in verbatim transient relocation (StretchTransientMode::verbatim_relocate) on the tempo-only path. The identity route remains exact at time_ratio == 1 and pitch_semitones == 0. ─────────────────────────────────────────────────────────────────────────