MayaFlux 0.5.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 384 of file DynamicSoundStream.cpp.

385{
387 std::vector<DataVariant> expanded_data(1);
388
389 if (m_data.empty()) {
390 expanded_data[0] = DataVariant(std::vector<double>(new_frame_count * get_num_channels(), 0.0));
391 } else {
392 std::vector<double> current_data;
393 extract_from_variant(m_data[0], current_data);
394
395 std::vector<double> expanded_buffer(new_frame_count * get_num_channels(), 0.0);
396
397 std::ranges::copy_n(current_data.begin(),
398 std::min<size_t>(current_data.size(), expanded_buffer.size()),
399 expanded_buffer.begin());
400
401 expanded_data[0] = DataVariant(std::move(expanded_buffer));
402 }
403 return expanded_data;
404 }
405
406 return std::views::iota(0U, get_num_channels())
407 | std::views::transform([this, new_frame_count](uint32_t ch) -> DataVariant {
408 if (ch < m_data.size()) {
409 std::vector<double> current_channel_data;
410 extract_from_variant(m_data[ch], current_channel_data);
411
412 std::vector<double> expanded_channel(new_frame_count, 0.0);
413 std::ranges::copy_n(current_channel_data.begin(),
414 std::min<size_t>(current_channel_data.size(), expanded_channel.size()),
415 expanded_channel.begin());
416
417 return { std::move(expanded_channel) };
418 }
419
420 return { std::vector<double>(new_frame_count, 0.0) };
421 })
422 | std::ranges::to<std::vector>();
423}
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:102
@ 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: