12 auto audio_buffer = std::dynamic_pointer_cast<Buffers::AudioBuffer>(
buffer);
15 audio_buffer->process_default();
17 const auto& data_span = audio_buffer->get_data();
18 std::vector<double> data_vector(data_span.begin(), data_span.end());
22 return std::vector<double> {};
27 auto audio_buffer = std::dynamic_pointer_cast<Buffers::AudioBuffer>(
buffer);
30 auto audio_data = std::get<std::vector<double>>(data);
31 auto& buffer_data = audio_buffer->get_data();
33 if (buffer_data.size() != audio_data.size()) {
34 buffer_data.resize(audio_data.size());
37 std::ranges::copy(audio_data, buffer_data.begin());
39 }
catch (
const std::bad_variant_access& e) {
42 std::source_location::current(),
43 "Data type mismatch when writing to audio buffer: {}",
52 const auto& audio_data = std::get<std::vector<double>>(data);
53 std::span<const double> data_span(audio_data.data(), audio_data.size());
55 container->append_frames(data_span, channel);
57 }
catch (
const std::bad_variant_access& e) {
60 std::source_location::current(),
61 "Data type mismatch when writing to container: {}",
63 }
catch (
const std::exception& e) {
66 std::source_location::current(),
67 "Error writing to container: {}",
77 uint32_t read_length =
length;
78 if (read_length == 0) {
79 read_length =
static_cast<uint32_t
>(container->get_total_elements() / container->get_num_channels());
82 std::vector<double> output_data(
static_cast<size_t>(read_length * container->get_num_channels()));
83 std::span<double> output_span(output_data.data(), output_data.size());
85 uint64_t frames_read = container->read_frames(output_span, read_length);
87 if (frames_read < output_data.size()) {
88 output_data.resize(frames_read);
93 }
catch (
const std::exception& e) {
96 std::source_location::current(),
97 "Error reading from container: {}",
100 return std::vector<double> {};
107 const auto&
pixels = std::get<std::vector<uint8_t>>(data);
108 const size_t frame_bytes = container->get_frame_byte_size();
110 if (frame_bytes == 0 ||
pixels.size() % frame_bytes != 0) {
113 std::source_location::current(),
114 "Pixel data of {} bytes is not a whole number of {} byte frames",
115 pixels.size(), frame_bytes);
119 container->append_frame(std::span<const uint8_t>(
pixels.data() +
offset, frame_bytes));
122 }
catch (
const std::bad_variant_access& e) {
125 std::source_location::current(),
126 "Data type mismatch when writing to video container: {}",
128 }
catch (
const std::exception& e) {
131 std::source_location::current(),
132 "Error writing to video container: {}",
141 std::vector<uint8_t> output;
143 const uint64_t
total = container->get_total_source_frames();
146 for (uint64_t frame = start; frame < end && container->is_frame_available(frame); ++frame) {
147 const auto pixels = container->get_frame_pixels(frame);
148 output.insert(output.end(),
pixels.begin(),
pixels.end());
const std::vector< float > * pixels
std::shared_ptr< NetworkGeometryBuffer > buffer
@ CoroutineScheduling
Coroutine scheduling and temporal coordination (Vruta::TaskScheduler)
@ Kriya
Automatable tasks and fluent scheduling api for Nodes and Buffers.
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.
Kakshya::DataVariant read_from_container(const std::shared_ptr< Kakshya::DynamicSoundStream > &container, uint64_t, uint32_t length)
void write_to_buffer(const std::shared_ptr< Buffers::AudioBuffer > &buffer, const Kakshya::DataVariant &data)
Kakshya::DataVariant extract_buffer_data(const std::shared_ptr< Buffers::AudioBuffer > &buffer, bool should_process)
void write_to_container(const std::shared_ptr< Kakshya::DynamicSoundStream > &container, const Kakshya::DataVariant &data, uint32_t channel)