35template <ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = InputType>
63 for (
const auto& key : config.
keys) {
109 const auto shift_hz = get_parameter_or<double>(
"shift_hz", 0.0);
110 const auto window_size = get_parameter_or<uint32_t>(
"window_size", 1024);
111 const auto hop_size = get_parameter_or<uint32_t>(
"hop_size", 512);
112 const auto sample_rate = get_parameter_or<double>(
"sample_rate", 48000.0);
113 const double lo = std::max(0.0, shift_hz);
114 const double hi = sample_rate / 2.0 + shift_hz;
117 [lo, hi, sample_rate, window_size, hop_size](std::span<double> ch) {
123 const auto pitch_ratio = get_parameter_or<double>(
"pitch_ratio", 1.0);
124 const auto window_size = get_parameter_or<uint32_t>(
"window_size", 2048);
125 const auto hop_size = get_parameter_or<uint32_t>(
"hop_size", 512);
126 const double semitones = 12.0 * std::log2(pitch_ratio);
129 [semitones, window_size, hop_size](std::span<double> ch) {
135 const auto lo_freq = get_parameter_or<double>(
"low_freq", 20.0);
136 const auto hi_freq = get_parameter_or<double>(
"high_freq", 20000.0);
137 const auto sample_rate = get_parameter_or<double>(
"sample_rate", 48000.0);
138 const auto window_size = get_parameter_or<uint32_t>(
"window_size", 1024);
139 const auto hop_size = get_parameter_or<uint32_t>(
"hop_size", 512);
142 [lo_freq, hi_freq, sample_rate, window_size, hop_size](std::span<double> ch) {
148 const auto factor = get_parameter_or<double>(
"enhancement_factor", 2.0);
149 const auto window_size = get_parameter_or<uint32_t>(
"window_size", 1024);
150 const auto hop_size = get_parameter_or<uint32_t>(
"hop_size", 512);
153 [factor, window_size, hop_size](std::span<double> ch) {
159 const auto threshold = get_parameter_or<double>(
"threshold", -40.0);
160 const auto window_size = get_parameter_or<uint32_t>(
"window_size", 1024);
161 const auto hop_size = get_parameter_or<uint32_t>(
"hop_size", 512);
164 [
threshold, window_size, hop_size](std::span<double> ch) {
192 if (
name ==
"operation") {
193 if (
auto r = safe_any_cast<SpectralOperation>(
value)) {
197 if (
auto r = safe_any_cast<std::string>(
value)) {
198 if (
auto e = Reflect::string_to_enum_case_insensitive<SpectralOperation>(*r.value)) {
221 template <
typename Func>
226 for (
size_t i = 0; i <
channels.size(); ++i)
230 for (
size_t i = 0; i <
channels.size(); ++i)
234 OperationHelper::reconstruct_from_double<InputType>(
m_working_buffer, structure_info));
264 template <
typename T>
268 if (!param.has_value())
269 return default_value;
271 auto result = safe_any_cast<T>(param);
272 return result.value_or(default_value);
286 if constexpr (std::is_same_v<InputType, OutputType>) {
Core::GlobalInputConfig input
std::unordered_map< std::string, std::string > metadata
Short-time Fourier domain primitives for MayaFlux::Kinesis.
output_type convert_result(std::vector< std::vector< double > > &result_data, DataStructureInfo &metadata)
Convert processed double data back to OutputType using metadata and optional callback.
static std::tuple< std::vector< std::span< double > >, DataStructureInfo > extract_structured_double(T &compute_data)
Extract structured double data from Datum container or direct ComputeData with automatic container ha...
std::vector< double > harmonic_enhance(std::span< const double > src, double enhancement_factor, uint32_t window_size, uint32_t hop_size)
Linear spectral tilt: scale each bin by a factor that rises linearly from 1 at bin 0 to enhancement_f...
std::vector< double > spectral_gate(std::span< const double > src, double threshold_db, uint32_t window_size, uint32_t hop_size)
Hard spectral gate: zero bins whose magnitude is below the threshold.
std::vector< double > spectral_filter(std::span< const double > src, double lo_hz, double hi_hz, double sample_rate, uint32_t window_size, uint32_t hop_size)
Hard bandpass filter: zero all bins outside [lo_hz, hi_hz].
std::vector< double > pitch_shift(std::span< const double > src, double semitones, uint32_t window_size, uint32_t analysis_hop)
Pitch-shift by resampling around a phase vocoder stretch.
constexpr std::string_view enum_to_string(EnumType value) noexcept
Universal enum to string converter using magic_enum (original case)
SpectralOperation
Spectral operations supported by SpectralTransformer.
@ SPECTRAL_FILTER
Hard bandpass filter.
@ SPECTRAL_GATE
Hard magnitude gate.
@ HARMONIC_ENHANCE
Linear spectral tilt.
@ PITCH_SHIFT
Phase-vocoder pitch shift, duration preserved.
@ FREQUENCY_SHIFT
Bandpass repositioning (approximate frequency shift)
TransformationType
Categories of transformation operations for discovery and organization.
@ SPECTRAL
Frequency domain transformations (pitch-shift, spectral filtering)
Input/Output container for computation pipeline data flow with structure preservation.