14class SoundFileContainer;
15class DynamicSoundStream;
125 return ExtractionType::FEATURE_GUIDED;
131 return "Granular::SegmentOp";
188 return AnalysisType::FEATURE;
194 return "Granular::AttributeOp";
209 double compute_grain_attribute(
211 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
220 static std::shared_ptr<RegionGroupAnalyzer<Kakshya::RegionGroup>>
230 static double extract_scalar(
const std::any& analysis_result,
232 const std::string& qualifier);
248 :
public StandardSorter<Kakshya::RegionGroup, Kakshya::RegionGroup> {
252 return SortingType::ALGORITHMIC;
258 return "Granular::SortOp";
312 const std::string& qualifier = {})
336template <ComputeData InputType, ComputeData OutputType>
340 const std::string& qualifier = {})
387 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
388 const std::string& group_name =
"grains")
431 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
433 const GranularConfig& config = {},
434 const std::string& qualifier = {});
445 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
447 const GranularConfig& config = {});
460 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
462 const GranularConfig& config = {},
463 const std::string& qualifier = {},
476 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
478 const GranularConfig& config = {},
495[[nodiscard]] MAYAFLUX_API std::shared_ptr<Kakshya::DynamicSoundStream>
process_to_stream(
496 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
498 const GranularConfig& config = {},
499 const std::string& qualifier = {},
512[[nodiscard]] MAYAFLUX_API std::shared_ptr<Kakshya::DynamicSoundStream>
process_to_stream(
513 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
515 const GranularConfig& config = {},
532template <
typename CompleteFn>
534 const std::shared_ptr<GranularMatrix>& matrix,
535 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
537 CompleteFn&& on_complete,
539 const std::string& qualifier = {},
544 ctx.execution_metadata[
"container"] = container;
546 ctx.execution_metadata[
"grain_taper"] = config.
taper;
548 auto seg_op = matrix->get_operation<SegmentOp>(
"segment");
549 auto attr_op = matrix->get_operation<AttributeOp>(
"attribute");
550 auto sort_op = matrix->get_operation<SortOp>(
"sort");
555 matrix->with_async(
make_granular_input(container), [seg_op, attr_op, sort_op, ctx, output](
auto chain) {
557 .template then<SegmentOp>(
"segment")
558 .template then<AttributeOp>(
"attribute")
559 .template then<SortOp>(
"sort")
562 return safe_any_cast_or_throw<
563 Datum<std::shared_ptr<Kakshya::SignalSourceContainer>>>(
566 return safe_any_cast_or_throw<
567 Datum<std::shared_ptr<Kakshya::SignalSourceContainer>>>(
568 reconstruct_grains(std::any(sorted), ctx)); }, std::forward<CompleteFn>(on_complete));
581template <
typename CompleteFn>
583 const std::shared_ptr<GranularMatrix>& matrix,
584 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
586 CompleteFn&& on_complete,
592 ctx.execution_metadata[
"container"] = container;
594 ctx.execution_metadata[
"grain_taper"] = config.
taper;
596 auto seg_op = matrix->get_operation<SegmentOp>(
"segment");
597 auto attr_op = matrix->get_operation<AttributeOp>(
"attribute");
598 auto sort_op = matrix->get_operation<SortOp>(
"sort");
603 matrix->with_async(
make_granular_input(container), [seg_op, attr_op, sort_op, ctx, output](
auto chain) {
605 .template then<SegmentOp>(
"segment")
606 .template then<AttributeOp>(
"attribute")
607 .template then<SortOp>(
"sort")
610 return safe_any_cast_or_throw<
614 return safe_any_cast_or_throw<
615 Datum<std::shared_ptr<Kakshya::SignalSourceContainer>>>(
616 reconstruct_grains(std::any(sorted), ctx)); }, std::forward<CompleteFn>(on_complete));
638template <
typename CompleteFn>
640 const std::shared_ptr<GranularMatrix>& matrix,
641 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
643 CompleteFn&& on_complete,
645 const std::string& qualifier = {},
649 ctx.execution_metadata[
"container"] = container;
651 ctx.execution_metadata[
"grain_taper"] = config.
taper;
653 auto seg_op = matrix->get_operation<SegmentOp>(
"segment");
654 auto attr_op = matrix->get_operation<AttributeOp>(
"attribute");
655 auto sort_op = matrix->get_operation<SortOp>(
"sort");
662 [ctx, output](
auto chain) {
664 .template then<SegmentOp>(
"segment")
665 .template then<AttributeOp>(
"attribute")
666 .template then<SortOp>(
"sort")
669 return safe_any_cast_or_throw<
670 Datum<std::shared_ptr<Kakshya::SignalSourceContainer>>>(
673 return safe_any_cast_or_throw<
674 Datum<std::shared_ptr<Kakshya::SignalSourceContainer>>>(
677 [on_complete = std::forward<CompleteFn>(on_complete)](
678 const Datum<std::shared_ptr<Kakshya::SignalSourceContainer>>& result) {
679 on_complete(std::dynamic_pointer_cast<Kakshya::DynamicSoundStream>(result.data));
694template <
typename CompleteFn>
696 const std::shared_ptr<GranularMatrix>& matrix,
697 const std::shared_ptr<Kakshya::SignalSourceContainer>& container,
699 CompleteFn&& on_complete,
704 ctx.execution_metadata[
"container"] = container;
706 ctx.execution_metadata[
"grain_taper"] = config.
taper;
708 auto seg_op = matrix->get_operation<SegmentOp>(
"segment");
709 auto attr_op = matrix->get_operation<AttributeOp>(
"attribute");
710 auto sort_op = matrix->get_operation<SortOp>(
"sort");
717 [ctx, output](
auto chain) {
719 .template then<SegmentOp>(
"segment")
720 .template then<AttributeOp>(
"attribute")
721 .template then<SortOp>(
"sort")
724 return safe_any_cast_or_throw<
728 return safe_any_cast_or_throw<
729 Datum<std::shared_ptr<Kakshya::SignalSourceContainer>>>(
732 [on_complete = std::forward<CompleteFn>(on_complete)](
733 const Datum<std::shared_ptr<Kakshya::SignalSourceContainer>>& result) {
734 on_complete(std::dynamic_pointer_cast<Kakshya::DynamicSoundStream>(result.data));
Span-based energy analysis for digital signals in Maya Flux.
Example concrete implementation of UniversalSorter.
ComputeMatrix extension that integrates grammar-based operation selection.
VariantEnergyAnalyzer m_energy_analyzer
AnalysisType get_analysis_type() const override
Gets the analysis type category for this analyzer.
VariantStatisticalAnalyzer m_stat_analyzer
std::string get_analyzer_name() const override
Get analyzer-specific name (derived classes override this)
Computes a scalar attribute per grain and writes it onto each Region.
std::string get_extractor_name() const override
Get extractor name.
ExtractionType get_extraction_type() const override
Get extraction type category.
Segments container audio into fixed hop-size grain windows.
std::string get_sorter_name() const override
Get sorter-specific name (derived classes override this)
SortingType get_sorting_type() const override
Gets the sorting type category for this sorter.
Sorts grains by a named attribute key, with optional GPU dispatch.
Concrete implementation for standard comparison-based sorting.
Template-flexible analyzer base with instance-defined I/O types.
std::function< void(std::span< double >)> RegionTaper
Per-region taper applied in-place before the write callback is invoked.
const ComputationGrammar::Rule::Executor sort_grains
Grammar rule executor for the sort step.
const ComputationGrammar::Rule::Executor reconstruct_grains_stream
Grammar rule executor — concatenative reconstruct into DynamicSoundStream.
Datum< Kakshya::RegionGroup > GranularDatum
Datum specialisation for granular processing pipelines.
const ComputationGrammar::Rule::Executor attribute_grains
Grammar rule executor for the attribution step.
GranularOutput
Selects the terminal output type produced by make_granular_matrix.
std::function< double(std::span< const double >, const ExecutionContext &)> AttributeExecutor
Span-level escape hatch for fully custom per-grain feature computation.
void process_to_container_async(const std::shared_ptr< GranularMatrix > &matrix, const std::shared_ptr< Kakshya::SignalSourceContainer > &container, AnalysisType analysis_type, CompleteFn &&on_complete, const GranularConfig &config={}, const std::string &qualifier={}, GranularOutput output=GranularOutput::CONTAINER)
Async offline granular pipeline (AnalysisType path).
ExecutionContext make_granular_context(const GranularConfig &config, AnalysisType analysis_type, const std::string &qualifier={})
Construct an ExecutionContext for the granular pipeline using a built-in AnalysisType.
GranularDatum make_granular_input(const std::shared_ptr< Kakshya::SignalSourceContainer > &container, const std::string &group_name="grains")
Construct the initial GranularDatum from a container.
std::shared_ptr< GranularMatrix > make_granular_matrix(ComputationContext attribution_context, GranularOutput output, GrainTaper taper)
Construct a GranularMatrix with grammar rules appropriate for the requested output type.
const ComputationGrammar::Rule::Executor segment_grains
Grammar rule executor for the segmentation step.
const ComputationGrammar::Rule::Executor reconstruct_grains_additive_stream
Grammar rule executor — OLA reconstruct into DynamicSoundStream.
Kakshya::RegionTaper GrainTaper
Per-grain taper applied before accumulation in OLA reconstruction.
GranularDatum process(const std::shared_ptr< Kakshya::SignalSourceContainer > &container, AnalysisType analysis_type, const GranularConfig &config, const std::string &qualifier)
Run segment -> attribute -> sort and return the attributed RegionGroup.
const ComputationGrammar::Rule::Executor reconstruct_grains_additive
Grammar rule executor for additive grain reconstruction.
std::shared_ptr< Kakshya::SoundFileContainer > process_to_container(const std::shared_ptr< Kakshya::SignalSourceContainer > &container, AnalysisType analysis_type, const GranularConfig &config, const std::string &qualifier, GranularOutput output)
Offline granular pipeline terminating in a SoundFileContainer.
const ComputationGrammar::Rule::Executor reconstruct_grains
Grammar rule executor for the reconstruction step.
void process_to_stream_async(const std::shared_ptr< GranularMatrix > &matrix, const std::shared_ptr< Kakshya::SignalSourceContainer > &container, AnalysisType analysis_type, CompleteFn &&on_complete, const GranularConfig &config={}, const std::string &qualifier={}, GranularOutput output=GranularOutput::STREAM)
Async offline granular pipeline terminating in a DynamicSoundStream (AnalysisType path).
std::shared_ptr< Kakshya::DynamicSoundStream > process_to_stream(const std::shared_ptr< Kakshya::SignalSourceContainer > &container, AnalysisType analysis_type, const GranularConfig &config, const std::string &qualifier, GranularOutput output)
Offline granular pipeline terminating in a DynamicSoundStream.
AnalysisType
Categories of analysis operations for discovery and organization.
ExtractionType
Categories of extraction operations for discovery and organization.
void apply_context_parameters(std::shared_ptr< OperationType > operation, const ExecutionContext &ctx)
Applies context parameters to an operation.
ComputationContext
Defines the computational contexts in which rules can be applied.
@ SPECTRAL
Frequency-domain operations.
ExtractionMethod
Supported extraction methods for FeatureExtractor.
@ OVERLAPPING_WINDOWS
Extract overlapping windowed data.
SortingType
Categories of sorting operations for discovery and organization.
Organizes related signal regions into a categorized collection.
Represents a point or span in N-dimensional space.
std::function< std::any(const std::any &, const ExecutionContext &)> Executor
Type alias for matcher functions used in computation rules.
Input/Output container for computation pipeline data flow with structure preservation.
std::unordered_map< std::string, std::any > execution_metadata
Arbitrary metadata parameters used by operations.
Context information controlling how a compute operation executes.
uint32_t gpu_sort_threshold
ComputationContext attribution_context
Scalar parameters shared across all granular pipeline entry points.