diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2015-07-27 19:36:28 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2015-07-27 19:36:28 +0200 |
commit | ec4eb3f535c358e67eb9ae0989b2163b20728d0b (patch) | |
tree | 40fc11923a6e07fc957210b3c0c53b6301a74d97 /src | |
parent | cc9b5ff6d194dc8ead042c5d129ea07e8e68382d (diff) |
Add free-wheel mode to LV2 and DrumGizmo class.
Diffstat (limited to 'src')
-rw-r--r-- | src/cachemanager.cc | 9 | ||||
-rw-r--r-- | src/cachemanager.h | 9 | ||||
-rw-r--r-- | src/drumgizmo.cc | 11 | ||||
-rw-r--r-- | src/drumgizmo.h | 3 |
4 files changed, 31 insertions, 1 deletions
diff --git a/src/cachemanager.cc b/src/cachemanager.cc index dc4b3e7..4cc1fa5 100644 --- a/src/cachemanager.cc +++ b/src/cachemanager.cc @@ -321,6 +321,14 @@ void CacheManager::setFrameSize(size_t framesize) this->framesize = framesize; } +void CacheManager::setAsyncMode(bool async) +{ + // TODO: Clean out read queue. + // TODO: Block until reader thread is idle, otherwise we might screw up the + // buffers...? + threaded = async; +} + void CacheManager::handleLoadNextEvent(cevent_t &e) { assert(files.find(e.afile->filename) != files.end()); @@ -355,7 +363,6 @@ void CacheManager::handleCloseEvent(cevent_t &e) } } - void CacheManager::handleEvent(cevent_t &e) { switch(e.cmd) { diff --git a/src/cachemanager.h b/src/cachemanager.h index 4fe813e..1660ecf 100644 --- a/src/cachemanager.h +++ b/src/cachemanager.h @@ -130,8 +130,17 @@ public: */ void close(cacheid_t id); + /** + * Set internal framesize used when iterating through cache buffers. + */ void setFrameSize(size_t framesize); + /** + * Control reader thread. + * Set to true to make reading happen threaded, false to do all reading sync. + */ + void setAsyncMode(bool async); + ///! Internal thread main method - needs to be public. void thread_main(); diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index 528b542..5348324 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -51,6 +51,7 @@ DrumGizmo::DrumGizmo(AudioOutputEngine *o, AudioInputEngine *i) , oe(o) , ie(i) , framesize(0) + , freewheel(false) { is_stopping = false; cacheManager.init(1000, true); // start thread @@ -189,6 +190,16 @@ void DrumGizmo::setFrameSize(size_t framesize) } } +void DrumGizmo::setFreeWheel(bool freewheel) +{ + // Freewheel = true means that we are bouncing and therefore running faster + // than realtime. + if(freewheel != this->freewheel) { + this->freewheel = freewheel; + cacheManager.setAsyncMode(!freewheel); + } +} + bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples) { setFrameSize(nsamples); diff --git a/src/drumgizmo.h b/src/drumgizmo.h index 4c0740e..041ca35 100644 --- a/src/drumgizmo.h +++ b/src/drumgizmo.h @@ -77,6 +77,8 @@ public: void setFrameSize(size_t framesize); + void setFreeWheel(bool freewheel); + private: DrumKitLoader loader; @@ -98,4 +100,5 @@ private: DrumKit kit; size_t framesize; + bool freewheel; }; |