From 735cb48a834c069f574bd43746f6ac940975a712 Mon Sep 17 00:00:00 2001 From: Nanako <469449812@qq.com> Date: Thu, 29 Feb 2024 09:49:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B2=A1=E6=9C=89=E8=AE=BE?= =?UTF-8?q?=E7=BD=AEsample=20rate=E5=92=8Cblock=20size=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84vst2=E6=8F=92=E4=BB=B6=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/audio/mixer/channel_node.cpp | 5 +++-- core/audio/mixer/channel_node.h | 6 ++++-- core/audio/mixer/mixer.cpp | 4 ++++ core/audio/plugin_host/plugin_host_manager.cpp | 6 +++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/core/audio/mixer/channel_node.cpp b/core/audio/mixer/channel_node.cpp index e48ecc6..7be5565 100644 --- a/core/audio/mixer/channel_node.cpp +++ b/core/audio/mixer/channel_node.cpp @@ -3,9 +3,10 @@ #include "mixer.h" #include "mixer_track.h" -null_channel_node null_channel_node::instance; +null_channel_node* null_channel_node::instance; -mixer_channel_node::mixer_channel_node(channel_interface* in_owner, mixer_track* in_track, uint32_t in_node_index): channel_node(in_owner, channel_node_type::mixer) { +mixer_channel_node::mixer_channel_node(channel_interface* in_owner, mixer_track* in_track, uint32_t in_node_index): channel_node( + in_owner, channel_node_type::mixer), track_(in_track), node_index_(0) { const auto& headers = in_track->buffer.get_headers_vector(); channel_headers_.push_back(headers[in_node_index * 2]); diff --git a/core/audio/mixer/channel_node.h b/core/audio/mixer/channel_node.h index 99cf174..95d6eb9 100644 --- a/core/audio/mixer/channel_node.h +++ b/core/audio/mixer/channel_node.h @@ -37,10 +37,12 @@ private: }; class null_channel_node : public channel_node { - static null_channel_node instance; + static null_channel_node* instance; public: null_channel_node() : channel_node(nullptr, channel_node_type::null) {} - static null_channel_node* get() { return &instance; } + static void init() { instance = new null_channel_node(); } + static void destroy() { delete instance; } + static null_channel_node* get() { return instance; } std::string get_name() override { return "NullChannelNode"; } const std::vector& get_channel_headers() override; diff --git a/core/audio/mixer/mixer.cpp b/core/audio/mixer/mixer.cpp index 728fe4a..2089304 100644 --- a/core/audio/mixer/mixer.cpp +++ b/core/audio/mixer/mixer.cpp @@ -62,6 +62,8 @@ void build_instrument_process_node(const plugin_host* host, std::map::init(initliazer); + null_channel_node::init(); + auto device_manager = initliazer.require(); zero_track = new dummy_track(); zero_track->rename("zero"); @@ -77,6 +79,8 @@ void mixer::init(singleton_initliazer& initliazer) { void mixer::release() { singleton_t::release(); + null_channel_node::destroy(); + for (const mixer_track* track : tracks_) { delete track; } diff --git a/core/audio/plugin_host/plugin_host_manager.cpp b/core/audio/plugin_host/plugin_host_manager.cpp index adddfe0..9de40ef 100644 --- a/core/audio/plugin_host/plugin_host_manager.cpp +++ b/core/audio/plugin_host/plugin_host_manager.cpp @@ -3,6 +3,7 @@ #include "taskflow/taskflow.hpp" #include "plugin_host.h" +#include "audio/device/audio_device_manager.h" #include "audio/mixer/channel_interface.h" #include "audio/mixer/mixer.h" #include "audio/mixer/mixer_track.h" @@ -26,12 +27,15 @@ plugin_host* plugin_host_manager::load_plugin(const char* path) { return nullptr; } host->init_channel_interface(); - host->try_open_editor(); + host->on_update_buffer_size(g_audio_device_manager.get_buffer_size()); + host->on_update_sample_rate(g_audio_device_manager.get_sample_rate()); + g_audio_thread_hub.push_message([this, host]() { instrument_track* instrument_track = g_mixer.create_instrument_track(host); host->channel->set_input_channel(instrument_track->get_channel_interface()->input_channel_nodes); host->channel->set_output_channel(instrument_track->get_channel_interface()->output_channel_nodes); host->owner_tracks.push_back(instrument_track); + host->update_channel_node_name(); plugin_hosts_.push_back(host); }); return host;