2 #include <ossia/audio/audio_parameter.hpp>
3 #include <ossia/audio/audio_tick.hpp>
4 #include <ossia/detail/lockfree_queue.hpp>
6 #include <smallfun.hpp>
8 #include <ossia-config.hpp>
12 class OSSIA_EXPORT audio_engine
15 explicit audio_engine();
16 virtual ~audio_engine();
18 virtual bool running()
const = 0;
19 virtual void wait(
int milliseconds);
25 using fun_type = smallfun::function<void(
const ossia::audio_tick_state&), 256>;
26 void set_tick(fun_type&& t);
27 void load_audio_tick();
30 ossia::spsc_queue<fun_type> tick_funlist;
33 ossia::spsc_queue<fun_type> tick_gc;
37 std::atomic_bool stop_processing{};
38 std::atomic_bool stop_received{};
40 int effective_sample_rate{};
41 int effective_buffer_size{};
42 int effective_inputs{};
43 int effective_outputs{};
45 void tick_start() { load_audio_tick(); }
46 void tick_clear() { stop_received =
true; }
50 std::shared_ptr<audio_engine>
self;
51 std::atomic_int64_t request{-1};
52 std::atomic_int64_t reply{-1};
56 ossia::audio_engine* make_audio_engine(
57 std::string proto, std::string name, std::string req_in, std::string req_out,
58 int& inputs,
int& outputs,
int& rate,
int& bs);