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>;
|
||||
|
||||
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_wav(util::span<char const> data);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ namespace psemek::audio
|
|||
struct data_holder
|
||||
{
|
||||
std::vector<float> storage;
|
||||
util::blob blob_storage;
|
||||
util::span<float const> samples;
|
||||
|
||||
data_holder(util::span<float const> samples)
|
||||
|
|
@ -22,6 +23,11 @@ namespace psemek::audio
|
|||
: storage(std::move(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
|
||||
|
|
@ -87,6 +93,15 @@ namespace psemek::audio
|
|||
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)
|
||||
{
|
||||
if ((samples.size() % 2) != 0)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue