#pragma once #include #include #include #include #include #include "AudioPacketsComparator.hpp" #include "../base/BaseEvent.hpp" namespace drp::event { class AudioEvent : public BaseEvent { public: AudioEvent(); ~AudioEvent() override; void updateAudioStream(int channels, std::uint32_t sampleFormat, double sampleRate); void loopPlay(); void handle( Context& context, const packet::GenericPacketContent& content, sockaddr* fromAddress, socklen_t fromAddressLength ) override; private: std::thread playerThread; PaStream* stream; int streamChannels; std::uint32_t streamSampleFormat; double streamRate; std::priority_queue, AudioPacketsComparator> audioQueue; std::mutex audioMutex; std::unique_lock audioLock; std::condition_variable audioCondition; }; }