66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
#include "mixer_track.h"
|
|
|
|
#include "channel_interface.h"
|
|
#include "audio/device/audio_device_manager.h"
|
|
#include "audio/plugin_host/plugin_host.h"
|
|
#include "thread_message/thread_message_hubs.h"
|
|
|
|
mixer_track::~mixer_track() {
|
|
|
|
}
|
|
|
|
void mixer_track::init() {
|
|
const uint32_t channel_count = g_audio_device_manager.get_output_channel_count();
|
|
buffer.resize(channel_count, g_audio_device_manager.get_buffer_size());
|
|
for (int i = 0; i < buffer.get_num_channels(); ++i) {
|
|
ui_buffers->emplace_back(g_audio_device_manager.get_buffer_size() * 2);
|
|
}
|
|
|
|
channel_interface_ = new mixer_channel_interface(this);
|
|
}
|
|
|
|
void mixer_track::add_effect(plugin_host* in_effect) {
|
|
g_audio_thread_hub.push_message([in_effect, this] {
|
|
in_effect->owner_tracks.push_back(this);
|
|
g_main_thread_hub.push_message([in_effect, this] {
|
|
on_add_effect.broadcast(in_effect);
|
|
});
|
|
});
|
|
}
|
|
|
|
void mixer_track::remove_effect(plugin_host* in_effect) {
|
|
on_remove_effect.broadcast(in_effect);
|
|
g_audio_thread_hub.push_message([in_effect, this] {
|
|
in_effect->owner_tracks.erase(std::remove(in_effect->owner_tracks.begin(), in_effect->owner_tracks.end(), this), in_effect->owner_tracks.end());
|
|
});
|
|
}
|
|
|
|
void mixer_track::add_child(mixer_track* in_child, float in_send_level) {
|
|
children.push_back({in_child, in_send_level});
|
|
}
|
|
|
|
void mixer_track::remove_child(mixer_track* in_child) {
|
|
const auto new_end = std::remove_if(children.begin(), children.end(), [in_child](const mixer_track_link& link) {
|
|
return link.track == in_child;
|
|
});
|
|
children.erase(new_end, children.end());
|
|
}
|
|
|
|
void mixer_track::process(uint32_t in_frames) {
|
|
for (auto effect : effects)
|
|
effect->process(in_frames);
|
|
buffer.multiple(volume);
|
|
on_processed.broadcast(this);
|
|
for (int i = 0; i < buffer.get_num_channels(); ++i) {
|
|
(*ui_buffers)[i].Push(buffer.get_headers()[i], in_frames);
|
|
}
|
|
}
|
|
|
|
void instrument_track::rename(const std::string& in_name) {
|
|
instrument_->name = in_name;
|
|
}
|
|
|
|
std::string instrument_track::get_name() const {
|
|
return instrument_->name;
|
|
}
|