Andrew Belt
e88c39c426
Rename ReadWriteMutex to SharedMutex. Use shared/exclusive terminology instead of read/write.
2 years ago
Andrew Belt
2e4580112e
Fix hang when initializing Audio module.
2 years ago
Andrew Belt
d7aa204bc7
Copy patch storage dir when cloning individual module.
2 years ago
Andrew Belt
0fd6d8a858
Fix deadlock in MIDI Map dataFromJson() and onReset() by creating a few Engine::*_NoLock() methods and calling them. Make Engine::updateParamHandle() write-lock instead of read-lock.
3 years ago
Andrew Belt
b22f88b8aa
Rename INTERNAL to PRIVATE. Add PRIVATE to several functions/symbols that plugins should never call/use.
3 years ago
Andrew Belt
4e8b9ef301
Improve namespace documentation.
3 years ago
Andrew Belt
4567cc4220
Master audio module (the module that clocks Engine) makes more sense.
3 years ago
Andrew Belt
de3f42edc1
Rename Engine::setParam() etc to Engine::setParamValue() etc.
3 years ago
Andrew Belt
b17f6ee3fe
Add fallback thread to Engine to step blocks if no primary module is set.
3 years ago
Andrew Belt
661fd3863d
Add Module Save event.
3 years ago
Andrew Belt
ea431882a7
Add Engine meter to menu bar.
3 years ago
Andrew Belt
1b76dd5f07
Change midi::Message::toString() to const. Clean up midi code.
3 years ago
Andrew Belt
5043d0e10a
Use Engine frame instead of seconds timestamp for midi::Message.
3 years ago
Andrew Belt
357bd847bf
Rename PRIVATE macro to INTERNAL.
3 years ago
Andrew Belt
5f8f9b8e35
Change `bypass` variable name to `bypassed` when appropriate.
3 years ago
Andrew Belt
317b9125b6
Make ReadWriteLock non-recursive and add *_NoLock() methods to Engine as needed.
Split Module::bypass() into isBypass/setBypass().
Add more documentation to Engine methods.
3 years ago
Andrew Belt
2f5ce16ce8
No longer require that a primary Module belongs to the Engine.
3 years ago
Andrew Belt
9f04e56106
AudioInterface: Set primary module after instead of before adding to the Engine (WIP).
3 years ago
Andrew Belt
90ada5c532
Add Engine::setSuggestedSampleRate(). Make ReadWriteLock support recursive writes.
3 years ago
Andrew Belt
4c7c5b1694
Add auto engine sample rate setting.
3 years ago
Andrew Belt
f0753792b8
Rename "step" terminology of Engine to "block". Tweak ModuleWidget meter appearance.
3 years ago
Andrew Belt
7efd063392
Change timestamps from int64_t to double, and define epoch as when `system::init()` is called.
3 years ago
Andrew Belt
5e4124f66a
Rename bypassed to bypass everywhere.
4 years ago
Andrew Belt
f887faea79
Fix module and cable ID variables that were `int` instead of `int64_t`. Add `Engine::getNumCables()` and `Engine::getCableIds()`.
4 years ago
Andrew Belt
abde7d983f
Add Engine::getFrameTime() and getStepDuration().
4 years ago
Andrew Belt
b8d47b5378
Add Engine::getNumModules() and getModuleIds() methods.
4 years ago
Andrew Belt
05427d938b
Overhaul threading model for Engine using a shared mutex based design.
4 years ago
Andrew Belt
537b64d011
Remove engine pausing as it no longer makes sense with the new "external stepping" engine architecture.
4 years ago
Andrew Belt
120aafe6d3
Change order of includes to C++ standard headers, library headers, and local project headers.
4 years ago
Andrew Belt
306e454f0c
Use higher resolution clock for system::getNanoseconds() on Windows.
Ban `long` from codebase. Use int64_t instead.
4 years ago
Andrew Belt
60d2283010
Add timestamp to MIDI message. Make MIDI-* modules wait until a message is `stepFrames` frames old until processing it, improving MIDI stability. Add Engine::getStepFrame, getStepTime, and getStepFrames.
4 years ago
Andrew Belt
c33dc3c842
Rename module disabling to bypassing.
5 years ago
Andrew Belt
12fcaa4b08
Move moduleFromJson from engine to plugin namespace. Move Engine mutex lock at the top of Engine::step().
5 years ago
Andrew Belt
4936df2c0b
Move ParamWidget/Knob/Switch properties to ParamQuantity. Fix static linking on Linux.
5 years ago
Andrew Belt
e4b6056ded
Massive WIP v2 overhaul:
- Add Engine::fromJson which can be called without the GUI at all.
- Make RackWidget::fromJson attach itself to existing Engine state. However, once attached, they own their Engine objects (Module, Cable).
- Remove Engine thread. Now Engine must be stepped by other threads, such as the audio thread. This is fantastic because there is no longer a mutex lock every audio buffer.
- Add concept of the "primary module", which is allowed to call Engine::step().
- Add many Module events.
5 years ago
Andrew Belt
dca30e2b53
Auto-format code with astyle.
5 years ago
Andrew Belt
1252437344
Add Engine::getFrame().
5 years ago
Andrew Belt
41552e79f2
Restructure ParamHandle Engine internals.
5 years ago
Andrew Belt
696939069d
Use <> instead of "" for include directive.
5 years ago
Andrew Belt
30c5b24ec5
Add Engine::yieldWorker() which turns worker spinlocks into mutex locks. Fix race condition in EngineWorker::run() when changing number of threads.
5 years ago
Andrew Belt
a0e738bc07
Write to `settings::sampleRate` and `threadCount` instead of calling Engine methods.
5 years ago
Andrew Belt
d699c2e07d
Don't overwrite param handles when duplicating MIDI-Map.
5 years ago
Andrew Belt
66aa746476
Replace ModuleHandle with ParamHandle. Move touchedParam from Engine to RackWidget. Fix param mapping bugs in MIDI-Map.
5 years ago
Andrew Belt
7458b5d709
Add param touch to engine. Add param learning to MIDI-Map.
5 years ago
Andrew Belt
d7b72c5b0f
Rewrite thread API. Add ParamMap::to/fromJson().
5 years ago
Andrew Belt
bfcae28495
Update MIDI-Map panel. Add Engine::getModule().
5 years ago
Andrew Belt
927c77eca6
Add more engine docstrings
5 years ago
Andrew Belt
2b98dfc6f9
Write custom threading model in Engine. Remove OpenMP dep. Fix bugs in string::basename/extension.
5 years ago
Andrew Belt
64602576b0
Create `engine::` namespace
5 years ago
Andrew Belt
d35d91de05
Make engine multithreaded with OpenMP
5 years ago