修改audio_buffer::get_interleaved_buffer()为const, 新增当乐器类型插件移除时移除混音轨道
This commit is contained in:
parent
23bc4ce501
commit
94b9057cbd
@ -39,7 +39,7 @@ void audio_buffer::multiple(float percent) {
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<float> audio_buffer::get_interleaved_buffer() {
|
||||
std::vector<float> audio_buffer::get_interleaved_buffer() const {
|
||||
std::scoped_lock lock(lock_);
|
||||
std::vector<float> result;
|
||||
result.reserve(buffer_[0].size() * buffer_.size());
|
||||
|
@ -14,7 +14,7 @@ public:
|
||||
void mix(audio_buffer& in_buffer, float percent = 1.f);
|
||||
void multiple(float percent);
|
||||
|
||||
std::vector<float> get_interleaved_buffer();
|
||||
std::vector<float> get_interleaved_buffer() const;
|
||||
private:
|
||||
std::vector<std::vector<float>> buffer_;
|
||||
std::vector<float*> headers_{};
|
||||
|
@ -11,7 +11,6 @@ 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());
|
||||
ui_buffer.SetCapacity(g_audio_device_manager.get_buffer_size() * 3);
|
||||
|
||||
channel_interface_ = new mixer_channel_interface(this);
|
||||
}
|
||||
@ -39,9 +38,7 @@ void mixer_track::process(uint32_t in_frames) {
|
||||
for (auto effect : effects)
|
||||
effect->process(in_frames);
|
||||
buffer.multiple(volume);
|
||||
|
||||
const std::vector<float>& interleaved_buffer = buffer.get_interleaved_buffer();
|
||||
ui_buffer.Push(interleaved_buffer.data(), interleaved_buffer.size());
|
||||
on_processed.broadcast(this);
|
||||
}
|
||||
|
||||
void instrument_track::rename(const std::string& in_name) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
#include "audio/misc/audio_buffer.h"
|
||||
#include "audio/misc/circular_audio_buffer.h"
|
||||
#include "misc/delegates.h"
|
||||
|
||||
class channel_interface;
|
||||
class mixer_track;
|
||||
@ -40,10 +41,10 @@ public:
|
||||
[[nodiscard]] channel_interface* get_channel_interface() const { return channel_interface_; }
|
||||
|
||||
audio_buffer buffer;
|
||||
circular_audio_buffer<float> ui_buffer; // (交错缓冲区)用于显示可视化的音频数据, 根据DeltaTime来动态获取数据
|
||||
std::atomic<float> volume = 1.0f;
|
||||
std::vector<plugin_host*> effects{};
|
||||
std::vector<mixer_track_link> children{};
|
||||
multicast_delegate<mixer_track*> on_processed;
|
||||
private:
|
||||
void add_effect_internal(plugin_host* in_effect);
|
||||
const mixer_track_type type_;
|
||||
|
@ -38,6 +38,7 @@ void plugin_host_manager::remove_instrument_plugin_host(plugin_host* host) {
|
||||
g_audio_thread_hub.push_message([host, this]() {
|
||||
auto find = std::ranges::find(instrument_plugins_, host);
|
||||
if (find != instrument_plugins_.end()) {
|
||||
g_mixer.remove_track(host->owner_tracks[0]);
|
||||
plugin_hosts_.erase(std::ranges::find(plugin_hosts_, host));
|
||||
instrument_plugins_.erase(find);
|
||||
g_main_thread_hub.push_message([host, this]() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user