Files
AronaCore/core/audio/mixer/channel_interface.h

57 lines
2.2 KiB
C++

#pragma once
#include <cstdint>
#include <unordered_map>
#include <string>
#include <vector>
#include "extern.h"
class mixer_track;
class channel_node;
class mixer_channel_node;
class channel_interface {
public:
channel_interface(uint32_t input_channels, uint32_t output_channels);
virtual ~channel_interface() = default;
void set_input_channel(uint32_t node_index, channel_node* node);
void set_input_channel(const std::vector<channel_node*>& nodes, uint32_t start_index = 0);
void set_output_channel(uint32_t node_index, channel_node* node);
void set_output_channel(const std::vector<channel_node*>& nodes, uint32_t start_index = 0);
uint32_t get_input_node_index(channel_node* node);
uint32_t get_output_node_index(channel_node* node);
sample_t** get_input_headers() { return input_headers_.data(); }
sample_t** get_output_headers() { return output_headers_.data(); }
void set_input_channel_node_name(uint32_t node_index, uint32_t channel_index, const std::string& name);
void set_output_channel_node_name(uint32_t node_index, uint32_t channel_index, const std::string& name);
std::unordered_map<uint32_t, std::string> get_input_channel_node_name(uint32_t node_index);
std::unordered_map<uint32_t, std::string> get_input_channel_node_name(channel_node* node);
std::unordered_map<uint32_t, std::string> get_output_channel_node_name(uint32_t node_index);
std::unordered_map<uint32_t, std::string> get_output_channel_node_name(channel_node* node);
void remove_track(mixer_track* track);
std::vector<channel_node*> input_channel_nodes;
std::vector<channel_node*> output_channel_nodes;
private:
std::unordered_map<uint32_t, std::unordered_map<uint32_t, std::string>> input_channel_names_;
std::unordered_map<uint32_t, std::unordered_map<uint32_t, std::string>> output_channel_names_;
std::vector<sample_t*> input_headers_;
std::vector<sample_t*> output_headers_;
};
class mixer_channel_interface : public channel_interface {
public:
explicit mixer_channel_interface(mixer_track* track);
~mixer_channel_interface() override;
[[nodiscard]]mixer_track* get_track() const { return track_; }
private:
mixer_track* track_;
mixer_channel_node* node_;
};