12#include "dsp/time_warp_map.h"
13#include "utils/audio.h"
14#include "utils/units.h"
53 Algorithm algorithm{ Algorithm::Polyphonic };
76 [[nodiscard]]
virtual std::string_view
id ()
const = 0;
81 [[nodiscard]]
virtual bool
101 if (!warp.is_valid ())
102 throw std::invalid_argument (
"TimeWarpMap is not valid");
103 if (warp.source_length != units::samples (input.getNumSamples ()))
104 throw std::invalid_argument (
105 "TimeWarpMap source_length does not match input frame count");
107 throw std::invalid_argument (
108 "engine does not support the requested algorithm");
109 return stretch_impl (input, warp, options);
127enum class TimeStretchEngineId : std::uint8_t
136 TimeStretchEngineId id;
141 bool supports_pitch_preserve;
149[[nodiscard]] std::span<const TimeStretchEngineInfo>
150available_timestretch_engines () noexcept;
161create_timestretch_engine (
162 TimeStretchEngineId
id,
163 units::sample_rate_t sample_rate);
171create_default_timestretch_engine (
173 units::sample_rate_t sample_rate);
Abstract time-stretch engine.
virtual std::string_view id() const =0
A stable, non-translatable identifier for persistence (settings).
utils::audio::AudioBuffer stretch(const utils::audio::AudioBuffer &input, const TimeWarpMap &warp, const StretchOptions &options)
Stretch input according to warp (Non-Virtual Interface).
virtual bool supports(StretchOptions::Algorithm algorithm) const =0
Whether this engine supports the given algorithm.
Options governing a stretch operation.
Algorithm
Material-aware timestretch algorithm.
bool preserve_formants
Preserve formants (only meaningful when algorithm is not Repitch).
Metadata describing an engine, for the settings UI.
std::string_view key
Non-translatable identifier (matches ITimeStretchEngine::id).
std::string_view display_name
Translation context string for the display name.
A monotonic time-warp mapping from source samples to output samples.