43template <RecordingPacket Packet>
class RecordingSession
46 enum class State : uint8_t
53 explicit RecordingSession (units::sample_u32_t max_block_length);
56 Q_DISABLE_COPY_MOVE (RecordingSession)
58 static constexpr size_t kFifoCapacity = 1024;
60 using PacketType = Packet;
77 units::sample_t timeline_position,
78 bool transport_recording,
79 std::span<const float> l_data,
80 std::span<const float> r_data)
noexcept [[clang::nonblocking]]
81 requires std::same_as<Packet, RecordingAudioPacket>;
90 units::sample_t timeline_position,
91 bool transport_recording,
92 std::span<const dsp::MidiEvent> midi_events,
93 units::sample_u32_t nframes)
noexcept [[clang::nonblocking]]
94 requires std::same_as<Packet, RecordingMidiPacket>;
104 [[nodiscard]]
auto state ()
const
106 return state_.load (std::memory_order_acquire);
119 [[nodiscard]] uint64_t dropped_packets ()
const
121 return dropped_packets_.load (std::memory_order_relaxed);
126 std::unique_ptr<Impl> impl_;
128 std::atomic<State> state_{ State::Armed };
129 std::atomic<uint64_t> dropped_packets_{ 0 };
void write(units::sample_t timeline_position, bool transport_recording, std::span< const float > l_data, std::span< const float > r_data) noexcept
RT-safe: writes audio data into the ring buffer.
void write(units::sample_t timeline_position, bool transport_recording, std::span< const dsp::MidiEvent > midi_events, units::sample_u32_t nframes) noexcept
RT-safe: writes MIDI events into the ring buffer.