fix player
This commit is contained in:
@@ -2,5 +2,6 @@
|
||||
|
||||
auto main(int argc, char* args[]) -> int
|
||||
{
|
||||
// test sshd
|
||||
run();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user