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

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).

Detailed Description

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. ─────────────────────────────────────────────────────────────────────────