Add audio::sample typedef to int16_t
This commit is contained in:
parent
ac8684faa3
commit
342519003c
7 changed files with 38 additions and 34 deletions
|
|
@ -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() {}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
20
libs/audio/include/psemek/audio/sample.hpp
Normal file
20
libs/audio/include/psemek/audio/sample.hpp
Normal 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))));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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(){}
|
||||
|
|
|
|||
|
|
@ -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))));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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_;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue