57 lines
2.2 KiB
C++
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_;
|
|
};
|