378{
380 std::vector<DataVariant> expanded_data(1);
381
384 } else {
385 std::vector<double> 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
400 | std::views::transform([
this, new_frame_count](uint32_t ch) ->
DataVariant {
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::vector< DataVariant > m_data
virtual uint32_t get_num_channels() const
ContainerDataStructure m_structure
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.
@ 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.
OrganizationStrategy organization