add size impl

This commit is contained in:
2026-03-20 14:07:38 +03:00
parent b7f68f97c4
commit a18cefb671
7 changed files with 32 additions and 1 deletions

24
bin/main.raw_data.cpp Normal file
View File

@@ -0,0 +1,24 @@
#include <hack/logger/logger.hpp>
#include "harmonica.hpp"
auto main() -> int
{
// setup создается для каждого файла свой
// т.к. при чтении данных из файла уже должен быть определен размер блока
// данных для чтения m_block_size; см. установки по умолчанию.
// Передается по ссылке и заполняется необходимыми данными
hr::setup setup;
setup.m_domain = hr::DOMAIN_PLUGIN::TIME;
setup.m_file = "./sin.wav";
auto r = hr::run<hr::plugins::raw_data>(setup);
hack::log()("grad:", r.m_grad);
hack::log()("min:", r.m_min, "max:", r.m_max);
hack::log()("size", r.m_size);
if (!r.empty())
{
for (auto& p : r.m_data)
hack::log()(p[0].m_value);
}
}

View File

@@ -1,6 +1,6 @@
executable( executable(
meson.project_name(), meson.project_name(),
'main.cpp', 'main.raw_data.cpp',
dependencies : deps, dependencies : deps,
cpp_args: args, cpp_args: args,
include_directories : inc include_directories : inc

View File

@@ -18,6 +18,7 @@ namespace hr::plugins
// т.к. реализация FFT (rdft) уже возвращает только уникальную часть спектра, а не полный симметричный массив из 1024 элементов. // т.к. реализация FFT (rdft) уже возвращает только уникальную часть спектра, а не полный симметричный массив из 1024 элементов.
m_frames = m_setup.m_step_size + 1; m_frames = m_setup.m_step_size + 1;
m_result.m_grad.reserve(m_frames); m_result.m_grad.reserve(m_frames);
m_result.m_size = m_frames;
for (size_t i = 0; i < m_frames; ++i) for (size_t i = 0; i < m_frames; ++i)
m_result.m_grad.push_back(static_cast<float>(i) * m_setup.m_sample_rate / m_setup.m_block_size); m_result.m_grad.push_back(static_cast<float>(i) * m_setup.m_sample_rate / m_setup.m_block_size);
} }

View File

@@ -31,6 +31,7 @@ namespace hr::plugins
b.m_value = v; b.m_value = v;
b.m_duration = timestamp; b.m_duration = timestamp;
++m_result.m_size;
m_result.set_bit(0, b); m_result.set_bit(0, b);
m_result.set_min_max(v); m_result.set_min_max(v);
} }

View File

@@ -27,6 +27,7 @@ namespace hr::plugins
m_result.set_bit(0, b); m_result.set_bit(0, b);
m_result.set_min_max(v); m_result.set_min_max(v);
} }
m_result.m_size += base.size();
} }
void raw_data::process(cvec_t& fft, fvec_t& base, real_time timestamp) void raw_data::process(cvec_t& fft, fvec_t& base, real_time timestamp)

View File

@@ -67,6 +67,10 @@ namespace hr
m_min = hack::math::min(m_min, v); m_min = hack::math::min(m_min, v);
} }
// в данном случае вы сами решаете, что для вас значит размер
// это может быть размер всего массива m_data или размер массива данных хранящихся в каждом бине
// или этот же массив но помноженный на размер m_data
std::size_t m_size = 0;
// иногда нужна градуировка одна и тажа для всех бинов // иногда нужна градуировка одна и тажа для всех бинов
std::vector<base_t> m_grad; std::vector<base_t> m_grad;