Support loading raw audio track from blob
This commit is contained in:
parent
4a17529e39
commit
bd3aa04922
2 changed files with 16 additions and 0 deletions
|
|
@ -21,6 +21,7 @@ namespace psemek::audio
|
||||||
using track_ptr = std::shared_ptr<track>;
|
using track_ptr = std::shared_ptr<track>;
|
||||||
|
|
||||||
track_ptr load_raw(util::span<float const> data);
|
track_ptr load_raw(util::span<float const> data);
|
||||||
|
track_ptr load_raw(util::blob data);
|
||||||
track_ptr load_raw(std::vector<float> data);
|
track_ptr load_raw(std::vector<float> data);
|
||||||
|
|
||||||
track_ptr load_wav(util::span<char const> data);
|
track_ptr load_wav(util::span<char const> data);
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ namespace psemek::audio
|
||||||
struct data_holder
|
struct data_holder
|
||||||
{
|
{
|
||||||
std::vector<float> storage;
|
std::vector<float> storage;
|
||||||
|
util::blob blob_storage;
|
||||||
util::span<float const> samples;
|
util::span<float const> samples;
|
||||||
|
|
||||||
data_holder(util::span<float const> samples)
|
data_holder(util::span<float const> samples)
|
||||||
|
|
@ -22,6 +23,11 @@ namespace psemek::audio
|
||||||
: storage(std::move(storage))
|
: storage(std::move(storage))
|
||||||
, samples(this->storage)
|
, samples(this->storage)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
data_holder(util::blob storage)
|
||||||
|
: blob_storage(std::move(storage))
|
||||||
|
, samples(util::cast<float const>(util::span<char const>(blob_storage)))
|
||||||
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct raw_stream_impl
|
struct raw_stream_impl
|
||||||
|
|
@ -87,6 +93,15 @@ namespace psemek::audio
|
||||||
return std::make_shared<raw_track_impl>(std::make_shared<data_holder>(samples));
|
return std::make_shared<raw_track_impl>(std::make_shared<data_holder>(samples));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
track_ptr load_raw(util::blob samples)
|
||||||
|
{
|
||||||
|
if ((samples.size() % 4) != 0)
|
||||||
|
throw util::exception("Byte count must be a multiple of 4");
|
||||||
|
if ((samples.size() % 8) != 0)
|
||||||
|
throw util::exception("Sample count must be even");
|
||||||
|
return std::make_shared<raw_track_impl>(std::make_shared<data_holder>(std::move(samples)));
|
||||||
|
}
|
||||||
|
|
||||||
track_ptr load_raw(std::vector<float> samples)
|
track_ptr load_raw(std::vector<float> samples)
|
||||||
{
|
{
|
||||||
if ((samples.size() % 2) != 0)
|
if ((samples.size() % 2) != 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue