From a279cdf3e31f41ad0b7b38f92cecf3d937529ff3 Mon Sep 17 00:00:00 2001 From: chatlanin Date: Tue, 7 Apr 2026 15:02:06 +0300 Subject: [PATCH] add base change marker position --- bin/main.cpp | 1 - src/monitor/gui/components/audio/audio.hpp | 5 +- src/monitor/gui/components/audio/cpp/base.cpp | 16 ++-- .../gui/components/audio/cpp/on_event.cpp | 5 +- .../components/base_plugins/base_plugins.hpp | 3 + .../gui/components/base_plugins/cpp/base.cpp | 39 +++++++- .../components/base_plugins/cpp/render.cpp | 1 + .../components/creator/cpp/render/setup.cpp | 8 +- .../gui/components/creator/creator.hpp | 2 + src/monitor/gui/components/graph/cpp/base.cpp | 29 ------ .../gui/components/markers/cpp/on_event.cpp | 8 +- .../gui/components/snapshot/cpp/render.cpp | 89 ------------------- src/monitor/libs/audio/audio.cpp | 6 +- src/monitor/utils/plugin.hpp | 1 + 14 files changed, 74 insertions(+), 139 deletions(-) diff --git a/bin/main.cpp b/bin/main.cpp index 3c0ff40..4c20c62 100755 --- a/bin/main.cpp +++ b/bin/main.cpp @@ -2,6 +2,5 @@ auto main(int argc, char* args[]) -> int { - // test sshd run(); } diff --git a/src/monitor/gui/components/audio/audio.hpp b/src/monitor/gui/components/audio/audio.hpp index 86a5376..58d6b1b 100755 --- a/src/monitor/gui/components/audio/audio.hpp +++ b/src/monitor/gui/components/audio/audio.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include "monitor/libs/audio/audio.hpp" #include "monitor/utils/var.hpp" @@ -18,7 +19,7 @@ namespace monitor::components { std::string m_id; sf::Time m_current_time; - std::filesystem::path m_file; + hr::setup m_setup; } m_current_audio; std::map m_audio_data; @@ -33,7 +34,7 @@ namespace monitor::components void set_pos(double pos); private: - void init(std::string snapshot_id, std::filesystem::path file); + void init(std::string snapshot_id, hr::setup& setup); void change(std::string snapshot_id); void callback(sf::Time time); }; diff --git a/src/monitor/gui/components/audio/cpp/base.cpp b/src/monitor/gui/components/audio/cpp/base.cpp index da1c053..d35bc47 100755 --- a/src/monitor/gui/components/audio/cpp/base.cpp +++ b/src/monitor/gui/components/audio/cpp/base.cpp @@ -31,10 +31,11 @@ namespace monitor::components m_player.pause(); } - void audio::init(std::string snapshot_id, std::filesystem::path file) + void audio::init(std::string snapshot_id, hr::setup& setup) { m_player.stop(); - m_audio_data[snapshot_id] = music{ .m_id = snapshot_id, .m_current_time = sf::Time(), .m_file = file }; + m_audio_data[snapshot_id] = music{ .m_id = snapshot_id, .m_current_time = sf::Time(), .m_setup = setup }; + m_status = utils::var::STATUS::ACTIVE; } void audio::change(std::string snapshot_id) @@ -42,18 +43,23 @@ namespace monitor::components m_audio_data[m_current_audio.m_id].m_current_time = m_current_audio.m_current_time; m_player.stop(); m_current_audio = m_audio_data[snapshot_id]; - m_player.set_file(m_current_audio.m_file); + m_player.set_file(m_current_audio.m_setup.m_file); m_player.set_audio_pos(m_current_audio.m_current_time); } void audio::callback(sf::Time time) { m_current_audio.m_current_time = time; - VE::event e { utils::event_type::INCREMENT_MARKER_AUDIO_POSITION, time }; + double seconds = time.asSeconds(); + int current_sample_index = (int)(seconds * m_current_audio.m_setup.m_sample_rate); + + // send to:: components/markers + VE::event e { utils::event_type::INCREMENT_MARKER_AUDIO_POSITION, current_sample_index }; EMIT(e); } - // делать + // HERE + // делать нужно, но надо разобраться зачем? void audio::drop() { m_player.stop(); diff --git a/src/monitor/gui/components/audio/cpp/on_event.cpp b/src/monitor/gui/components/audio/cpp/on_event.cpp index 25a49d5..7227e0d 100755 --- a/src/monitor/gui/components/audio/cpp/on_event.cpp +++ b/src/monitor/gui/components/audio/cpp/on_event.cpp @@ -29,9 +29,8 @@ namespace monitor::components { case utils::event_type::INIT_AUDIO: { - auto [snapshot_id, file] = std::any_cast>(e.m_data); - init(snapshot_id, file); - m_status = utils::var::STATUS::ACTIVE; + auto [snapshot_id, setup] = std::any_cast>(e.m_data); + init(snapshot_id, setup); break; } diff --git a/src/monitor/gui/components/base_plugins/base_plugins.hpp b/src/monitor/gui/components/base_plugins/base_plugins.hpp index ebd5da2..e22016b 100644 --- a/src/monitor/gui/components/base_plugins/base_plugins.hpp +++ b/src/monitor/gui/components/base_plugins/base_plugins.hpp @@ -29,6 +29,9 @@ namespace monitor::components public: void init(std::string snapshot_id, hr::setup setup); + + private: + void calculate_plugin(std::shared_ptr plugin); }; } diff --git a/src/monitor/gui/components/base_plugins/cpp/base.cpp b/src/monitor/gui/components/base_plugins/cpp/base.cpp index f4bb62b..872725f 100644 --- a/src/monitor/gui/components/base_plugins/cpp/base.cpp +++ b/src/monitor/gui/components/base_plugins/cpp/base.cpp @@ -36,12 +36,49 @@ namespace monitor::components { m_snapshot_id = snapshot_id; m_setup = setup; + + calculate_plugin(m_base_plugins[0]); + m_graph.init(m_snapshot_id, m_setup); m_graph.set_plugin(m_base_plugins[0]); + + hack::log()(m_base_plugins[0]->m_result.m_size, m_setup.m_sample_rate); + // m_fft_scaled.init(m_snapshot_id, m_setup); // send to: components/audio - VE::event e { utils::event_type::INIT_AUDIO, std::pair(m_snapshot_id, setup.m_file) }; + VE::event e { utils::event_type::INIT_AUDIO, std::pair(m_snapshot_id, m_setup) }; EMIT(e); } + + void base_plugins::calculate_plugin(std::shared_ptr plugin) + { + if (!plugin->empty()) return; + + switch (plugin->m_type) + { + case utils::plugin::TYPE::RAW_DATA: + { + m_setup.m_domain = hr::DOMAIN_PLUGIN::TIME; + plugin->m_result = hr::run(m_setup); + break; + } + case utils::plugin::TYPE::MAGNITUDE: + { + m_setup.m_domain = hr::DOMAIN_PLUGIN::FREQUENSY; + plugin->m_result = hr::run(m_setup); + break; + } + } + + if (!plugin->empty()) + { + plugin->init(); + plugin->fill(); + } + else + { + hack::error()("NOT SET DATA!"); + } + } } diff --git a/src/monitor/gui/components/base_plugins/cpp/render.cpp b/src/monitor/gui/components/base_plugins/cpp/render.cpp index 9b48a97..9c959d0 100644 --- a/src/monitor/gui/components/base_plugins/cpp/render.cpp +++ b/src/monitor/gui/components/base_plugins/cpp/render.cpp @@ -25,6 +25,7 @@ namespace monitor::components if (ImGui::IsItemClicked()) { m_current_open_index = i; + calculate_plugin(m_base_plugins[i]); m_graph.set_plugin(m_base_plugins[i]); } } diff --git a/src/monitor/gui/components/creator/cpp/render/setup.cpp b/src/monitor/gui/components/creator/cpp/render/setup.cpp index 737a11e..19d2f1a 100644 --- a/src/monitor/gui/components/creator/cpp/render/setup.cpp +++ b/src/monitor/gui/components/creator/cpp/render/setup.cpp @@ -8,7 +8,7 @@ namespace monitor::components float spacing = ImGui::GetStyle().ItemInnerSpacing.x; std::size_t step = 256; - // block_size + // BLOCK SIZE ImGui::Text("block size:"); ImGui::SameLine(0.0f, spacing); @@ -37,11 +37,11 @@ namespace monitor::components ImGui::PopID(); VE_POP_FONT(); ImGui::PopItemFlag(); - // end + // end BLOCK SIZE ImGui::SameLine(0.f, 3.f * spacing); - // step size + // STEP SIZE ImGui::Text("step size:"); ImGui::SameLine(0.0f, spacing); @@ -70,6 +70,6 @@ namespace monitor::components ImGui::PopID(); VE_POP_FONT(); ImGui::PopItemFlag(); - // end + // end STEP SIZE } } diff --git a/src/monitor/gui/components/creator/creator.hpp b/src/monitor/gui/components/creator/creator.hpp index a9a7033..24a36db 100644 --- a/src/monitor/gui/components/creator/creator.hpp +++ b/src/monitor/gui/components/creator/creator.hpp @@ -25,6 +25,8 @@ namespace monitor::components private: void render_setup(); void render_spinner(ImVec2 pos = { 10.f, 8.f }); + + private: void create(); void clear(); }; diff --git a/src/monitor/gui/components/graph/cpp/base.cpp b/src/monitor/gui/components/graph/cpp/base.cpp index d533498..a0905ff 100755 --- a/src/monitor/gui/components/graph/cpp/base.cpp +++ b/src/monitor/gui/components/graph/cpp/base.cpp @@ -30,35 +30,6 @@ namespace monitor::components { m_plugin = std::move(plugin); if (!m_plugin) hack::error()("The object is not installed"); - - if (m_plugin->empty()) - { - switch (m_plugin->m_type) - { - case utils::plugin::TYPE::RAW_DATA: - { - m_setup.m_domain = hr::DOMAIN_PLUGIN::TIME; - m_plugin->m_result = hr::run(m_setup); - hack::log()(m_plugin->m_result.m_size); - break; - } - case utils::plugin::TYPE::MAGNITUDE: - { - m_setup.m_domain = hr::DOMAIN_PLUGIN::FREQUENSY; - m_plugin->m_result = hr::run(m_setup); - break; - } - } - if (!m_plugin->empty()) - { - m_plugin->init(); - m_plugin->fill(); - } - else - { - hack::error()("NOT SET RAW DATA!"); - } - } } std::size_t graph::get_plugin_size() noexcept diff --git a/src/monitor/gui/components/markers/cpp/on_event.cpp b/src/monitor/gui/components/markers/cpp/on_event.cpp index 99bbb79..f25bbdb 100644 --- a/src/monitor/gui/components/markers/cpp/on_event.cpp +++ b/src/monitor/gui/components/markers/cpp/on_event.cpp @@ -36,10 +36,10 @@ namespace monitor::components { case utils::event_type::INCREMENT_MARKER_AUDIO_POSITION: { - auto t = std::any_cast(e.m_data); - static int index = 0; - if (index%16 == 0) ++m_marker_audio_position; - ++index; + auto t = std::any_cast(e.m_data); + + m_marker_audio_position = (double)t/11; + hack::log()(t, m_marker_audio_position); break; } diff --git a/src/monitor/gui/components/snapshot/cpp/render.cpp b/src/monitor/gui/components/snapshot/cpp/render.cpp index b26c2a2..28f0284 100755 --- a/src/monitor/gui/components/snapshot/cpp/render.cpp +++ b/src/monitor/gui/components/snapshot/cpp/render.cpp @@ -11,94 +11,5 @@ namespace monitor::components ImGui::PushID("scale"); m_base_controls.render(); ImGui::PopID(); - - - // m_audio.render(); - // - // ImGui::SameLine(); - // - // // HERE - // // выбор домена для плагина - // auto ctx = ImGui::GetCurrentContext(); - // ImGui::SameLine(0.f, ctx->Style.FramePadding.x); - // ImGui::SetNextItemWidth(120.f); - // static std::size_t domain_id = 0; - // if (ImGui::BeginCombo(VE_NO_NAME("select_domain"), m_domains[domain_id].c_str())) - // { - // for (std::size_t i = 0; i < m_domains.size(); ++i) - // { - // const bool is_selected = (domain_id == i); - // if (ImGui::Selectable(m_domains[i].c_str(), is_selected)) - // domain_id = i; - // if (is_selected) ImGui::SetItemDefaultFocus(); - // } - // ImGui::EndCombo(); - // } - // - // ImGui::SameLine(); - // - // ImGui::SetNextItemWidth(400.f); - // if (ImGui::BeginCombo(VE_NO_NAME("select_plugin"), m_plugin.m_id < 0 ? "---" : m_plugins[m_plugin.m_id].m_name.c_str())) - // { - // for (std::size_t i = 0; i < m_plugins.size(); ++i) - // { - // const bool is_selected = (m_plugin.m_id == static_cast(i)); - // if (ImGui::Selectable(m_plugins[i].m_name.c_str(), is_selected)) - // m_plugin = m_plugins[i]; - // if (is_selected) ImGui::SetItemDefaultFocus(); - // } - // ImGui::EndCombo(); - // } - // - // ImGui::SameLine(); - // - // if (ImGui::Button("add plugin", ImVec2{ 94.f, 27.f })) add_plugin(); - // - // if (ImPlot::BeginSubplots(VE_NO_NAME("graph" + m_snapshot_id), m_rows, m_cols, ImVec2(-1, -1), ImPlotSubplotFlags_LinkRows | ImPlotSubplotFlags_LinkCols)) - // { - // for (const auto& graph : m_graphs) - // { - // if (ImPlot::BeginPlot(VE_NAME(graph.m_name), ImVec2(-1, 0), ImPlotFlags_NoMenus)) - // { - // // по оси X - // ImPlot::SetupAxes(nullptr, nullptr, ImPlotAxisFlags_Opposite | // смена полюсов у надписей оси x. они вверху - // ImPlotAxisFlags_NoSideSwitch | // нельзя перетаскивать оси по сторонам - // (is_first_render ? ImPlotAxisFlags_AutoFit : ImPlotAxisFlags_None) | // авто подстройка размера по горизонтале - // ImPlotAxisFlags_NoHighlight, // не разобрался что это там подсвечивается, что-то с фоном оси - // // по оси Y - // ImPlotAxisFlags_AutoFit | // авто подстройка размера по вертикале - // ImPlotAxisFlags_NoSideSwitch | - // ImPlotAxisFlags_NoHighlight | - // ImPlotAxisFlags_NoTickLabels // текстовые надписи отображаться не будут - // ); - // - // ImPlot::SetupAxisLimits(ImAxis_X1, 0.f, graph.m_render_data[0].size()); - // ImPlot::SetupAxisLimits(ImAxis_Y1, 0.f, graph.m_max_element); - // ImPlot::SetupAxisLimitsConstraints(ImAxis_X1, 0, INFINITY); - // ImPlot::SetupLegend(ImPlotLocation_NorthEast); - // - // - // std::size_t index = 0; - // for (auto& line : graph.m_render_data) - // { - // if (graph.m_type == utils::var::PLUGIN_TYPE::SEGMENTER) - // ImPlot::PlotStems(VE_NAME(std::to_string(index)), graph.m_ox.data(), line.data(), line.size()); - // else - // ImPlot::PlotLine(VE_NAME(std::to_string(index)), graph.m_ox.data(), line.data(), line.size()); - // ++index; - // } - // - // if (graph.m_type != utils::var::PLUGIN_TYPE::MAGNITUDE) m_markers.set_tag_show(false); - // else m_markers.set_tag_show(true); - // - // m_markers.render(); - // - // ImPlot::EndPlot(); - // } - // } - // ImPlot::EndSubplots(); - // } - // - // is_first_render = false; } } diff --git a/src/monitor/libs/audio/audio.cpp b/src/monitor/libs/audio/audio.cpp index 6ec71b5..a00be18 100644 --- a/src/monitor/libs/audio/audio.cpp +++ b/src/monitor/libs/audio/audio.cpp @@ -58,7 +58,11 @@ namespace monitor::libs void audio::emit() { - while (is_playing()) m_callback(m_music.getPlayingOffset()); + while (is_playing()) + { + m_callback(m_music.getPlayingOffset()); + sf::sleep(sf::milliseconds(20)); + } } bool audio::is_playing() diff --git a/src/monitor/utils/plugin.hpp b/src/monitor/utils/plugin.hpp index 1d59ade..8fb9739 100644 --- a/src/monitor/utils/plugin.hpp +++ b/src/monitor/utils/plugin.hpp @@ -57,6 +57,7 @@ namespace monitor::utils try { m_comporession = m_result.m_size > m_size; + hack::log()(m_comporession); if (!m_comporession) m_size = m_result.m_size; m_line_count = m_result.m_data.size();