diff --git a/libs/audio/include/psemek/audio/white_noise.hpp b/libs/audio/include/psemek/audio/white_noise.hpp new file mode 100644 index 00000000..300d6b1d --- /dev/null +++ b/libs/audio/include/psemek/audio/white_noise.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include + +namespace psemek::audio +{ + + std::vector white_noise(std::size_t sample_count); + +} diff --git a/libs/audio/source/wave/karplus_strong.cpp b/libs/audio/source/wave/karplus_strong.cpp index f166b60a..31dd683e 100644 --- a/libs/audio/source/wave/karplus_strong.cpp +++ b/libs/audio/source/wave/karplus_strong.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -16,16 +17,8 @@ namespace psemek::audio : stream { karplus_strong_impl(float frequency) - : buffer_(2 * std::round(audio::frequency / frequency)) - { - random::generator rng{0x4b0a763ef6573bf2ull, 0}; - for (std::size_t i = 0; i < buffer_.size(); i += 2) - { - float v = random::uniform(rng, -1.f, 1.f); - buffer_[i + 0] = v; - buffer_[i + 1] = v; - } - } + : buffer_(white_noise(2 * std::round(audio::frequency / frequency))) + {} std::optional length() const override { diff --git a/libs/audio/source/white_noise.cpp b/libs/audio/source/white_noise.cpp new file mode 100644 index 00000000..b450013b --- /dev/null +++ b/libs/audio/source/white_noise.cpp @@ -0,0 +1,19 @@ +#include + +#include +#include + +namespace psemek::audio +{ + + std::vector white_noise(std::size_t sample_count) + { + random::generator rng{0x4b0a763ef6573bf2ull, 0}; + + std::vector result(sample_count); + for (auto & v : result) + v = random::uniform(rng, {-1.f, 1.f}); + return result; + } + +}