fix player

This commit is contained in:
2026-03-31 09:57:31 +03:00
parent 29ff210adb
commit 29287712b5
16 changed files with 50 additions and 67 deletions

View File

@@ -2,5 +2,6 @@
auto main(int argc, char* args[]) -> int
{
// test sshd
run();
}

View File

@@ -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);
};
}

View File

@@ -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);
}
}

View File

@@ -30,8 +30,8 @@ namespace monitor::components
case utils::event_type::INIT_AUDIO:
{
auto [snapshot_id, file] = std::any_cast<std::pair<std::string, std::filesystem::path>>(e.m_data);
m_status = utils::var::STATUS::ACTIVE;
init(snapshot_id, file);
m_status = utils::var::STATUS::ACTIVE;
break;
}

View File

@@ -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<std::string, std::filesystem::path>(m_snapshot_id, setup.m_file) };
EMIT(e);
}
}

View File

@@ -39,6 +39,7 @@ namespace monitor::components
{
m_setup.m_domain = hr::DOMAIN_PLUGIN::TIME;
m_plugin->m_result = hr::run<hr::plugins::raw_data>(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;
}
}

View File

@@ -21,6 +21,7 @@ namespace monitor::components
public:
void init(std::string snapshot_id, hr::setup setup);
void set_plugin(std::shared_ptr<utils::plugin> plugin) noexcept;
std::size_t get_plugin_size() noexcept;
private:
std::shared_ptr<utils::plugin> m_plugin;

View File

@@ -1,5 +1,6 @@
#include "monitor/gui/components/markers/markers.hpp"
#include "monitor/utils/event_type.hpp"
#include <SFML/Audio.hpp>
namespace monitor::components
{
@@ -35,8 +36,10 @@ namespace monitor::components
{
case utils::event_type::INCREMENT_MARKER_AUDIO_POSITION:
{
auto pos = std::any_cast<double>(e.m_data);
m_marker_audio_position += pos;
auto t = std::any_cast<sf::Time>(e.m_data);
static int index = 0;
if (index%16 == 0) ++m_marker_audio_position;
++index;
break;
}

View File

@@ -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);
}
}
}

View File

@@ -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;
};

View File

@@ -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<std::string, std::filesystem::path>(m_snapshot_id, setup.m_file) };
EMIT(e);
}
}

View File

@@ -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);
}

View File

@@ -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<std::string> devices = sf::PlaybackDevice::getAvailableDevices();
std::string targetDevice = devices[1];
hack::log()("0", m_music.getDuration().asMicroseconds());
}
void audio::set_callback(std::function<void(sf::Time, float)> c)
void audio::set_callback(std::function<void(sf::Time)> 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()

View File

@@ -20,8 +20,7 @@ namespace monitor::libs
void pause();
void toggle_play();
bool is_playing();
void set_callback(std::function<void(sf::Time, float)> c);
void set_step(std::size_t step);
void set_callback(std::function<void(sf::Time)> 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<void(sf::Time, float)> m_callback;
std::function<void(sf::Time)> m_callback;
};
}

View File

@@ -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<hr::fvec_t> 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)
{

View File

@@ -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)