31 std::string
name =
"untitled";
59 const std::string& name =
"untitled") {
62 p.character =
o.character;
63 p.fft_size =
o.fft_size;
64 p.analysis_hop =
o.analysis_hop;
65 p.transient_sensitivity =
o.transient_sensitivity;
66 p.route_noise_stn =
o.route_noise_stn;
67 p.relocate_transients =
o.relocate_transients;
74 o.character = p.character;
75 o.fft_size = p.fft_size;
76 o.analysis_hop = p.analysis_hop;
77 o.transient_sensitivity = p.transient_sensitivity;
78 o.route_noise_stn = p.route_noise_stn;
79 o.relocate_transients = p.relocate_transients;
84 s <<
"# Pulp stretch preset\n"
85 <<
"name = " << p.name <<
"\n"
86 <<
"character = " <<
to_string(p.character) <<
"\n"
87 <<
"fft_size = " << p.fft_size <<
"\n"
88 <<
"analysis_hop = " << p.analysis_hop <<
"\n"
89 <<
"transient_sensitivity = " << p.transient_sensitivity <<
"\n"
90 <<
"route_noise_stn = " << (p.route_noise_stn ?
"true" :
"false") <<
"\n"
91 <<
"relocate_transients = " << (p.relocate_transients ?
"true" :
"false") <<
"\n";
99 std::string* err =
nullptr) {
100 auto trim = [](std::string v) {
101 const auto a = v.find_first_not_of(
" \t\r\n");
102 const auto b = v.find_last_not_of(
" \t\r\n");
103 return a == std::string::npos ? std::string() : v.substr(
a, b -
a + 1);
105 auto as_bool = [](
const std::string& v) {
return v ==
"true" || v ==
"1" || v ==
"yes"; };
106 std::istringstream in(text);
108 while (std::getline(in, line)) {
109 const std::string t = trim(line);
110 if (t.empty() || t[0] ==
'#')
continue;
111 const auto eq = t.find(
'=');
112 if (eq == std::string::npos)
continue;
113 const std::string key = trim(t.substr(0, eq));
114 const std::string val = trim(t.substr(eq + 1));
115 if (key ==
"name") out.
name = val;
116 else if (key ==
"character") {
118 if (err) *err =
"unknown character: " + val;
122 else if (key ==
"fft_size") out.
fft_size = std::atoi(val.c_str());
123 else if (key ==
"analysis_hop") out.
analysis_hop = std::atoi(val.c_str());
124 else if (key ==
"transient_sensitivity") out.
transient_sensitivity =
static_cast<float>(std::atof(val.c_str()));
Definition additive_bank.hpp:218
@ c
Definition spectrum_trace.hpp:35
const char * to_string(StretchCharacter c)
Definition stretch_preset.hpp:40
StretchCharacter
Character mode — the musically-distinct "engine per job" selector.
Definition offline_stretch.hpp:66
@ clean
Definition offline_stretch.hpp:66
@ granular
Definition offline_stretch.hpp:66
@ phase_vocoder
Definition offline_stretch.hpp:66
@ varispeed
Definition offline_stretch.hpp:66
StretchPreset capture_preset(const OfflineStretchOptions &o, const std::string &name="untitled")
Capture the preset-relevant fields FROM a configured OfflineStretchOptions.
Definition stretch_preset.hpp:58
@ a
Definition formant_filter_bank.hpp:20
@ o
Definition formant_filter_bank.hpp:20
void apply_preset(OfflineStretchOptions &o, const StretchPreset &p)
Apply a preset to options (only the preset-managed fields; ratio/pitch are the caller's,...
Definition stretch_preset.hpp:73
bool character_from_string(const std::string &s, StretchCharacter &out)
Definition stretch_preset.hpp:49
bool preset_from_text(const std::string &text, StretchPreset &out, std::string *err=nullptr)
Parse a preset.
Definition stretch_preset.hpp:98
std::string preset_to_text(const StretchPreset &p)
Definition stretch_preset.hpp:82
Offline (non-realtime), maximum-quality time-stretch / pitch-shift / formant engine.
Whole-input render options.
Definition offline_stretch.hpp:69
The tunable subset of OfflineStretchOptions that defines a "character preset".
Definition stretch_preset.hpp:30
int analysis_hop
Definition stretch_preset.hpp:34
int fft_size
0 = adaptive (recommend_window)
Definition stretch_preset.hpp:33
bool relocate_transients
Definition stretch_preset.hpp:37
float transient_sensitivity
0 = engine default
Definition stretch_preset.hpp:35
bool route_noise_stn
Definition stretch_preset.hpp:36
std::string name
Definition stretch_preset.hpp:31
StretchCharacter character
Definition stretch_preset.hpp:32