remove init setup

This commit is contained in:
2026-04-07 14:10:47 +03:00
parent 8d860ce409
commit 83ae62ce19
4 changed files with 15 additions and 60 deletions

View File

@@ -8,7 +8,8 @@ auto main() -> int
// данных для чтения m_block_size; см. установки по умолчанию. // данных для чтения m_block_size; см. установки по умолчанию.
// Передается по ссылке и заполняется необходимыми данными // Передается по ссылке и заполняется необходимыми данными
hr::setup setup; hr::setup setup;
setup.init(hr::DOMAIN_PLUGIN::FREQUENSY, "./sin.wav"); setup.m_domain = hr::DOMAIN_PLUGIN::FREQUENSY;
setup.m_file = "./sin.wav";
auto r = hr::run<hr::plugins::fft>(setup); auto r = hr::run<hr::plugins::fft>(setup);
hack::log()("grad:", r.m_grad); hack::log()("grad:", r.m_grad);

View File

@@ -8,7 +8,8 @@ auto main() -> int
// данных для чтения m_block_size; см. установки по умолчанию. // данных для чтения m_block_size; см. установки по умолчанию.
// Передается по ссылке и заполняется необходимыми данными // Передается по ссылке и заполняется необходимыми данными
hr::setup setup; hr::setup setup;
setup.init(hr::DOMAIN_PLUGIN::TIME, "./sin.wav"); setup.m_domain = hr::DOMAIN_PLUGIN::TIME;
setup.m_file = "./sin.wav";
auto r = hr::run<hr::plugins::raw_data>(setup); auto r = hr::run<hr::plugins::raw_data>(setup);
hack::log()("grad:", r.m_grad); hack::log()("grad:", r.m_grad);

View File

@@ -24,14 +24,12 @@ namespace hr
template<typename Plugin> template<typename Plugin>
inline result run(setup& setup) inline result run(setup& setup)
{ {
// Инициализация структуры для libsndfile и открытие файла
SF_INFO sf_info; SF_INFO sf_info;
auto deleter = [&](SNDFILE* f) { if (f) sf_close(f); hack::log()("reading file completed", setup.m_file);}; auto deleter = [&](SNDFILE* f) { if (f) sf_close(f); };
std::unique_ptr<SNDFILE, decltype(deleter)> sf_file(sf_open(setup.m_file.c_str(), SFM_READ, &sf_info), deleter); std::unique_ptr<SNDFILE, decltype(deleter)> sf_file(sf_open(setup.m_file.c_str(), SFM_READ, &sf_info), deleter);
if (!sf_file) if (!sf_file)
{ {
// Обработка ошибки открытия файла
hack::exception ex; hack::exception ex;
hack::log().on_file(); hack::log().on_file();
hack::log().on_func(); hack::log().on_func();
@@ -43,12 +41,15 @@ namespace hr
throw ex; throw ex;
} }
// Инициализация переменных для чтения setup.m_sample_rate = sf_info.samplerate;
setup.m_frames = sf_info.frames;
setup.m_channels = sf_info.channels;
setup.check();
std::size_t read = 0; // Количество обработанных кадров std::size_t read = 0; // Количество обработанных кадров
fvec_t read_data(setup.m_channels * setup.m_step_size, .0); // Буфер для чтения (интерливированные данные) fvec_t read_data(setup.m_channels * setup.m_step_size, .0); // Буфер для чтения (интерливированные данные)
fvec_t in(setup.m_step_size, .0); // Буфер для моно-данных fvec_t in(setup.m_step_size, .0); // Буфер для моно-данных
// Создание плагина и адаптера для обработки
Plugin pl { setup }; Plugin pl { setup };
adapter ad { pl }; adapter ad { pl };
@@ -66,8 +67,7 @@ namespace hr
{ {
in[i] = 0.0; in[i] = 0.0;
// Суммирование всех каналов // Суммирование всех каналов
for (int c = 0; c < setup.m_channels; ++c) for (int c = 0; c < setup.m_channels; ++c) in[i] += read_data[setup.m_channels * i + c];
in[i] += read_data[setup.m_channels * i + c];
// Усреднение для получения моно-сигнала // Усреднение для получения моно-сигнала
in[i] /= static_cast<base_t>(setup.m_channels); in[i] /= static_cast<base_t>(setup.m_channels);
} }

View File

@@ -13,21 +13,6 @@ namespace hr
FREQUENSY FREQUENSY
}; };
inline std::string domain_to_string(DOMAIN_PLUGIN d)
{
std::string res;
switch (d)
{
case hr::DOMAIN_PLUGIN::FREQUENSY:
res = "FREQUENSY";
break;
case hr::DOMAIN_PLUGIN::TIME:
res = "TIME";
break;
}
return res;
}
struct setup struct setup
{ {
// Эти данные заполняются из прочитанного файла (sndfile) // Эти данные заполняются из прочитанного файла (sndfile)
@@ -46,51 +31,19 @@ namespace hr
DOMAIN_PLUGIN m_domain = DOMAIN_PLUGIN::TIME; DOMAIN_PLUGIN m_domain = DOMAIN_PLUGIN::TIME;
void init(DOMAIN_PLUGIN domain, std::filesystem::path file) void check()
{ {
m_domain = domain; if (m_channels == 0)
m_file = file;
// Инициализация структуры для libsndfile и открытие файла
SF_INFO sf_info;
auto deleter = [&](SNDFILE* f) { if (f) sf_close(f); hack::log()("setup file completed", m_file);};
std::unique_ptr<SNDFILE, decltype(deleter)> sf_file(sf_open(m_file.c_str(), SFM_READ, &sf_info), deleter);
if (!sf_file)
{ {
// Обработка ошибки открытия файла
hack::exception ex; hack::exception ex;
hack::log().on_file(); hack::log().on_file();
hack::log().on_func(); hack::log().on_func();
hack::log().on_row(); hack::log().on_row();
ex.title("Error of open file"); ex.title("Нет каналов в аудиофайле");
ex.description(sf_strerror(sf_file.get()));
ex.set("file", m_file); ex.set("file", m_file);
hack::error()(ex); hack::error()(ex);
throw ex; throw ex;
} }
// HERE
// тут нужен DEBUG
print_info();
// Сохранение информации о файле в настройки
m_sample_rate = sf_info.samplerate;
m_frames = sf_info.frames;
m_channels = sf_info.channels;
// можно конечн throw, но не нужно...
if (m_channels == 0)
hack::error()("Нет каналов в аудиофайле");
}
void print_info() const noexcept
{
hack::log()("file", m_file);
hack::log()("domain", domain_to_string(m_domain));
hack::log()("sample rate", m_sample_rate);
hack::log()("channels", m_channels);
hack::log()("frames", m_frames);
} }
}; };
} }