diff options
author | Robin Gareus <robin@gareus.org> | 2014-09-24 01:04:19 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-09-24 01:26:51 +0200 |
commit | b355f01aa56e29365b228bd3b151a62e89ed938f (patch) | |
tree | c64a1c855351f12f8b52a77b7c61d84d00c1326b /libs/backends/dummy/dummy_audiobackend.h | |
parent | 99a484f1939a685cbfde14dfe90fddeccbacdbf6 (diff) |
DummyBackend: MIDI Event Generators
Diffstat (limited to 'libs/backends/dummy/dummy_audiobackend.h')
-rw-r--r-- | libs/backends/dummy/dummy_audiobackend.h | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/libs/backends/dummy/dummy_audiobackend.h b/libs/backends/dummy/dummy_audiobackend.h index b28a464e3c..04a9cf4348 100644 --- a/libs/backends/dummy/dummy_audiobackend.h +++ b/libs/backends/dummy/dummy_audiobackend.h @@ -37,6 +37,13 @@ namespace ARDOUR { class DummyAudioBackend; +namespace DummyMidiData { + typedef struct _MIDISequence { + float beat_time; + uint8_t event[3]; + } MIDISequence; +}; + class DummyMidiEvent { public: DummyMidiEvent (const pframes_t timestamp, const uint8_t* data, size_t size); @@ -83,6 +90,7 @@ class DummyPort { void disconnect_all (); virtual void* get_buffer (pframes_t nframes) = 0; + void next_period () { _gen_cycle = false; } const LatencyRange& latency_range (bool for_playback) const { @@ -112,6 +120,17 @@ class DummyPort { void _connect (DummyPort* , bool); void _disconnect (DummyPort* , bool); + protected: + // random number generator + void setup_random_number_generator (); + inline float randf (); + inline uint32_t randi (); + uint32_t _rseed; + + // signal generator + volatile bool _gen_cycle; + Glib::Threads::Mutex generator_lock; + }; // class DummyPort class DummyAudioPort : public DummyPort { @@ -133,7 +152,6 @@ class DummyAudioPort : public DummyPort { PonyNoise, SineWave, }; - void next_period () { _gen_cycle = false; } void setup_generator (GeneratorType const, float const); private: @@ -142,8 +160,6 @@ class DummyAudioPort : public DummyPort { // signal generator ('fake' physical inputs) void generate (const pframes_t n_samples); GeneratorType _gen_type; - Glib::Threads::Mutex generator_lock; - volatile bool _gen_cycle; // generator buffers // pink-noise filters @@ -153,11 +169,6 @@ class DummyAudioPort : public DummyPort { uint32_t _tbl_length; uint32_t _tbl_offset; - // random number generator - inline float randf (); - inline uint32_t randi (); - uint32_t _rseed; - // gaussian noise generator float grandf (); bool _pass; @@ -175,8 +186,17 @@ class DummyMidiPort : public DummyPort { void* get_buffer (pframes_t nframes); const DummyMidiBuffer const_buffer () const { return _buffer; } + void setup_generator (int, float const); + private: DummyMidiBuffer _buffer; + + // midi event generator ('fake' physical inputs) + void midi_generate (const pframes_t n_samples); + float _midi_seq_spb; // samples per beat + int32_t _midi_seq_time; + uint32_t _midi_seq_pos; + DummyMidiData::MIDISequence const * _midi_seq_dat; }; // class DummyMidiPort class DummyAudioBackend : public AudioBackend { @@ -346,6 +366,7 @@ class DummyAudioBackend : public AudioBackend { uint32_t _n_midi_inputs; uint32_t _n_midi_outputs; + bool _enable_midi_generators; uint32_t _systemic_input_latency; uint32_t _systemic_output_latency; @@ -373,9 +394,9 @@ class DummyAudioBackend : public AudioBackend { void unregister_ports (bool system_only = false); std::vector<DummyAudioPort *> _system_inputs; + std::vector<DummyMidiPort *> _system_midi_in; std::vector<DummyPort *> _ports; - struct PortConnectData { std::string a; std::string b; |