diff --git a/bin/main.fft.cpp b/bin/main.fft.cpp index 6e52331..63f8006 100644 --- a/bin/main.fft.cpp +++ b/bin/main.fft.cpp @@ -8,7 +8,8 @@ auto main() -> int // данных для чтения m_block_size; см. установки по умолчанию. // Передается по ссылке и заполняется необходимыми данными 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(setup); hack::log()("grad:", r.m_grad); diff --git a/bin/main.raw_data.cpp b/bin/main.raw_data.cpp index 788a241..1f8f223 100644 --- a/bin/main.raw_data.cpp +++ b/bin/main.raw_data.cpp @@ -8,7 +8,8 @@ auto main() -> int // данных для чтения m_block_size; см. установки по умолчанию. // Передается по ссылке и заполняется необходимыми данными 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(setup); hack::log()("grad:", r.m_grad); diff --git a/src/harmonica.hpp b/src/harmonica.hpp index 5a1a215..909971b 100644 --- a/src/harmonica.hpp +++ b/src/harmonica.hpp @@ -24,14 +24,12 @@ namespace hr template inline result run(setup& setup) { - // Инициализация структуры для libsndfile и открытие файла 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 sf_file(sf_open(setup.m_file.c_str(), SFM_READ, &sf_info), deleter); if (!sf_file) { - // Обработка ошибки открытия файла hack::exception ex; hack::log().on_file(); hack::log().on_func(); @@ -43,12 +41,15 @@ namespace hr throw ex; } - // Инициализация переменных для чтения - std::size_t read = 0; // Количество обработанных кадров + 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; // Количество обработанных кадров fvec_t read_data(setup.m_channels * setup.m_step_size, .0); // Буфер для чтения (интерливированные данные) fvec_t in(setup.m_step_size, .0); // Буфер для моно-данных - // Создание плагина и адаптера для обработки Plugin pl { setup }; adapter ad { pl }; @@ -66,8 +67,7 @@ namespace hr { in[i] = 0.0; // Суммирование всех каналов - for (int c = 0; c < setup.m_channels; ++c) - in[i] += read_data[setup.m_channels * i + c]; + for (int c = 0; c < setup.m_channels; ++c) in[i] += read_data[setup.m_channels * i + c]; // Усреднение для получения моно-сигнала in[i] /= static_cast(setup.m_channels); } diff --git a/src/utils/workers/setup.hpp b/src/utils/workers/setup.hpp index 08426c0..5d33c44 100644 --- a/src/utils/workers/setup.hpp +++ b/src/utils/workers/setup.hpp @@ -13,21 +13,6 @@ namespace hr 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 { // Эти данные заполняются из прочитанного файла (sndfile) @@ -46,51 +31,19 @@ namespace hr DOMAIN_PLUGIN m_domain = DOMAIN_PLUGIN::TIME; - void init(DOMAIN_PLUGIN domain, std::filesystem::path file) + void check() { - m_domain = domain; - 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 sf_file(sf_open(m_file.c_str(), SFM_READ, &sf_info), deleter); - - if (!sf_file) + if (m_channels == 0) { - // Обработка ошибки открытия файла hack::exception ex; hack::log().on_file(); hack::log().on_func(); hack::log().on_row(); - ex.title("Error of open file"); - ex.description(sf_strerror(sf_file.get())); + ex.title("Нет каналов в аудиофайле"); ex.set("file", m_file); hack::error()(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); } }; }