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
#include <psemek/audio/sample.hpp>
#include <string_view>
#include <cstdint>
#include <cstddef>
namespace psemek::audio
@ -13,7 +14,7 @@ namespace psemek::audio
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() {}
};

View file

@ -1,5 +1,6 @@
#pragma once
#include <psemek/audio/sample.hpp>
#include <psemek/audio/effect.hpp>
#include <psemek/audio/stream.hpp>
#include <psemek/audio/track.hpp>
@ -18,10 +19,10 @@ namespace psemek::audio
int frequency() 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_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);
}

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
#include <cstdint>
#include <psemek/audio/sample.hpp>
namespace psemek::audio
{
struct track
{
virtual std::int16_t const * data() const = 0;
virtual sample const * data() const = 0;
virtual std::size_t size() const = 0;
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/engine.hpp>
#include <psemek/audio/utils.hpp>
#include <psemek/audio/sample.hpp>
#include <cmath>
#include <vector>
@ -30,7 +30,7 @@ namespace psemek::audio
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())
{
@ -57,7 +57,7 @@ namespace psemek::audio
}
private:
std::vector<std::int16_t> samples_;
std::vector<sample> samples_;
std::size_t pos_ = 0;
float delay_;
float volume_;

View file

@ -50,9 +50,9 @@ namespace psemek::audio
: 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
@ -115,7 +115,7 @@ namespace psemek::audio
return;
}
(*e)(reinterpret_cast<std::int16_t *>(data), len / 2);
(*e)(reinterpret_cast<sample *>(data), len / 2);
}
void start() override
@ -286,16 +286,16 @@ namespace psemek::audio
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)));
chunk->allocated = copy ? 1 : 0;
chunk->alen = sample_count * sizeof(std::int16_t);
chunk->alen = sample_count * sizeof(sample);
chunk->volume = 128;
if (copy)
{
chunk->abuf = static_cast<Uint8 *>(malloc(sample_count * sizeof(std::int16_t)));
std::copy(data, data + sample_count, reinterpret_cast<std::int16_t *>(chunk->abuf));
chunk->abuf = static_cast<Uint8 *>(malloc(sample_count * sizeof(sample)));
std::copy(data, data + sample_count, reinterpret_cast<sample *>(chunk->abuf));
}
else
{