From 342519003c7deb6e944b0364c9d78f2b2a5bf982 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Tue, 22 Sep 2020 20:24:37 +0300 Subject: [PATCH] Add audio::sample typedef to int16_t --- libs/audio/include/psemek/audio/effect.hpp | 5 +++-- libs/audio/include/psemek/audio/engine.hpp | 5 +++-- libs/audio/include/psemek/audio/sample.hpp | 20 ++++++++++++++++++++ libs/audio/include/psemek/audio/track.hpp | 4 ++-- libs/audio/include/psemek/audio/utils.hpp | 18 ------------------ libs/audio/source/echo.cpp | 6 +++--- libs/audio/source/engine.cpp | 14 +++++++------- 7 files changed, 38 insertions(+), 34 deletions(-) create mode 100644 libs/audio/include/psemek/audio/sample.hpp delete mode 100644 libs/audio/include/psemek/audio/utils.hpp diff --git a/libs/audio/include/psemek/audio/effect.hpp b/libs/audio/include/psemek/audio/effect.hpp index b1487490..ef49401d 100644 --- a/libs/audio/include/psemek/audio/effect.hpp +++ b/libs/audio/include/psemek/audio/effect.hpp @@ -1,7 +1,8 @@ #pragma once +#include + #include -#include #include namespace psemek::audio @@ -13,7 +14,7 @@ namespace psemek::audio virtual void init(int frequency, int channels) = 0; - virtual void operator()(std::int16_t * data, std::size_t count) = 0; + virtual void operator()(sample * data, std::size_t count) = 0; virtual ~effect() {} }; diff --git a/libs/audio/include/psemek/audio/engine.hpp b/libs/audio/include/psemek/audio/engine.hpp index ececc7b9..6d71b0c1 100644 --- a/libs/audio/include/psemek/audio/engine.hpp +++ b/libs/audio/include/psemek/audio/engine.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -18,10 +19,10 @@ namespace psemek::audio int frequency() const; int channels() const; - std::shared_ptr load_raw(std::int16_t const * data, std::size_t sample_count, bool copy = true); + std::shared_ptr load_raw(sample const * data, std::size_t sample_count, bool copy = true); std::shared_ptr load(char const * data, std::size_t size); - std::shared_ptr load_raw(std::basic_string_view data, bool copy = true) + std::shared_ptr load_raw(std::basic_string_view data, bool copy = true) { return load_raw(data.data(), data.size(), copy); } diff --git a/libs/audio/include/psemek/audio/sample.hpp b/libs/audio/include/psemek/audio/sample.hpp new file mode 100644 index 00000000..55f78291 --- /dev/null +++ b/libs/audio/include/psemek/audio/sample.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include + +namespace psemek::audio +{ + + using sample = std::int16_t; + + inline sample clamp(float v) + { + static auto const min = std::numeric_limits::min(); + static auto const max = std::numeric_limits::max(); + + return static_cast(std::min(max, std::max(min, std::round(v)))); + } + +} diff --git a/libs/audio/include/psemek/audio/track.hpp b/libs/audio/include/psemek/audio/track.hpp index 67e46830..7ad6bf27 100644 --- a/libs/audio/include/psemek/audio/track.hpp +++ b/libs/audio/include/psemek/audio/track.hpp @@ -1,13 +1,13 @@ #pragma once -#include +#include namespace psemek::audio { struct track { - virtual std::int16_t const * data() const = 0; + virtual sample const * data() const = 0; virtual std::size_t size() const = 0; virtual ~track(){} diff --git a/libs/audio/include/psemek/audio/utils.hpp b/libs/audio/include/psemek/audio/utils.hpp deleted file mode 100644 index 4a9c884b..00000000 --- a/libs/audio/include/psemek/audio/utils.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include -#include -#include - -namespace psemek::audio -{ - - inline std::int16_t clamp(float v) - { - static auto const min = std::numeric_limits::min(); - static auto const max = std::numeric_limits::max(); - - return static_cast(std::min(max, std::max(min, std::round(v)))); - } - -} diff --git a/libs/audio/source/echo.cpp b/libs/audio/source/echo.cpp index e50eb80b..c4a58c62 100644 --- a/libs/audio/source/echo.cpp +++ b/libs/audio/source/echo.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include @@ -30,7 +30,7 @@ namespace psemek::audio return "echo"; } - void operator()(std::int16_t * data, std::size_t size) override + void operator()(sample * data, std::size_t size) override { if (samples_.size() < samples_.capacity()) { @@ -57,7 +57,7 @@ namespace psemek::audio } private: - std::vector samples_; + std::vector samples_; std::size_t pos_ = 0; float delay_; float volume_; diff --git a/libs/audio/source/engine.cpp b/libs/audio/source/engine.cpp index 21fe7cee..2f8a3262 100644 --- a/libs/audio/source/engine.cpp +++ b/libs/audio/source/engine.cpp @@ -50,9 +50,9 @@ namespace psemek::audio : chunk(chunk) {} - std::int16_t const * data() const override + sample const * data() const override { - return reinterpret_cast(chunk->abuf); + return reinterpret_cast(chunk->abuf); } std::size_t size() const override @@ -115,7 +115,7 @@ namespace psemek::audio return; } - (*e)(reinterpret_cast(data), len / 2); + (*e)(reinterpret_cast(data), len / 2); } void start() override @@ -286,16 +286,16 @@ namespace psemek::audio return std::make_shared(Mix_LoadWAV_RW(SDL_RWFromConstMem(data, size), 1)); } - std::shared_ptr engine::load_raw(std::int16_t const * data, std::size_t sample_count, bool copy) + std::shared_ptr engine::load_raw(sample const * data, std::size_t sample_count, bool copy) { Mix_Chunk * chunk = static_cast(malloc(sizeof(Mix_Chunk))); chunk->allocated = copy ? 1 : 0; - chunk->alen = sample_count * sizeof(std::int16_t); + chunk->alen = sample_count * sizeof(sample); chunk->volume = 128; if (copy) { - chunk->abuf = static_cast(malloc(sample_count * sizeof(std::int16_t))); - std::copy(data, data + sample_count, reinterpret_cast(chunk->abuf)); + chunk->abuf = static_cast(malloc(sample_count * sizeof(sample))); + std::copy(data, data + sample_count, reinterpret_cast(chunk->abuf)); } else {