OSSIA
Open Scenario System for Interactive Application
Loading...
Searching...
No Matches
audio_engine.hpp
1#pragma once
2#include <ossia/audio/audio_parameter.hpp>
3#include <ossia/audio/audio_tick.hpp>
4#include <ossia/detail/lockfree_queue.hpp>
5
6#include <smallfun.hpp>
7
8#include <atomic>
9
10#include <ossia-config.hpp>
11
12namespace ossia
13{
14class OSSIA_EXPORT audio_engine
15{
16public:
17 explicit audio_engine();
18 virtual ~audio_engine();
19
20 virtual bool running() const = 0;
22 virtual bool failed() const noexcept { return false; }
23 virtual void wait(int milliseconds);
24 virtual void stop();
25
26 void gc();
27 void sync();
28
29 using fun_type = smallfun::function<void(const ossia::audio_tick_state&), 256>;
30 void set_tick(fun_type&& t);
31 void load_audio_tick();
32
33 // From main thread to audio thread
34 ossia::spsc_queue<fun_type> tick_funlist;
35
36 // From audio thread to main thread
37 ossia::spsc_queue<fun_type> tick_gc;
38
39 fun_type audio_tick;
40
41 std::atomic_bool stop_processing{};
42 std::atomic_bool stop_received{};
43
44 int effective_sample_rate{};
45 int effective_buffer_size{};
51 std::atomic_int observed_sample_rate{};
52 int effective_inputs{};
53 int effective_outputs{};
58 std::atomic_int effective_input_latency{};
59 std::atomic_int effective_output_latency{};
60
62 std::atomic_int64_t xruns{};
63
64 void tick_start() { load_audio_tick(); }
65 void tick_clear() { stop_received = true; }
66 void tick_end() { }
67
68private:
69 std::shared_ptr<audio_engine> self;
70 std::atomic_int64_t request{-1};
71 std::atomic_int64_t reply{-1};
72};
73
74OSSIA_EXPORT
75ossia::audio_engine* make_audio_engine(
76 std::string proto, std::string name, std::string req_in, std::string req_out,
77 int& inputs, int& outputs, int& rate, int& bs);
78}
Definition git_info.h:7