remove init setup
This commit is contained in:
@@ -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<hr::plugins::fft>(setup);
|
||||
hack::log()("grad:", r.m_grad);
|
||||
|
||||
@@ -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<hr::plugins::raw_data>(setup);
|
||||
hack::log()("grad:", r.m_grad);
|
||||
|
||||
@@ -24,14 +24,12 @@ namespace hr
|
||||
template<typename Plugin>
|
||||
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<SNDFILE, decltype(deleter)> 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;
|
||||
}
|
||||
|
||||
// Инициализация переменных для чтения
|
||||
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<base_t>(setup.m_channels);
|
||||
}
|
||||
|
||||
@@ -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<SNDFILE, decltype(deleter)> 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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user