#pragma once #include #include #include #include #include #include // // SDL Audio capture // class audio_async { public: audio_async(int len_ms); ~audio_async(); bool init(int capture_id, int sample_rate); // start capturing audio via the provided SDL callback // keep last len_ms seconds of audio in a circular buffer bool resume(); bool pause(); bool clear(); // callback to be called by SDL void callback(uint8_t * stream, int len); // get audio data from the circular buffer void get(int ms, std::vector & audio); private: SDL_AudioDeviceID m_dev_id_in = 0; int m_len_ms = 0; int m_sample_rate = 0; std::atomic_bool m_running; std::mutex m_mutex; std::vector m_audio; std::vector m_audio_new; size_t m_audio_pos = 0; size_t m_audio_len = 0; }; // Return false if need to quit bool sdl_poll_events();