/* * Copyright (c) 2018-2022, the SerenityOS developers. * Copyright (c) 2021-2023, kleines Filmröllchen * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "ConnectionFromClient.h" #include "FadingProperty.h" #include #include #include #include #include namespace AudioServer { class ClientAudioStream : public RefCounted { public: enum class ErrorState { ClientDisconnected, ClientPaused, ClientUnderrun, ResamplingError, }; explicit ClientAudioStream(ConnectionFromClient&); ~ClientAudioStream() = default; ErrorOr get_next_sample(u32 audiodevice_sample_rate); void clear(); bool is_connected() const; Optional client(); void set_buffer(NonnullOwnPtr buffer); void set_paused(bool paused); FadingProperty& volume(); double volume() const; void set_volume(double volume); bool is_muted() const; void set_muted(bool muted); u32 sample_rate() const; void set_sample_rate(u32 sample_rate); private: OwnPtr m_buffer; Vector m_current_audio_chunk; size_t m_in_chunk_location; bool m_paused { true }; bool m_muted { false }; u32 m_sample_rate; WeakPtr m_client; FadingProperty m_volume { 1 }; }; }