aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--visualization/qmpvisualization.cpp53
1 files changed, 29 insertions, 24 deletions
diff --git a/visualization/qmpvisualization.cpp b/visualization/qmpvisualization.cpp
index 207b8cd..e18426c 100644
--- a/visualization/qmpvisualization.cpp
+++ b/visualization/qmpvisualization.cpp
@@ -84,7 +84,10 @@ void qmpVisualization::showThread()
sm->smUpdateFunc(h);
sm->smQuitFunc(closeh);
sm->smWinTitle("QMidiPlayer Visualization");
- sm->smSetFPS(vsync ? FPS_VSYNC : tfps);
+ if (rendermode)
+ sm->smSetFPS(0);
+ else
+ sm->smSetFPS(vsync ? FPS_VSYNC : tfps);
sm->smNoSuspend(true);
sm->smInit();
shouldclose = false;
@@ -959,11 +962,6 @@ bool qmpVisualization::update()
sm->smRenderQuad(&q);
}
}
- if (osdpos == 4)
- {
- sm->smRenderEnd();
- return shouldclose;
- }
uint32_t ltpc = ~0u;
for (uint32_t i = elb; i < pool.size(); ++i)
{
@@ -1009,21 +1007,24 @@ bool qmpVisualization::update()
int xp = (osdpos & 1) ? wwidth - step - 1 : 1;
int yp = osdpos < 2 ? wheight - step * 5 - 4 : step + 4;
int align = osdpos & 1 ? ALIGN_RIGHT : ALIGN_LEFT;
- font2.updateString(L"Title: %ls", api->getWTitle().c_str());
- font2.render(xp, yp, 0.5, 0xFFFFFFFF, align);
- font2.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
- font.updateString(L"Time Sig: %d/%d", cts >> 8, 1 << (cts & 0xFF));
- font.render(xp, yp += step, 0.5, 0xFFFFFFFF, align);
- font.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
- font.updateString(L"Key Sig: %ls", ts.c_str());
- font.render(xp, yp += step, 0.5, 0xFFFFFFFF, align);
- font.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
- font.updateString(L"Tempo: %.2f", 60. / (ctp / 1e6));
- font.render(xp, yp += step, 0.5, 0xFFFFFFFF, align);
- font.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
- font.updateString(L"Current tick: %d", ctk);
- font.render(xp, yp += step, 0.5, 0xFFFFFFFF, align);
- font.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
+ if (osdpos != 4)
+ {
+ font2.updateString(L"Title: %ls", api->getWTitle().c_str());
+ font2.render(xp, yp, 0.5, 0xFFFFFFFF, align);
+ font2.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
+ font.updateString(L"Time Sig: %d/%d", cts >> 8, 1 << (cts & 0xFF));
+ font.render(xp, yp += step, 0.5, 0xFFFFFFFF, align);
+ font.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
+ font.updateString(L"Key Sig: %ls", ts.c_str());
+ font.render(xp, yp += step, 0.5, 0xFFFFFFFF, align);
+ font.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
+ font.updateString(L"Tempo: %.2f", 60. / (ctp / 1e6));
+ font.render(xp, yp += step, 0.5, 0xFFFFFFFF, align);
+ font.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
+ font.updateString(L"Current tick: %d", ctk);
+ font.render(xp, yp += step, 0.5, 0xFFFFFFFF, align);
+ font.render(xp - 1, yp - 1, 0.5, 0xFF000000, align);
+ }
if (!rendermode)
{
font.updateString(L"FPS: %.2f", sm->smGetFPS());
@@ -1210,12 +1211,12 @@ void qmpVisualization::init()
memset(rpnval, 0xFF, sizeof(rpnval));
memset(rpnid, 0xFF, sizeof(rpnid));
std::sort(this->tspool.begin(), this->tspool.end());
- for (uint32_t tk = 0, n = 4, s = 0; tk <= this->api->getMaxTick();)
+ for (uint32_t tk = 0, n = 4, s = 0, d = 4; tk <= this->api->getMaxTick();)
{
while (tk < (s >= this->tspool.size() ? this->api->getMaxTick() : this->tspool[s].first))
{
this->pool.push_back(new MidiVisualEvent{tk, tk, 0, 0, 999});
- tk += n * this->api->getDivision();
+ tk += n * this->api->getDivision() * 4 / d;
}
tk = (s >= this->tspool.size() ? this->api->getMaxTick() : this->tspool[s].first);
if (tk == this->api->getMaxTick())
@@ -1224,7 +1225,11 @@ void qmpVisualization::init()
++tk;
break;
}
- else n = this->tspool[s++].second >> 24;
+ else
+ {
+ n = this->tspool[s].second >> 24;
+ d = 1 << ((this->tspool[s++].second >> 16) & 0xff);
+ }
}
std::sort(this->pool.begin(), this->pool.end(), cmp);
}