1#ifndef NNGN_AUDIO_AUDIO_H
2#define NNGN_AUDIO_AUDIO_H
22 static constexpr float db(
float x) {
return std::pow(10.0f, x / 20.0f); }
25 static void gain(std::span<float>
s,
float g);
27 static void over(std::span<float>
s,
float m,
float mix);
29 static void fade(std::span<float>
s,
float g0,
float g1);
38 std::span<float>
s, std::size_t ep,
float g0,
float g1,
float exp);
42 std::size_t
a, std::size_t d,
float st, std::size_t
r);
44 static void mix(std::span<float> dst, std::span<const float> src);
46 static void normalize(std::span<i16> dst, std::span<const float> src);
62 bool read_wav(std::string_view path, std::vector<std::byte> *
v)
const;
67 std::span<std::byte> dst, std::span<const std::byte> src)
const;
69 std::vector<std::byte>
gen_wav(std::span<const float>
s)
const;
72 void trem(std::span<float>
s,
float a,
float freq,
float mix)
const;
74 void gen_sine(std::span<float>
s,
float freq)
const;
84 std::span<float>
s,
float freq,
85 float lfo_a,
float lfo_freq,
float lfo_d)
const;
89 void gen_saw(std::span<float>
s,
float freq)
const;
100 source s, std::size_t channels, std::size_t bit_depth,
101 std::span<const std::byte>
v);
110 std::unique_ptr<void, void(*)(
void*)>
data = {
nullptr, [](
auto){}};
111 Math *
math =
nullptr;
Audio manager.
Definition: audio.h:17
std::unique_ptr< void, void(*)(void *)> data
Definition: audio.h:110
void gen_square(std::span< float > s, float freq) const
Generates a square wave with amplitude 1 and frequency freq.
bool remove_source(source s)
vec3 source_pos(source s) const
static void fade(std::span< float > s, float g0, float g1)
Linearly fades from g0 to g1.
bool stop(source s) const
static constexpr float db(float x)
Multiplier to decibel conversion.
Definition: audio.h:22
bool play(source s) const
std::size_t m_rate
Definition: audio.h:112
void gen_wav_header(std::span< std::byte > dst, std::span< const std::byte > src) const
Generates WAV header for a buffer.
static void exp_fade(std::span< float > s, std::size_t ep, float g0, float g1, float exp)
Exponentially fades from g0 to g1.
bool set_source_sample_pos(source s, std::size_t p)
std::size_t n_sources(void) const
void gen_saw(std::span< float > s, float freq) const
Generates a saw-tooth wave with amplitude 1 and frequency freq.
bool set_source_loop(source s, bool l)
bool set_source_gain(source s, float g)
bool write_wav(FILE *f, std::span< const std::byte > s) const
Writes WAV data to a file.
std::vector< std::byte > gen_wav(std::span< const float > s) const
Generates a WAV file from floating-point data.
std::size_t rate(void) const
Definition: audio.h:58
void gen_sine(std::span< float > s, float freq) const
Generates a sine wave with amplitude 1 and frequency freq.
source
Definition: audio.h:19
static void gain(std::span< float > s, float g)
Applies the gain multiplier to each element.
static void env(std::span< float > s, std::size_t a, std::size_t d, float st, std::size_t r)
Attack/decay/sustain/release envelope.
std::size_t source_sample_pos(source s) const
static void mix(std::span< float > dst, std::span< const float > src)
Adds the samples from both buffers.
static void mix(std::span< float > dst, std::span< const float > src)
Adds the samples from both buffers.
Definition: gen.cpp:72
void gen_noise(std::span< float > s) const
Generates white (random) noise.
bool set_source_data(source s, std::size_t channels, std::size_t bit_depth, std::span< const std::byte > v)
void trem(std::span< float > s, float a, float freq, float mix) const
Applies a tremolo effect with amplitude a and frequency f.
static void normalize(std::span< i16 > dst, std::span< const float > src)
Generates 16-bit PCM data from floating-point data.
bool read_wav(std::string_view path, std::vector< std::byte > *v) const
Reads WAV data from a file.
void gen_sine_fm(std::span< float > s, float freq, float lfo_a, float lfo_freq, float lfo_d) const
Generates a sine wave with frequency modulation.
static void over(std::span< float > s, float m, float mix)
Applies an overdrive effect with input multiplier m.
source add_source(std::span< const std::byte > v)
bool set_source_pos(source s, vec3 p)
Math * math
Definition: audio.h:111
init
Definition: img_common.lua:34
l
Definition: light.lua:23
v[1]
Definition: math.lua:19
std::chrono::seconds s
Definition: timing.cpp:6
#define NNGN_MOVE_ONLY(x)
Definition: utils.h:39