Add audio::sample typedef to int16_t

This commit is contained in:
Nikita Lisitsa 2020-09-22 20:24:37 +03:00
parent ac8684faa3
commit 342519003c
7 changed files with 38 additions and 34 deletions

View file

@ -1,7 +1,8 @@
#pragma once #pragma once
#include <psemek/audio/sample.hpp>
#include <string_view> #include <string_view>
#include <cstdint>
#include <cstddef> #include <cstddef>
namespace psemek::audio namespace psemek::audio
@ -13,7 +14,7 @@ namespace psemek::audio
virtual void init(int frequency, int channels) = 0; virtual void init(int frequency, int channels) = 0;
virtual void operator()(std::int16_t * data, std::size_t count) = 0; virtual void operator()(sample * data, std::size_t count) = 0;
virtual ~effect() {} virtual ~effect() {}
}; };

View file

@ -1,5 +1,6 @@
#pragma once #pragma once
#include <psemek/audio/sample.hpp>
#include <psemek/audio/effect.hpp> #include <psemek/audio/effect.hpp>
#include <psemek/audio/stream.hpp> #include <psemek/audio/stream.hpp>
#include <psemek/audio/track.hpp> #include <psemek/audio/track.hpp>
@ -18,10 +19,10 @@ namespace psemek::audio
int frequency() const; int frequency() const;
int channels() const; int channels() const;
std::shared_ptr<track> load_raw(std::int16_t const * data, std::size_t sample_count, bool copy = true); std::shared_ptr<track> load_raw(sample const * data, std::size_t sample_count, bool copy = true);
std::shared_ptr<track> load(char const * data, std::size_t size); std::shared_ptr<track> load(char const * data, std::size_t size);
std::shared_ptr<track> load_raw(std::basic_string_view<std::int16_t> data, bool copy = true) std::shared_ptr<track> load_raw(std::basic_string_view<sample> data, bool copy = true)
{ {
return load_raw(data.data(), data.size(), copy); return load_raw(data.data(), data.size(), copy);
} }

View file

@ -0,0 +1,20 @@
#pragma once
#include <cmath>
#include <limits>
#include <cstdint>
namespace psemek::audio
{
using sample = std::int16_t;
inline sample clamp(float v)
{
static auto const min = std::numeric_limits<sample>::min();
static auto const max = std::numeric_limits<sample>::max();
return static_cast<sample>(std::min<int>(max, std::max<int>(min, std::round(v))));
}
}

View file

@ -1,13 +1,13 @@
#pragma once #pragma once
#include <cstdint> #include <psemek/audio/sample.hpp>
namespace psemek::audio namespace psemek::audio
{ {
struct track struct track
{ {
virtual std::int16_t const * data() const = 0; virtual sample const * data() const = 0;
virtual std::size_t size() const = 0; virtual std::size_t size() const = 0;
virtual ~track(){} virtual ~track(){}

View file

@ -1,18 +0,0 @@
#pragma once
#include <cmath>
#include <limits>
#include <cstdint>
namespace psemek::audio
{
inline std::int16_t clamp(float v)
{
static auto const min = std::numeric_limits<std::int16_t>::min();
static auto const max = std::numeric_limits<std::int16_t>::max();
return static_cast<std::int16_t>(std::min<int>(max, std::max<int>(min, std::round(v))));
}
}

View file

@ -1,6 +1,6 @@
#include <psemek/audio/echo.hpp> #include <psemek/audio/echo.hpp>
#include <psemek/audio/engine.hpp> #include <psemek/audio/engine.hpp>
#include <psemek/audio/utils.hpp> #include <psemek/audio/sample.hpp>
#include <cmath> #include <cmath>
#include <vector> #include <vector>
@ -30,7 +30,7 @@ namespace psemek::audio
return "echo"; return "echo";
} }
void operator()(std::int16_t * data, std::size_t size) override void operator()(sample * data, std::size_t size) override
{ {
if (samples_.size() < samples_.capacity()) if (samples_.size() < samples_.capacity())
{ {
@ -57,7 +57,7 @@ namespace psemek::audio
} }
private: private:
std::vector<std::int16_t> samples_; std::vector<sample> samples_;
std::size_t pos_ = 0; std::size_t pos_ = 0;
float delay_; float delay_;
float volume_; float volume_;

View file

@ -50,9 +50,9 @@ namespace psemek::audio
: chunk(chunk) : chunk(chunk)
{} {}
std::int16_t const * data() const override sample const * data() const override
{ {
return reinterpret_cast<std::int16_t const *>(chunk->abuf); return reinterpret_cast<sample const *>(chunk->abuf);
} }
std::size_t size() const override std::size_t size() const override
@ -115,7 +115,7 @@ namespace psemek::audio
return; return;
} }
(*e)(reinterpret_cast<std::int16_t *>(data), len / 2); (*e)(reinterpret_cast<sample *>(data), len / 2);
} }
void start() override void start() override
@ -286,16 +286,16 @@ namespace psemek::audio
return std::make_shared<track_impl>(Mix_LoadWAV_RW(SDL_RWFromConstMem(data, size), 1)); return std::make_shared<track_impl>(Mix_LoadWAV_RW(SDL_RWFromConstMem(data, size), 1));
} }
std::shared_ptr<track> engine::load_raw(std::int16_t const * data, std::size_t sample_count, bool copy) std::shared_ptr<track> engine::load_raw(sample const * data, std::size_t sample_count, bool copy)
{ {
Mix_Chunk * chunk = static_cast<Mix_Chunk *>(malloc(sizeof(Mix_Chunk))); Mix_Chunk * chunk = static_cast<Mix_Chunk *>(malloc(sizeof(Mix_Chunk)));
chunk->allocated = copy ? 1 : 0; chunk->allocated = copy ? 1 : 0;
chunk->alen = sample_count * sizeof(std::int16_t); chunk->alen = sample_count * sizeof(sample);
chunk->volume = 128; chunk->volume = 128;
if (copy) if (copy)
{ {
chunk->abuf = static_cast<Uint8 *>(malloc(sample_count * sizeof(std::int16_t))); chunk->abuf = static_cast<Uint8 *>(malloc(sample_count * sizeof(sample)));
std::copy(data, data + sample_count, reinterpret_cast<std::int16_t *>(chunk->abuf)); std::copy(data, data + sample_count, reinterpret_cast<sample *>(chunk->abuf));
} }
else else
{ {