Zrythm v2.0.0-alpha.1
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
recording_audio_packet.h
1// SPDX-FileCopyrightText: © 2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <vector>
7
9#include "utils/units.h"
10
11namespace zrythm::controllers
12{
13
15{
16 units::sample_t timeline_position;
17 bool transport_recording{};
18 units::sample_u32_t nframes;
19 std::vector<float> l_frames;
20 std::vector<float> r_frames;
21
22 static void write_to_slot (
24 units::sample_t timeline_position,
25 bool transport_recording,
26 std::span<const float> l_data,
27 std::span<const float> r_data) noexcept [[clang::nonblocking]]
28 {
29 slot.timeline_position = timeline_position;
30 slot.transport_recording = transport_recording;
31 slot.nframes = units::samples (l_data.size ());
33 std::span (slot.l_frames).subspan (0, l_data.size ()), l_data);
35 std::span (slot.r_frames).subspan (0, r_data.size ()), r_data);
36 }
37
38 static void
39 copy_from (RecordingAudioPacket &slot, const RecordingAudioPacket &source)
40 [[clang::blocking]]
41 {
42 slot.timeline_position = source.timeline_position;
43 slot.transport_recording = source.transport_recording;
44 slot.nframes = source.nframes;
45 const auto n = source.nframes.in<size_t> (units::samples);
46 slot.l_frames.assign (
47 source.l_frames.begin (), source.l_frames.begin () + n);
48 slot.r_frames.assign (
49 source.r_frames.begin (), source.r_frames.begin () + n);
50 }
51
52 static void
53 resize (RecordingAudioPacket &slot, units::sample_u32_t block_length)
54 {
55 const auto new_size = block_length.in (units::samples);
56 slot.l_frames.resize (new_size);
57 slot.r_frames.resize (new_size);
58 }
59};
60
61}
Optimized DSP functions.
void copy(std::span< float > dest, std::span< const float > src)
Compute dest[i] = src[i].