Add audio::recorder
This commit is contained in:
parent
9d58904a66
commit
e4871da0c5
2 changed files with 73 additions and 0 deletions
22
libs/audio/include/psemek/audio/recorder.hpp
Normal file
22
libs/audio/include/psemek/audio/recorder.hpp
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include <psemek/audio/stream.hpp>
|
||||
#include <psemek/util/span.hpp>
|
||||
|
||||
namespace psemek::audio
|
||||
{
|
||||
|
||||
struct recorder
|
||||
{
|
||||
virtual stream_ptr stream() const = 0;
|
||||
|
||||
virtual std::size_t request(std::size_t samples) = 0;
|
||||
|
||||
virtual util::span<float const> buffer() const = 0;
|
||||
|
||||
virtual ~recorder() {}
|
||||
};
|
||||
|
||||
std::shared_ptr<recorder> make_recorder(stream_ptr stream);
|
||||
|
||||
}
|
||||
51
libs/audio/source/recorder.cpp
Normal file
51
libs/audio/source/recorder.cpp
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
#include <psemek/audio/recorder.hpp>
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace psemek::audio
|
||||
{
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
struct recorder_impl
|
||||
: recorder
|
||||
{
|
||||
recorder_impl(stream_ptr stream)
|
||||
: stream_(std::move(stream))
|
||||
{}
|
||||
|
||||
stream_ptr stream() const override
|
||||
{
|
||||
return stream_;
|
||||
}
|
||||
|
||||
std::size_t request(std::size_t samples) override
|
||||
{
|
||||
if (buffer_.size() < length_ + samples)
|
||||
buffer_.resize(std::max<std::size_t>(samples, buffer_.size() * 2));
|
||||
|
||||
auto result = stream_->read(buffer_.data() + length_, samples);
|
||||
length_ += result;
|
||||
return result;
|
||||
}
|
||||
|
||||
util::span<float const> buffer() const override
|
||||
{
|
||||
return {buffer_.data(), buffer_.data() + length_};
|
||||
}
|
||||
|
||||
private:
|
||||
stream_ptr stream_;
|
||||
std::vector<float> buffer_;
|
||||
std::size_t length_{0};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<recorder> make_recorder(stream_ptr stream)
|
||||
{
|
||||
return std::make_shared<recorder_impl>(std::move(stream));
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue