MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ create_expanded_data()

std::vector< DataVariant > MayaFlux::Kakshya::DynamicSoundStream::create_expanded_data ( uint64_t  new_frame_count)
private

Definition at line 463 of file DynamicSoundStream.cpp.

464{
466 std::vector<DataVariant> expanded_data(1);
467
468 if (m_data.empty()) {
469 expanded_data[0] = DataVariant(std::vector<double>(new_frame_count * get_num_channels(), 0.0));
470 } else {
471 std::vector<double> current_data;
472 extract_from_variant(m_data[0], current_data);
473
474 std::vector<double> expanded_buffer(new_frame_count * get_num_channels(), 0.0);
475
476 std::ranges::copy_n(current_data.begin(),
477 std::min<size_t>(current_data.size(), expanded_buffer.size()),
478 expanded_buffer.begin());
479
480 expanded_data[0] = DataVariant(std::move(expanded_buffer));
481 }
482 return expanded_data;
483 }
484
485 return std::views::iota(0U, get_num_channels())
486 | std::views::transform([this, new_frame_count](uint32_t ch) -> DataVariant {
487 if (ch < m_data.size()) {
488 std::vector<double> current_channel_data;
489 extract_from_variant(m_data[ch], current_channel_data);
490
491 std::vector<double> expanded_channel(new_frame_count, 0.0);
492 std::ranges::copy_n(current_channel_data.begin(),
493 std::min<size_t>(current_channel_data.size(), expanded_channel.size()),
494 expanded_channel.begin());
495
496 return { std::move(expanded_channel) };
497 }
498
499 return { std::vector<double>(new_frame_count, 0.0) };
500 })
501 | std::ranges::to<std::vector>();
502}
std::span< T > extract_from_variant(const DataVariant &variant, std::vector< T > &storage, ComplexConversionStrategy strategy=ComplexConversionStrategy::MAGNITUDE)
Get typed span from DataVariant using concepts.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
Definition NDData.hpp:70
@ INTERLEAVED
Single DataVariant with interleaved data (LRLRLR for stereo)

References MayaFlux::Kakshya::extract_from_variant(), MayaFlux::Kakshya::SoundStreamContainer::get_num_channels(), MayaFlux::Kakshya::INTERLEAVED, MayaFlux::Kakshya::SoundStreamContainer::m_data, MayaFlux::Kakshya::SoundStreamContainer::m_structure, and MayaFlux::Kakshya::ContainerDataStructure::organization.

Referenced by expand_to().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: