summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/audiocacheeventhandler.cc20
-rw-r--r--src/audiocacheeventhandler.h3
-rw-r--r--src/drumgizmo.cc10
3 files changed, 9 insertions, 24 deletions
diff --git a/src/audiocacheeventhandler.cc b/src/audiocacheeventhandler.cc
index a0261a5..a0327b5 100644
--- a/src/audiocacheeventhandler.cc
+++ b/src/audiocacheeventhandler.cc
@@ -96,26 +96,12 @@ void AudioCacheEventHandler::stop()
void AudioCacheEventHandler::setThreaded(bool threaded)
{
- if(this->threaded == threaded)
- {
- return;
- }
-
- if(threaded && !running)
- {
- start();
- }
- else if(!threaded && running)
- {
- stop();
- }
-
- this->threaded = threaded;
+ this->threaded.store(threaded);
}
bool AudioCacheEventHandler::isThreaded() const
{
- return threaded;
+ return threaded.load();
}
void AudioCacheEventHandler::lock()
@@ -279,7 +265,7 @@ void AudioCacheEventHandler::thread_main()
void AudioCacheEventHandler::pushEvent(CacheEvent& cache_event)
{
- if(!threaded)
+ if(!threaded.load())
{
handleEvent(cache_event);
return;
diff --git a/src/audiocacheeventhandler.h b/src/audiocacheeventhandler.h
index 4c0e9d9..7d4ed58 100644
--- a/src/audiocacheeventhandler.h
+++ b/src/audiocacheeventhandler.h
@@ -28,6 +28,7 @@
#include <list>
#include <mutex>
+#include <atomic>
#include "thread.h"
#include "semaphore.h"
@@ -102,7 +103,7 @@ protected:
std::list<CacheEvent> eventqueue;
- bool threaded{false};
+ std::atomic<bool> threaded{false};
Semaphore sem;
Semaphore sem_run;
bool running{false};
diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc
index 14d47a1..b6d464f 100644
--- a/src/drumgizmo.cc
+++ b/src/drumgizmo.cc
@@ -56,7 +56,7 @@ DrumGizmo::DrumGizmo(Settings& settings,
, kit()
, input_processor(settings, kit, activeevents)
, framesize(0)
- , freewheel(false)
+ , freewheel(true)
, events{}
, settings(settings)
{
@@ -110,11 +110,8 @@ 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;
- audioCache.setAsyncMode(!freewheel);
- }
+ this->freewheel = freewheel;
+ audioCache.setAsyncMode(!freewheel);
}
void DrumGizmo::setRandomSeed(unsigned int seed)
@@ -125,6 +122,7 @@ void DrumGizmo::setRandomSeed(unsigned int seed)
bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples)
{
setFrameSize(nsamples);
+ setFreeWheel(ie.isFreewheeling() && oe.isFreewheeling());
ie.pre();
oe.pre(nsamples);