From 6dc4f166896269279931661061b1731d3f1332aa Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 1 Mar 2025 06:10:59 -0500 Subject: [PATCH] GUI: add an audio load chart --- src/gui/gui.cpp | 3 +++ src/gui/gui.h | 3 +++ src/gui/stats.cpp | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 60c245b86..c85504773 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -8569,6 +8569,7 @@ FurnaceGUI::FurnaceGUI(): lastPatternWidth(0.0f), longThreshold(0.48f), buttonLongThreshold(0.20f), + lastAudioLoadsPos(0), latchNote(-1), latchIns(-2), latchVol(-1), @@ -8937,6 +8938,8 @@ FurnaceGUI::FurnaceGUI(): memset(keyHit,0,sizeof(float)*DIV_MAX_CHANS); memset(keyHit1,0,sizeof(float)*DIV_MAX_CHANS); + memset(lastAudioLoads,0,sizeof(float)*120); + memset(pianoKeyHit,0,sizeof(float)*180); memset(pianoKeyPressed,0,sizeof(bool)*180); diff --git a/src/gui/gui.h b/src/gui/gui.h index c82ebc799..8d252d3e6 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -2379,6 +2379,9 @@ class FurnaceGUI { String nextDesc; String nextDescName; + float lastAudioLoads[120]; + int lastAudioLoadsPos; + OperationMask opMaskDelete, opMaskPullDelete, opMaskInsert, opMaskPaste, opMaskTransposeNote, opMaskTransposeValue; OperationMask opMaskInterpolate, opMaskFade, opMaskInvertVal, opMaskScale; OperationMask opMaskRandomize, opMaskFlip, opMaskCollapseExpand; diff --git a/src/gui/stats.cpp b/src/gui/stats.cpp index 0929cfd74..f9f27fa6d 100644 --- a/src/gui/stats.cpp +++ b/src/gui/stats.cpp @@ -31,11 +31,21 @@ void FurnaceGUI::drawStats() { if (ImGui::Begin("Statistics",&statsOpen,globalWinFlags,_("Statistics"))) { size_t lastProcTime=e->processTime; double maxGot=1000000000.0*(double)e->getAudioDescGot().bufsize/(double)e->getAudioDescGot().rate; - String procStr=fmt::sprintf("%.1f%%",100.0*((double)lastProcTime/(double)maxGot)); ImGui::AlignTextToFramePadding(); ImGui::Text(_("Audio load")); ImGui::SameLine(); - ImGui::ProgressBar((double)lastProcTime/maxGot,ImVec2(-FLT_MIN,0),procStr.c_str()); + ImGui::ProgressBar((double)lastProcTime/maxGot,ImVec2(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("100.0%").x,0),""); + ImGui::SameLine(); + ImGui::Text("%.1f%%",100.0*((double)lastProcTime/(double)maxGot)); + if (ImGui::GetContentRegionAvail().y>8.0f*dpiScale) { + // draw a chart + lastAudioLoads[lastAudioLoadsPos]=(double)lastProcTime/maxGot; + if (++lastAudioLoadsPos>=120) lastAudioLoadsPos=0; + + ImGui::PushStyleColor(ImGuiCol_FrameBg,ImVec4(0,0,0,0)); + ImGui::PlotLines("##ALChart",lastAudioLoads,120,lastAudioLoadsPos,NULL,0.0f,1.0f,ImGui::GetContentRegionAvail()); + ImGui::PopStyleColor(); + } } if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_STATS; ImGui::End();