22 , length_(
std::min(length_frames, source.
num_frames() - start_)) {}
28 uint32_t
num_channels()
const {
return source_ ? source_->num_channels() : 0; }
31 uint32_t
sample_rate()
const {
return source_ ? source_->sample_rate : 0; }
34 float sample(uint32_t channel, uint64_t frame)
const {
35 if (!source_ || channel >=
num_channels() || frame >= length_)
return 0.0f;
36 return source_sample(channel, start_ + frame);
40 void read_frames(
float* dest, uint32_t channel, uint64_t start, uint64_t count)
const {
41 if (dest ==
nullptr)
return;
43 uint64_t actual_start = start_ + std::min(start, length_);
44 uint64_t actual_count = std::min(count, length_ - std::min(start, length_));
46 for (uint64_t i = 0; i < actual_count; ++i)
47 dest[i] = source_sample(channel, actual_start + i);
53 if (!source_)
return result;
58 result.
channels[ch].resize(
static_cast<size_t>(length_));
59 for (uint64_t i = 0; i < length_; ++i)
60 result.
channels[ch][
static_cast<size_t>(i)] =
61 source_sample(ch, start_ + i);
72 bool is_valid()
const {
return source_ !=
nullptr && length_ > 0; }
79 float source_sample(uint32_t channel, uint64_t frame)
const {
80 const auto& ch = source_->
channels[channel];
81 if (frame >= ch.size())
return 0.0f;
82 return ch[
static_cast<size_t>(frame)];
uint32_t sample_rate() const
Sample rate (inherited from source).
Definition subsection_reader.hpp:31
bool is_valid() const
Whether this reader has a valid source.
Definition subsection_reader.hpp:72
uint32_t num_channels() const
Number of channels.
Definition subsection_reader.hpp:28
float sample(uint32_t channel, uint64_t frame) const
Read a frame from this subsection.
Definition subsection_reader.hpp:34
AudioSubsectionReader()=default
void read_frames(float *dest, uint32_t channel, uint64_t start, uint64_t count) const
Copy frames from this subsection into a destination buffer.
Definition subsection_reader.hpp:40
AudioFileData extract() const
Extract this subsection as a new AudioFileData (copies data).
Definition subsection_reader.hpp:51
uint64_t num_frames() const
Number of frames in this subsection.
Definition subsection_reader.hpp:25
double duration_seconds() const
Duration in seconds.
Definition subsection_reader.hpp:67
AudioSubsectionReader(const AudioFileData &source, uint64_t start_frame, uint64_t length_frames)
Create a subsection from frame start_frame to start_frame + length_frames.
Definition subsection_reader.hpp:19
Definition analyzer_provider.hpp:12
Definition audio_file.hpp:24
std::vector< std::vector< float > > channels
Definition audio_file.hpp:25
uint32_t sample_rate
Definition audio_file.hpp:26