LibAudio: Allow generating sine waves

This commit is contained in:
2026-08-24 01:44:04 +03:00
parent 2e22ebf0b5
commit c6a435ed36
5 changed files with 79 additions and 15 deletions
@@ -30,8 +30,8 @@ namespace LibAudio
public:
static BAN::ErrorOr<Audio> create(uint32_t channels, uint32_t sample_rate, uint32_t sample_frames);
static BAN::ErrorOr<Audio> create(BAN::UniqPtr<AudioStream>&&);
static BAN::ErrorOr<Audio> load(BAN::StringView path);
static BAN::ErrorOr<Audio> random(uint32_t samples);
~Audio() { clear(); }
Audio(Audio&& other) { *this = BAN::move(other); }
@@ -0,0 +1,35 @@
#pragma once
#include <LibAudio/AudioStream.h>
#include <BAN/Limits.h>
namespace LibAudio
{
class SineWaveAudioStream : public AudioStream
{
public:
static BAN::ErrorOr<BAN::UniqPtr<AudioStream>> create(uint32_t channels, uint32_t sample_rate, float frequency);
uint32_t channels() const override { return m_channels; }
uint32_t sample_rate() const override { return m_sample_rate; }
uint32_t samples_remaining() const override { return BAN::numeric_limits<uint32_t>::max(); }
float get_sample() override;
private:
SineWaveAudioStream(uint32_t channels, uint32_t sample_rate, float frequency);
private:
const uint32_t m_channels;
const uint32_t m_sample_rate;
const float m_frequency;
const float m_phase_inc;
uint32_t m_sample_idx { 0 };
float m_sample { 0 };
float m_phase { 0 };
};
}