#pragma once #include #include #include "AudioFrame.h" namespace webrtc { class AudioDeviceModule; class TaskQueueFactory; } // namespace webrtc namespace rtc { template class scoped_refptr; } namespace tgcalls { class FakeAudioDeviceModule { public: class Renderer { public: virtual ~Renderer() = default; virtual bool Render(const AudioFrame &samples) = 0; virtual void BeginFrame(double timestamp) { } virtual void AddFrameChannel(uint32_t ssrc, const tgcalls::AudioFrame &frame) { } virtual void EndFrame() { } virtual int32_t WaitForUs() { return 10000; } }; class Recorder { public: virtual ~Recorder() = default; virtual AudioFrame Record() = 0; virtual int32_t WaitForUs() { return 10000; } }; using Task = std::function; struct Options { uint32_t samples_per_sec{48000}; uint32_t num_channels{2}; std::function scheduler_; }; static std::function(webrtc::TaskQueueFactory *)> Creator( std::shared_ptr renderer, std::shared_ptr recorder, Options options); }; } // namespace tgcalls