MayaFlux 0.1.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 377 of file DynamicSoundStream.cpp.

378{
380 std::vector<DataVariant> expanded_data(1);
381
382 if (m_data.empty()) {
383 expanded_data[0] = DataVariant(std::vector<double>(new_frame_count * get_num_channels(), 0.0));
384 } else {
385 std::vector<double> current_data;
386 extract_from_variant(m_data[0], current_data);
387
388 std::vector<double> expanded_buffer(new_frame_count * get_num_channels(), 0.0);
389
390 std::ranges::copy_n(current_data.begin(),
391 std::min<size_t>(current_data.size(), expanded_buffer.size()),
392 expanded_buffer.begin());
393
394 expanded_data[0] = DataVariant(std::move(expanded_buffer));
395 }
396 return expanded_data;
397 }
398
399 return std::views::iota(0U, get_num_channels())
400 | std::views::transform([this, new_frame_count](uint32_t ch) -> DataVariant {
401 if (ch < m_data.size()) {
402 std::vector<double> current_channel_data;
403 extract_from_variant(m_data[ch], current_channel_data);
404
405 std::vector<double> expanded_channel(new_frame_count, 0.0);
406 std::ranges::copy_n(current_channel_data.begin(),
407 std::min<size_t>(current_channel_data.size(), expanded_channel.size()),
408 expanded_channel.begin());
409
410 return { std::move(expanded_channel) };
411 }
412
413 return { std::vector<double>(new_frame_count, 0.0) };
414 })
415 | std::ranges::to<std::vector>();
416}
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:73
@ INTERLEAVED
Single DataVariant with interleaved data (LRLRLR for stereo)
std::span< T > extract_from_variant(const DataVariant &variant, std::vector< T > &storage, Utils::ComplexConversionStrategy strategy=Utils::ComplexConversionStrategy::MAGNITUDE)
Get typed span from DataVariant using concepts.

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: