修复没有设置sample rate和block size导致的vst2插件崩溃

This commit is contained in:
Nanako 2024-02-29 09:49:16 +08:00
parent 9ba3592e27
commit 735cb48a83
4 changed files with 16 additions and 5 deletions

View File

@ -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]);

View File

@ -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<float*>& get_channel_headers() override;

View File

@ -62,6 +62,8 @@ void build_instrument_process_node(const plugin_host* host, std::map<mixer_track
void mixer::init(singleton_initliazer& initliazer) {
singleton_t<mixer>::init(initliazer);
null_channel_node::init();
auto device_manager = initliazer.require<audio_device_manager>();
zero_track = new dummy_track();
zero_track->rename("zero");
@ -77,6 +79,8 @@ void mixer::init(singleton_initliazer& initliazer) {
void mixer::release() {
singleton_t<mixer>::release();
null_channel_node::destroy();
for (const mixer_track* track : tracks_) {
delete track;
}

View File

@ -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;