Add audio white noise generator

This commit is contained in:
Nikita Lisitsa 2023-01-06 19:32:34 +03:00
parent 3c22074f8d
commit 0d23d8bcab
3 changed files with 32 additions and 10 deletions

View file

@ -0,0 +1,10 @@
#pragma once
#include <vector>
namespace psemek::audio
{
std::vector<float> white_noise(std::size_t sample_count);
}

View file

@ -1,5 +1,6 @@
#include <psemek/audio/wave/karplus_strong.hpp>
#include <psemek/audio/constants.hpp>
#include <psemek/audio/white_noise.hpp>
#include <psemek/random/generator.hpp>
#include <psemek/random/uniform.hpp>
@ -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<std::size_t> length() const override
{

View file

@ -0,0 +1,19 @@
#include <psemek/audio/white_noise.hpp>
#include <psemek/random/generator.hpp>
#include <psemek/random/uniform.hpp>
namespace psemek::audio
{
std::vector<float> white_noise(std::size_t sample_count)
{
random::generator rng{0x4b0a763ef6573bf2ull, 0};
std::vector<float> result(sample_count);
for (auto & v : result)
v = random::uniform<float>(rng, {-1.f, 1.f});
return result;
}
}