Add audio white noise generator
This commit is contained in:
parent
3c22074f8d
commit
0d23d8bcab
3 changed files with 32 additions and 10 deletions
10
libs/audio/include/psemek/audio/white_noise.hpp
Normal file
10
libs/audio/include/psemek/audio/white_noise.hpp
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace psemek::audio
|
||||||
|
{
|
||||||
|
|
||||||
|
std::vector<float> white_noise(std::size_t sample_count);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include <psemek/audio/wave/karplus_strong.hpp>
|
#include <psemek/audio/wave/karplus_strong.hpp>
|
||||||
#include <psemek/audio/constants.hpp>
|
#include <psemek/audio/constants.hpp>
|
||||||
|
#include <psemek/audio/white_noise.hpp>
|
||||||
#include <psemek/random/generator.hpp>
|
#include <psemek/random/generator.hpp>
|
||||||
#include <psemek/random/uniform.hpp>
|
#include <psemek/random/uniform.hpp>
|
||||||
|
|
||||||
|
|
@ -16,16 +17,8 @@ namespace psemek::audio
|
||||||
: stream
|
: stream
|
||||||
{
|
{
|
||||||
karplus_strong_impl(float frequency)
|
karplus_strong_impl(float frequency)
|
||||||
: buffer_(2 * std::round(audio::frequency / frequency))
|
: buffer_(white_noise(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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::optional<std::size_t> length() const override
|
std::optional<std::size_t> length() const override
|
||||||
{
|
{
|
||||||
|
|
|
||||||
19
libs/audio/source/white_noise.cpp
Normal file
19
libs/audio/source/white_noise.cpp
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue