Anklang 0.3.0-460-gc4ef46ba
ASE — Anklang Sound Engine (C++)

« « « Anklang Documentation
Loading...
Searching...
No Matches
engine.hh
Go to the documentation of this file.
1 // This Source Code Form is licensed MPL-2.0: http://mozilla.org/MPL/2.0
2#ifndef __ASE_ENGINE_HH__
3#define __ASE_ENGINE_HH__
4
5#include <ase/transport.hh>
6#include <ase/platform.hh>
7#include <atomic>
8
9namespace Ase {
10
11class AudioEngineThread;
12
22protected:
23 friend class AudioProcessor;
24 std::atomic<size_t> processor_count_ alignas (64) = 0;
25 std::atomic<uint64_t> render_stamp_ = 0;
26 AudioTransport &transport_;
28 virtual ~AudioEngine ();
29 void enable_output (AudioProcessor &aproc, bool onoff);
30 void schedule_queue_update ();
31 void schedule_add (AudioProcessor &aproc, uint level);
32public:
33 // Owner-Thread API
34 void start_threads ();
35 void stop_threads ();
36 void wakeup_thread_mt ();
37 bool ipc_pending ();
38 void ipc_dispatch ();
39 AudioProcessorP get_event_source ();
40 void set_project (ProjectImplP project);
41 ProjectImplP get_project ();
42 // MT-Safe API
43 uint64_t frame_counter () const { return render_stamp_; }
44 uint64_t block_size () const;
45 const AudioTransport& transport () const { return transport_; }
46 uint sample_rate () const ASE_CONST { return transport().samplerate; }
47 uint nyquist () const ASE_CONST { return transport().nyquist; }
48 double inyquist () const ASE_CONST { return transport().inyquist; }
49 SpeakerArrangement speaker_arrangement () const { return transport().speaker_arrangement; }
50 void set_autostop (uint64_t nsamples);
51 void queue_capture_start (CallbackS&, const String &filename, bool needsrunning);
52 void queue_capture_stop (CallbackS&);
53 bool update_drivers (const String &pcm, uint latency_ms, const StringS &midis);
54 String engine_stats (uint64_t stats) const;
55 static bool thread_is_engine () { return std::this_thread::get_id() == thread_id; }
56 static const ThreadId &thread_id;
57 // JobQueues
58 class JobQueue {
59 friend class AudioEngine;
60 const uint8_t queue_tag_;
61 explicit JobQueue (AudioEngine&);
62 public:
63 void operator+= (const std::function<void()> &job);
64 };
67protected:
68 JobQueue synchronized_jobs;
69};
70
71AudioEngine& make_audio_engine (const VoidF &owner_wakeup, uint sample_rate, SpeakerArrangement speakerarrangement);
72
74template<class T>
75struct Mutable {
76 mutable T value;
77 Mutable (const T &v) : value (v) {}
78 operator T& () { return value; }
79};
80
81} // Ase
82
83#endif /* __ASE_ENGINE_HH__ */
JobQueue async_jobs
Executed asynchronously, may modify AudioProcessor objects.
Definition engine.hh:65
JobQueue const_jobs
Blocks during execution, must treat AudioProcessor objects read-only.
Definition engine.hh:66
Audio signal AudioProcessor base class, implemented by all effects and instruments.
Definition processor.hh:76
T get_id(T... args)
The Anklang C++ API namespace.
Definition api.hh:9
SpeakerArrangement
Definition transport.hh:11
uint32_t uint
Provide 'uint' as convenience type.
Definition cxxaux.hh:18
typedef uint64_t
Transport information for AudioSignal processing.
Definition transport.hh:113
const uint nyquist
Half the samplerate.
Definition transport.hh:116
const uint samplerate
Sample rate (mixing frequency) in Hz used for rendering.
Definition transport.hh:115
const double inyquist
Precalculated 1.0 / nyquist.
Definition transport.hh:118
const SpeakerArrangement speaker_arrangement
Audio output configuration.
Definition transport.hh:119
Helper to modify const struct contents, e.g. asyn job lambda members.
Definition engine.hh:75
Common base type to allow casting between polymorphic classes.
Definition cxxaux.hh:214