修复没有设置sample rate和block size导致的vst2插件崩溃
This commit is contained in:
parent
9ba3592e27
commit
735cb48a83
@ -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]);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user