/* * Copyright (c) 2023, Andrew Kaster * Copyright (c) 2023, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Audio { class AudioState; class PlaybackStreamAudioUnit final : public PlaybackStream { public: static ErrorOr> create(OutputState initial_output_state, u32 sample_rate, u8 channels, u32 target_latency_ms, AudioDataRequestCallback&& data_request_callback); virtual void set_underrun_callback(Function) override; virtual NonnullRefPtr> resume() override; virtual NonnullRefPtr> drain_buffer_and_suspend() override; virtual NonnullRefPtr> discard_buffer_and_suspend() override; virtual ErrorOr total_time_played() override; virtual NonnullRefPtr> set_volume(double) override; private: explicit PlaybackStreamAudioUnit(NonnullRefPtr); ~PlaybackStreamAudioUnit(); NonnullRefPtr m_state; }; }