diff --git a/bin/main.cpp b/bin/main.cpp index 4c20c62..88b7f8a 100755 --- a/bin/main.cpp +++ b/bin/main.cpp @@ -2,5 +2,6 @@ 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 25728e8..86a5376 100755 --- a/src/monitor/gui/components/audio/audio.hpp +++ b/src/monitor/gui/components/audio/audio.hpp @@ -31,11 +31,10 @@ namespace monitor::components // делать void drop(); void set_pos(double pos); - void set_step(std::size_t step); private: void init(std::string snapshot_id, std::filesystem::path file); void change(std::string snapshot_id); - void callback(sf::Time time, double pos); + 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 b2b8575..da1c053 100755 --- a/src/monitor/gui/components/audio/cpp/base.cpp +++ b/src/monitor/gui/components/audio/cpp/base.cpp @@ -6,7 +6,7 @@ namespace monitor::components void audio::on_attach() { CONNECT(this); - m_player.set_callback(std::bind(&audio::callback, this, std::placeholders::_1, std::placeholders::_2)); + m_player.set_callback(std::bind(&audio::callback, this, std::placeholders::_1)); m_player.set_device(); } @@ -39,7 +39,6 @@ namespace monitor::components void audio::change(std::string snapshot_id) { - hack::log()(m_current_audio.m_current_time.asSeconds()); 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]; @@ -47,12 +46,10 @@ namespace monitor::components m_player.set_audio_pos(m_current_audio.m_current_time); } - void audio::callback(sf::Time time, double pos) + void audio::callback(sf::Time time) { m_current_audio.m_current_time = time; - // HERE - // начинаем тут, делаем установку маркера проигрывания - VE::event e { utils::event_type::INCREMENT_MARKER_AUDIO_POSITION, pos }; + VE::event e { utils::event_type::INCREMENT_MARKER_AUDIO_POSITION, time }; EMIT(e); } @@ -68,10 +65,4 @@ namespace monitor::components { m_player.set_audio_pos(pos); } - - // step - шаг отправки сигнала на смещение маркера. он же кол-во block_size-ов на все произведение - void audio::set_step(std::size_t step) - { - m_player.set_step(step); - } } diff --git a/src/monitor/gui/components/audio/cpp/on_event.cpp b/src/monitor/gui/components/audio/cpp/on_event.cpp index 5fbf797..25a49d5 100755 --- a/src/monitor/gui/components/audio/cpp/on_event.cpp +++ b/src/monitor/gui/components/audio/cpp/on_event.cpp @@ -30,8 +30,8 @@ namespace monitor::components case utils::event_type::INIT_AUDIO: { auto [snapshot_id, file] = std::any_cast>(e.m_data); - m_status = utils::var::STATUS::ACTIVE; init(snapshot_id, file); + m_status = utils::var::STATUS::ACTIVE; break; } diff --git a/src/monitor/gui/components/base_plugins/cpp/base.cpp b/src/monitor/gui/components/base_plugins/cpp/base.cpp index 73f322a..f4bb62b 100644 --- a/src/monitor/gui/components/base_plugins/cpp/base.cpp +++ b/src/monitor/gui/components/base_plugins/cpp/base.cpp @@ -1,6 +1,7 @@ #include "monitor/gui/components/base_plugins/base_plugins.hpp" #include "monitor/utils/plugins/raw_data.hpp" #include "monitor/utils/plugins/magnitude.hpp" +#include "monitor/utils/event_type.hpp" namespace monitor::components { @@ -37,7 +38,10 @@ namespace monitor::components m_setup = setup; m_graph.init(m_snapshot_id, m_setup); m_graph.set_plugin(m_base_plugins[0]); - // 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) }; + EMIT(e); } } diff --git a/src/monitor/gui/components/graph/cpp/base.cpp b/src/monitor/gui/components/graph/cpp/base.cpp index 0cb0a5e..d533498 100755 --- a/src/monitor/gui/components/graph/cpp/base.cpp +++ b/src/monitor/gui/components/graph/cpp/base.cpp @@ -39,6 +39,7 @@ namespace monitor::components { 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: @@ -59,4 +60,9 @@ namespace monitor::components } } } + + std::size_t graph::get_plugin_size() noexcept + { + return m_plugin->m_size; + } } diff --git a/src/monitor/gui/components/graph/graph.hpp b/src/monitor/gui/components/graph/graph.hpp index 21f8e9e..9102f91 100755 --- a/src/monitor/gui/components/graph/graph.hpp +++ b/src/monitor/gui/components/graph/graph.hpp @@ -21,6 +21,7 @@ namespace monitor::components public: void init(std::string snapshot_id, hr::setup setup); void set_plugin(std::shared_ptr plugin) noexcept; + std::size_t get_plugin_size() noexcept; private: std::shared_ptr m_plugin; diff --git a/src/monitor/gui/components/markers/cpp/on_event.cpp b/src/monitor/gui/components/markers/cpp/on_event.cpp index f4f7aca..99bbb79 100644 --- a/src/monitor/gui/components/markers/cpp/on_event.cpp +++ b/src/monitor/gui/components/markers/cpp/on_event.cpp @@ -1,5 +1,6 @@ #include "monitor/gui/components/markers/markers.hpp" #include "monitor/utils/event_type.hpp" +#include namespace monitor::components { @@ -35,8 +36,10 @@ namespace monitor::components { case utils::event_type::INCREMENT_MARKER_AUDIO_POSITION: { - auto pos = std::any_cast(e.m_data); - m_marker_audio_position += pos; + auto t = std::any_cast(e.m_data); + static int index = 0; + if (index%16 == 0) ++m_marker_audio_position; + ++index; break; } diff --git a/src/monitor/gui/components/markers/cpp/render.cpp b/src/monitor/gui/components/markers/cpp/render.cpp index b368831..a0d00ff 100644 --- a/src/monitor/gui/components/markers/cpp/render.cpp +++ b/src/monitor/gui/components/markers/cpp/render.cpp @@ -5,9 +5,9 @@ namespace monitor::components { void markers::render() { - // -1 это индекс т.к. там внизу тоже они индексируются + // 0 это индекс т.к. там внизу тоже они индексируются // ImPlotDragToolFlags_NoInputs - не дает передвинуть маркер - ImPlot::DragLineX(-1, &m_marker_audio_position, m_marker_audio_color, 0.1f, ImPlotDragToolFlags_NoCursors | ImPlotDragToolFlags_NoInputs); + ImPlot::DragLineX(0, &m_marker_audio_position, m_marker_audio_color, 0.1f, ImPlotDragToolFlags_NoCursors | ImPlotDragToolFlags_NoInputs); // кликаем для установки маркера аудио (зеленый) if (ImGui::IsMouseClicked(ImGuiMouseButton_Middle)) @@ -21,7 +21,7 @@ namespace monitor::components if (m_shift_press && ImPlot::IsPlotHovered()) { m_marker_mouse_position = ImPlot::GetPlotMousePos().x; - ImPlot::DragLineX(1000, &m_marker_mouse_position, m_marker_mouse_color, 0.1f, ImPlotDragToolFlags_NoCursors | ImPlotDragToolFlags_NoInputs); + ImPlot::DragLineX(1, &m_marker_mouse_position, m_marker_mouse_color, 0.1f, ImPlotDragToolFlags_NoCursors | ImPlotDragToolFlags_NoInputs); } } } diff --git a/src/monitor/gui/components/markers/markers.hpp b/src/monitor/gui/components/markers/markers.hpp index bd3cd78..db68d5a 100644 --- a/src/monitor/gui/components/markers/markers.hpp +++ b/src/monitor/gui/components/markers/markers.hpp @@ -15,7 +15,7 @@ namespace monitor::components private: ImVec4 m_marker_audio_color; ImVec4 m_marker_mouse_color; - double m_marker_audio_position = 100.0; + double m_marker_audio_position = 0.0; double m_marker_mouse_position = 100.0; bool m_shift_press = false; }; diff --git a/src/monitor/gui/components/snapshot/cpp/base.cpp b/src/monitor/gui/components/snapshot/cpp/base.cpp index d52ceb0..fda9d4a 100755 --- a/src/monitor/gui/components/snapshot/cpp/base.cpp +++ b/src/monitor/gui/components/snapshot/cpp/base.cpp @@ -1,6 +1,5 @@ #include "monitor/gui/components/snapshot/snapshot.hpp" #include "monitor/utils/var.hpp" -#include "monitor/utils/event_type.hpp" namespace monitor::components { @@ -32,8 +31,5 @@ namespace monitor::components m_snapshot_id = hack::security::generate_uuid(); m_setup = setup; m_base_plugins.init(m_snapshot_id, m_setup); - - VE::event e { utils::event_type::INIT_AUDIO, std::pair(m_snapshot_id, setup.m_file) }; - EMIT(e); } } diff --git a/src/monitor/gui/components/tabs/cpp/base.cpp b/src/monitor/gui/components/tabs/cpp/base.cpp index 3c7f979..983bf5a 100755 --- a/src/monitor/gui/components/tabs/cpp/base.cpp +++ b/src/monitor/gui/components/tabs/cpp/base.cpp @@ -29,8 +29,8 @@ namespace monitor::components s->init(setup); m_snapshots.push_back(s); - VE::event e0 { utils::event_type::CREATE_SNAPSHOT_COMPLETED, nullptr }; - EMIT(e0); + VE::event e { utils::event_type::CREATE_SNAPSHOT_COMPLETED, nullptr }; + EMIT(e); change_tab(m_snapshots.size() - 1); } diff --git a/src/monitor/libs/audio/audio.cpp b/src/monitor/libs/audio/audio.cpp index b037186..6ec71b5 100644 --- a/src/monitor/libs/audio/audio.cpp +++ b/src/monitor/libs/audio/audio.cpp @@ -15,7 +15,7 @@ namespace monitor::libs // сделать выбор устройства из интерфейса // поставь, то которое есть в списке устройств for (auto& d : devices) std::cout << d << std::endl; - std::string target_device = devices[1]; + std::string target_device = devices[2]; if (sf::PlaybackDevice::setDevice(target_device)) hack::log()("Устройство успешно установлено: ", target_device); else @@ -25,12 +25,10 @@ namespace monitor::libs void audio::set_file(std::filesystem::path p) { if (!m_music.openFromFile(p)) hack::error()("dont open file:", p.string()); - - std::vector devices = sf::PlaybackDevice::getAvailableDevices(); - std::string targetDevice = devices[1]; + hack::log()("0", m_music.getDuration().asMicroseconds()); } - void audio::set_callback(std::function c) + void audio::set_callback(std::function c) { m_callback = c; } @@ -40,11 +38,6 @@ namespace monitor::libs m_music.setPlayingOffset(t); } - void audio::set_step(std::size_t step) - { - // m_step = sf::microseconds(m_music.getDuration().asMicroseconds() / step); - } - void audio::set_audio_pos(double s) { // m_ct = sf::microseconds(s * m_step.asMicroseconds()); @@ -65,11 +58,7 @@ namespace monitor::libs void audio::emit() { - while (is_playing()) - { - m_callback(m_music.getPlayingOffset(), 1.0); - sf::sleep(m_step); - } + while (is_playing()) m_callback(m_music.getPlayingOffset()); } bool audio::is_playing() diff --git a/src/monitor/libs/audio/audio.hpp b/src/monitor/libs/audio/audio.hpp index 6c11df6..62442de 100644 --- a/src/monitor/libs/audio/audio.hpp +++ b/src/monitor/libs/audio/audio.hpp @@ -20,8 +20,7 @@ namespace monitor::libs void pause(); void toggle_play(); bool is_playing(); - void set_callback(std::function c); - void set_step(std::size_t step); + void set_callback(std::function c); void set_audio_pos(double s); void set_audio_pos(sf::Time t); @@ -33,7 +32,7 @@ namespace monitor::libs sf::Music m_music; sf::Time m_ct = sf::Time::Zero; sf::Time m_step = sf::Time::Zero; - std::function m_callback; + std::function m_callback; }; } diff --git a/src/monitor/utils/plugin.hpp b/src/monitor/utils/plugin.hpp index d66fa00..1d59ade 100644 --- a/src/monitor/utils/plugin.hpp +++ b/src/monitor/utils/plugin.hpp @@ -31,8 +31,8 @@ namespace monitor::utils // градуировка осьи X hr::fvec_t m_ox; - // размер данных для отрисовки. уситанавливает размер графика - // штука плавающая в зависимости от масштаба + // размер данных для отрисовки. устанавливает размер графика + // и он меняется в зависимости от компересии std::size_t m_size = utils::var::MAX_RENDER_SIZE; // кол-во линий графика @@ -44,12 +44,10 @@ namespace monitor::utils std::vector m_line_data; // говорит нужно ли делать сжатие графика ли нет - bool m_is_scale = false; + bool m_comporession = false; - std::size_t m_step = 0; - - // это кол-во точек, которые нужно отрисовать с учетом текущего масштаба но в прошлом шаге - std::size_t m_past_k2 = 0; + // шаг сжатия + std::size_t m_comporession_step = 0; public: virtual bool empty() { return m_result.empty(); } @@ -58,16 +56,13 @@ namespace monitor::utils { try { - auto raw_data_size = m_result.m_size; - if (raw_data_size == 0) throw std::invalid_argument("Error set data in plugin: empty data"); - - m_is_scale = raw_data_size > m_size; + m_comporession = m_result.m_size > m_size; + if (!m_comporession) m_size = m_result.m_size; m_line_count = m_result.m_data.size(); m_line_data.reserve(m_line_count); for (std::size_t i = 0; i < m_line_count; ++i) m_line_data.push_back(hr::fvec_t(m_size, 0.f)); - m_ox.reserve(m_size); fill_ox(); } catch(std::exception& e) @@ -78,17 +73,15 @@ namespace monitor::utils virtual void fill_ox(std::size_t start_pos = 0) { - m_ox.clear(); + m_ox.reserve(m_size); for (std::size_t i = start_pos; i < m_size + start_pos; ++i) m_ox.push_back(i); } - // этот метод запускается один раз при первом рендеринге - // для заполнения начальными данными virtual void fill() { - if (m_is_scale) + if (m_comporession) { - m_step = m_result.m_size / m_size + 1; + m_comporession_step = m_result.m_size / m_size; std::size_t line_count = 0; for (auto& gd : m_line_data) @@ -97,21 +90,22 @@ namespace monitor::utils for (auto& g : gd) { float tmp_e = 0.f; - for (std::size_t j = bin_index - m_step; j < bin_index; ++j) + for (std::size_t j = bin_index - m_comporession_step; j < bin_index; ++j) { auto e = m_result.m_data[line_count][j].m_value; tmp_e = hack::math::max_abs(e, tmp_e); } g = tmp_e; - bin_index += m_step; + bin_index += m_comporession_step; if (bin_index > m_result.m_size) bin_index = m_result.m_size; } + m_size = bin_index / m_comporession_step; + hack::log()(m_comporession_step, m_size); ++line_count; } } else { - // заполняется, когда данных пришло меньше чем нужно для полного рендеринга std::size_t line_count = 0; for (auto el : m_result.m_data) { diff --git a/src/monitor/utils/plugins/fft.hpp b/src/monitor/utils/plugins/fft.hpp index 1c96684..f76ebe0 100644 --- a/src/monitor/utils/plugins/fft.hpp +++ b/src/monitor/utils/plugins/fft.hpp @@ -43,7 +43,7 @@ namespace monitor::utils::plugins // для заполнения начальными данными virtual void fill() { - if (m_is_scale) hack::error()("ДАнных больше чем можем отрисовать на экране, см. что-то с масштабированием..."); + if (m_comporession) hack::error()("Данных больше чем можем отрисовать на экране, см. что-то с масштабированием..."); std::size_t line_count = 0; for (auto el : m_result.m_data)