57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
#pragma once
|
|
#include <cstdint>
|
|
#include <mutex>
|
|
#include <vector>
|
|
#include "extern.h"
|
|
#include <functional>
|
|
|
|
class CORE_API audio_buffer {
|
|
public:
|
|
static void (*add_func)(audio_buffer& in_buffer, audio_buffer& from_buffer, float percent);
|
|
|
|
static void (*multiple_func)(audio_buffer& in_buffer, float percent);
|
|
|
|
audio_buffer();
|
|
|
|
audio_buffer(audio_buffer&& in_buffer) noexcept {
|
|
headers_ = std::move(in_buffer.headers_);
|
|
frame_size_ = in_buffer.frame_size_;
|
|
in_buffer.frame_size_ = 0;
|
|
}
|
|
|
|
audio_buffer& operator=(audio_buffer&& in_buffer) noexcept {
|
|
if (this != &in_buffer) {
|
|
headers_ = std::move(in_buffer.headers_);
|
|
frame_size_ = in_buffer.frame_size_;
|
|
in_buffer.frame_size_ = 0;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
~audio_buffer();
|
|
|
|
[[nodiscard]] auto get_headers() -> sample_t** { return headers_.data(); }
|
|
[[nodiscard]] auto get_headers_vector() const -> const std::vector<sample_t*>& { return headers_; }
|
|
|
|
[[nodiscard]] auto get_num_channels() const -> uint32_t { return headers_.size(); }
|
|
[[nodiscard]] auto get_num_samples() const -> uint32_t { return frame_size_; }
|
|
|
|
void resize(uint32_t channel_num, uint32_t frame_size);
|
|
|
|
void clear();
|
|
|
|
void add(audio_buffer& from_buffer, float percent = 1.f);
|
|
|
|
void multiple(float percent);
|
|
|
|
[[nodiscard]] std::vector<sample_t> get_interleaved_buffer() const;
|
|
|
|
private:
|
|
void free();
|
|
|
|
private:
|
|
std::vector<sample_t*> headers_{};
|
|
std::mutex lock_{};
|
|
uint32_t frame_size_ = 0;
|
|
};
|