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
|
#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() {}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
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
|
#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(){}
|
||||||
|
|
|
||||||
|
|
@ -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/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_;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue