/* * Copyright (c) 2025, Gregory Bertilson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Media { class AudioBlock { public: using Data = FixedArray; u32 sample_rate() const { return m_sample_rate; } u8 channel_count() const { return m_channel_count; } AK::Duration start_timestamp() const { return m_start_timestamp; } Data& data() { return m_data; } Data const& data() const { return m_data; } void clear() { m_sample_rate = 0; m_channel_count = 0; m_start_timestamp = AK::Duration::zero(); m_data = Data(); } template void emplace(u32 sample_rate, u8 channel_count, AK::Duration start_timestamp, Callback data_callback) { VERIFY(sample_rate != 0); VERIFY(channel_count != 0); VERIFY(m_data.is_empty()); m_sample_rate = sample_rate; m_channel_count = channel_count; m_start_timestamp = start_timestamp; data_callback(m_data); } bool is_empty() const { return m_sample_rate == 0; } size_t data_count() const { return data().size(); } size_t sample_count() const { return data_count() / m_channel_count; } private: u32 m_sample_rate { 0 }; u8 m_channel_count { 0 }; AK::Duration m_start_timestamp; Data m_data; }; }