add signal type as own struc
This commit is contained in:
@@ -4,7 +4,10 @@
|
|||||||
auto main() -> int
|
auto main() -> int
|
||||||
{
|
{
|
||||||
hr::signal_generator generator;
|
hr::signal_generator generator;
|
||||||
auto s = generator.generate(hr::SIGNAL_TYPE::SIN);
|
hr::signal_type st;
|
||||||
hack::log()(hr::get_signal_name(hr::SIGNAL_TYPE::SIN));
|
st.m_type = hr::signal_type::type::SIN;
|
||||||
|
|
||||||
|
auto s = generator.generate(st);
|
||||||
|
hack::log()(st.get_name());
|
||||||
hack::log()(s);
|
hack::log()(s);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,30 +4,30 @@
|
|||||||
|
|
||||||
namespace hr
|
namespace hr
|
||||||
{
|
{
|
||||||
std::vector<float> signal_generator::generate(SIGNAL_TYPE type, NOISE noise)
|
std::vector<float> signal_generator::generate(signal_type st, NOISE noise)
|
||||||
{
|
{
|
||||||
std::vector<float> res;
|
std::vector<float> res;
|
||||||
switch (type)
|
switch (st.m_type)
|
||||||
{
|
{
|
||||||
case SIGNAL_TYPE::SIN:
|
case signal_type::type::SIN:
|
||||||
res = sin(noise);
|
res = sin(noise);
|
||||||
break;
|
break;
|
||||||
case SIGNAL_TYPE::SQUARE:
|
case signal_type::type::SQUARE:
|
||||||
res = square(noise);
|
res = square(noise);
|
||||||
break;
|
break;
|
||||||
case SIGNAL_TYPE::TRIANGLE:
|
case signal_type::type::TRIANGLE:
|
||||||
res = triangle(noise);
|
res = triangle(noise);
|
||||||
break;
|
break;
|
||||||
case SIGNAL_TYPE::SAW:
|
case signal_type::type::SAW:
|
||||||
res = saw(noise);
|
res = saw(noise);
|
||||||
break;
|
break;
|
||||||
case SIGNAL_TYPE::SPEECH_LIKE:
|
case signal_type::type::SPEECH_LIKE:
|
||||||
res = speech_like(noise);
|
res = speech_like(noise);
|
||||||
break;
|
break;
|
||||||
case SIGNAL_TYPE::NOISE_ONLY:
|
case signal_type::type::NOISE_ONLY:
|
||||||
res = noise_only();
|
res = noise_only();
|
||||||
break;
|
break;
|
||||||
case SIGNAL_TYPE::THREE_SINES:
|
case signal_type::type::THREE_SINES:
|
||||||
res = three_sines(noise);
|
res = three_sines(noise);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,41 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <random>
|
#include <random>
|
||||||
#include "utils/var.hpp"
|
#include "utils/workers/signal_type.hpp"
|
||||||
|
|
||||||
// Генерирует простую синусоиду и др. полезности см. SIGNAL_TYPE
|
// Генерирует простую синусоиду и др. полезности см. workers/signal_type.hpp
|
||||||
namespace hr
|
namespace hr
|
||||||
{
|
{
|
||||||
std::string inline get_signal_name(SIGNAL_TYPE t)
|
|
||||||
{
|
|
||||||
std::string name;
|
|
||||||
switch (t)
|
|
||||||
{
|
|
||||||
case SIGNAL_TYPE::SIN:
|
|
||||||
name = "SIN";
|
|
||||||
break;
|
|
||||||
case SIGNAL_TYPE::SQUARE:
|
|
||||||
name = "SQUARE";
|
|
||||||
break;
|
|
||||||
case SIGNAL_TYPE::TRIANGLE:
|
|
||||||
name = "TRIANGLE";
|
|
||||||
break;
|
|
||||||
case SIGNAL_TYPE::SAW:
|
|
||||||
name = "SAW";
|
|
||||||
break;
|
|
||||||
case SIGNAL_TYPE::NOISE_ONLY:
|
|
||||||
name = "NOISE_ONLY";
|
|
||||||
break;
|
|
||||||
case SIGNAL_TYPE::SPEECH_LIKE:
|
|
||||||
name = "SPEECH_LIKE";
|
|
||||||
break;
|
|
||||||
case SIGNAL_TYPE::THREE_SINES:
|
|
||||||
name = "THREE_SINES";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class NOISE
|
enum class NOISE
|
||||||
{
|
{
|
||||||
NO,
|
NO,
|
||||||
@@ -54,7 +24,7 @@ namespace hr
|
|||||||
public:
|
public:
|
||||||
signal_generator() : m_gen(12345) {}
|
signal_generator() : m_gen(12345) {}
|
||||||
|
|
||||||
std::vector<float> generate(SIGNAL_TYPE type, NOISE noise = NOISE::NO);
|
std::vector<float> generate(signal_type st, NOISE noise = NOISE::NO);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
struct signal_params
|
struct signal_params
|
||||||
|
|||||||
@@ -1,20 +1,4 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "noincl.hpp" // IWYU pragma: keep
|
#include "noincl.hpp" // IWYU pragma: keep
|
||||||
|
namespace hr { }
|
||||||
namespace hr
|
|
||||||
{
|
|
||||||
enum class SIGNAL_TYPE
|
|
||||||
{
|
|
||||||
FILE, // Из файла
|
|
||||||
SIN, // Синусоида
|
|
||||||
SQUARE, // Прямоугольный
|
|
||||||
TRIANGLE, // Треугольный
|
|
||||||
SAW, // Пилообразный
|
|
||||||
NOISE_ONLY, // Только шум
|
|
||||||
SPEECH_LIKE, // Типа речь
|
|
||||||
THREE_SINES // Три частоты
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "utils/workers/signal_type.hpp"
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include "utils/var.hpp"
|
|
||||||
|
|
||||||
namespace hr
|
namespace hr
|
||||||
{
|
{
|
||||||
@@ -18,10 +18,11 @@ namespace hr
|
|||||||
int m_frames;
|
int m_frames;
|
||||||
int m_channels;
|
int m_channels;
|
||||||
|
|
||||||
SIGNAL_TYPE m_signal_type = SIGNAL_TYPE::FILE;
|
|
||||||
std::filesystem::path m_file;
|
std::filesystem::path m_file;
|
||||||
std::size_t m_block_size = 1'024;
|
std::size_t m_block_size = 1'024;
|
||||||
std::size_t m_step_size = 512;
|
std::size_t m_step_size = 512;
|
||||||
|
|
||||||
|
signal_type m_signal_type;
|
||||||
DOMAIN_PLUGIN m_domain = DOMAIN_PLUGIN::FREQUENSY;
|
DOMAIN_PLUGIN m_domain = DOMAIN_PLUGIN::FREQUENSY;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
69
src/utils/workers/signal_type.hpp
Normal file
69
src/utils/workers/signal_type.hpp
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace hr
|
||||||
|
{
|
||||||
|
// Некая структура описывающая базоввые типы сигналов
|
||||||
|
struct signal_type
|
||||||
|
{
|
||||||
|
enum class type
|
||||||
|
{
|
||||||
|
FILE, // Из файла
|
||||||
|
SIN, // Синусоида
|
||||||
|
SQUARE, // Прямоугольный
|
||||||
|
TRIANGLE, // Треугольный
|
||||||
|
SAW, // Пилообразный
|
||||||
|
NOISE_ONLY, // Только шум
|
||||||
|
SPEECH_LIKE, // Типа речь
|
||||||
|
THREE_SINES // Три частоты
|
||||||
|
} m_type = type::FILE;
|
||||||
|
|
||||||
|
signal_type() = default;
|
||||||
|
explicit signal_type(type t) : m_type(t) {}
|
||||||
|
|
||||||
|
// Получить имя типа
|
||||||
|
std::string get_name() const
|
||||||
|
{
|
||||||
|
switch (m_type)
|
||||||
|
{
|
||||||
|
case type::FILE: return "FILE";
|
||||||
|
case type::SIN: return "SIN";
|
||||||
|
case type::SQUARE: return "SQUARE";
|
||||||
|
case type::TRIANGLE: return "TRIANGLE";
|
||||||
|
case type::SAW: return "SAW";
|
||||||
|
case type::NOISE_ONLY: return "NOISE_ONLY";
|
||||||
|
case type::SPEECH_LIKE: return "SPEECH_LIKE";
|
||||||
|
case type::THREE_SINES: return "THREE_SINES";
|
||||||
|
default: return "UNKNOWN";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator<(const signal_type& other) const
|
||||||
|
{
|
||||||
|
return m_type < other.m_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const signal_type& other) const
|
||||||
|
{
|
||||||
|
return m_type == other.m_type;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// просто для итерации в графическом интерфейсе
|
||||||
|
inline const std::vector<signal_type>& all_types()
|
||||||
|
{
|
||||||
|
static const std::vector<signal_type> signals = {
|
||||||
|
signal_type(signal_type::type::FILE),
|
||||||
|
signal_type(signal_type::type::SIN),
|
||||||
|
signal_type(signal_type::type::SQUARE),
|
||||||
|
signal_type(signal_type::type::TRIANGLE),
|
||||||
|
signal_type(signal_type::type::SAW),
|
||||||
|
signal_type(signal_type::type::NOISE_ONLY),
|
||||||
|
signal_type(signal_type::type::SPEECH_LIKE),
|
||||||
|
signal_type(signal_type::type::THREE_SINES)
|
||||||
|
};
|
||||||
|
return signals;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user