411{
413 std::vector<DataVariant> expanded_data(1);
414
417 } else {
418 std::vector<double> current_data;
420
421 std::vector<double> expanded_buffer(new_frame_count *
get_num_channels(), 0.0);
422
423 std::ranges::copy_n(current_data.begin(),
424 std::min<size_t>(current_data.size(), expanded_buffer.size()),
425 expanded_buffer.begin());
426
427 expanded_data[0] =
DataVariant(std::move(expanded_buffer));
428 }
429 return expanded_data;
430 }
431
433 | std::views::transform([
this, new_frame_count](uint32_t ch) ->
DataVariant {
435 std::vector<double> current_channel_data;
436 extract_from_variant(m_data[ch], current_channel_data);
437
438 std::vector<double> expanded_channel(new_frame_count, 0.0);
439 std::ranges::copy_n(current_channel_data.begin(),
440 std::min<size_t>(current_channel_data.size(), expanded_channel.size()),
441 expanded_channel.begin());
442
443 return { std::move(expanded_channel) };
444 }
445
446 return { std::vector<double>(new_frame_count, 0.0) };
447 })
448 | std::ranges::to<std::vector>();
449}
std::vector< DataVariant > m_data
virtual uint32_t get_num_channels() const
ContainerDataStructure m_structure
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.
@ INTERLEAVED
Single DataVariant with interleaved data (LRLRLR for stereo)
OrganizationStrategy organization