quicklevel: thread safety (oops), don't run if no UI instance

master
zetaPRIME 2021-11-12 03:42:12 -05:00
parent d4a12647d2
commit 80c90451f3
2 changed files with 13 additions and 7 deletions

15
notes
View File

@ -41,15 +41,17 @@ TODO {
add ,XX support to global tempo
}
- actual config file loading/saving
solo gadget {
interprets incoming commands as monophonic with portamento
probably not super useful for tracked things but good for playing live
}
color scheme load/save
- indexer abstraction for audioports (assign/add std::pair<float, float>)
maybe a similar abstraction for processing notes to what commandreader does
maybe interpolate between LUT levels
bugs to fix {
PLAYBACK BREAKS AFTER FIRST PLAY??? {
doesn't happen in Lovely Storm; only where Capaxitor is used??
@ -58,6 +60,7 @@ TODO {
seems to be only with the Maybe sample??? idk
}
playback after stopping immediately after a note in the first pattern played sometimes skips that note
^ probably due to note IDs; randomize starting point on each playback start?
things can apparently be hooked up cyclically, which completely breaks the queue
pattern switching is slow when changing (especially increasing) number of rows; set fixed page size to avoid reallocation?
@ -86,13 +89,15 @@ TODO {
(the simple things:)
- gain and panning gadget
- note transpose
volume meter
- volume meter
"wrap clipper" (gain up, then wrap around +-1.0, then gain down)
Polyplexer (splits a single command input into several monophonic outputs and keeps track of individual notes between them)
probably three sorts of sampler (quick drum sequencer, quick single-sample "wavetable", then the full-on tracker sampler later on)
- quick drum sequencer (BeatPad)
- quick single-sample "wavetable" (Capaxitor)
full-fat tracker sampler at some point
}
}

View File

@ -64,10 +64,11 @@ void QuickLevel::release() {
lv[1][0] = 0;
lv[1][1] = 0;
if (obj) obj->scene()->update();
if (obj) QMetaObject::invokeMethod(obj->scene(), "update", Qt::QueuedConnection);
}
void QuickLevel::process() {
if (!obj) return;
auto in = std::static_pointer_cast<AudioPort>(port(Port::Input, Port::Audio, 0));
in->pull();
size_t ts = audioEngine->curTickSize();
@ -90,7 +91,7 @@ void QuickLevel::process() {
lv[1][1] = std::max(lv[1][1], f.r);
}
if (obj) obj->scene()->update();
if (obj) QMetaObject::invokeMethod(obj->scene(), "update", Qt::QueuedConnection);
}
// clear levels on port disconnect