1. 优化ui_buffer显示
This commit is contained in:
parent
e65c44899a
commit
e74ecd2250
@ -44,6 +44,7 @@ void mixer::release(singleton_release_guard& release_guard) {
|
||||
}
|
||||
|
||||
dummy_track* mixer::create_dummy_track(const std::string& in_name) {
|
||||
ready_dirty();
|
||||
auto* track = new dummy_track();
|
||||
track->init();
|
||||
track->rename(in_name);
|
||||
@ -56,6 +57,7 @@ dummy_track* mixer::create_dummy_track(const std::string& in_name) {
|
||||
}
|
||||
|
||||
instrument_track* mixer::create_instrument_track(plugin_host* in_instrument) {
|
||||
ready_dirty();
|
||||
auto* track = new instrument_track(in_instrument);
|
||||
track->init();
|
||||
|
||||
@ -87,14 +89,10 @@ void mixer::remove_track(mixer_track* track) {
|
||||
void mixer::process(uint32_t in_frames, circular_buffer_vector_type& out_buffer) {
|
||||
processor_.process(in_frames);
|
||||
processor_.pop_master(in_frames, out_buffer);
|
||||
ready_ = true;
|
||||
}
|
||||
|
||||
void mixer::reset() {
|
||||
if (process_node_dirty_) {
|
||||
processor_.update_all();
|
||||
process_node_dirty_ = false;
|
||||
}
|
||||
|
||||
for (const auto track : tracks_) {
|
||||
track->clear();
|
||||
}
|
||||
@ -120,6 +118,7 @@ void mixer::thread_register_track(mixer_track* track) {
|
||||
}
|
||||
|
||||
void mixer::on_mixer_latency_changed() {
|
||||
ready_dirty();
|
||||
g_audio_thread_hub.push_message([this] {
|
||||
processor_.update_latency();
|
||||
});
|
||||
|
@ -33,7 +33,8 @@ public:
|
||||
[[nodiscard]] auto get_master() const -> dummy_track* { return master_; }
|
||||
[[nodiscard]] auto get_zero_track() const -> dummy_track* { return zero_track_; }
|
||||
void request_build_process_node();
|
||||
|
||||
bool is_ready() const { return ready_; }
|
||||
void ready_dirty() { ready_ = false; }
|
||||
|
||||
multicast_delegate<mixer_track*> on_add_track;
|
||||
multicast_delegate<mixer_track*> on_add_track_main_thread;
|
||||
@ -52,7 +53,7 @@ private:
|
||||
dummy_track* zero_track_; // 用于没有任何音频输出的通道
|
||||
std::vector<mixer_track*> tracks_;
|
||||
mixer_processor processor_;
|
||||
bool process_node_dirty_ = false;
|
||||
std::atomic<bool> ready_ = false;
|
||||
};
|
||||
|
||||
DEFINE_SINGLETON_INSTANCE(mixer)
|
||||
|
@ -61,7 +61,7 @@ auto mixer_track::get_latency() const -> int32_t {
|
||||
|
||||
void mixer_track::set_ui_buffer_latency(int32_t in_latency) {
|
||||
const uint32_t block_size = g_audio_device_manager.get_buffer_size();
|
||||
const int32_t block_num = std::ceil((float)in_latency / block_size) + 1;
|
||||
const int32_t block_num = std::ceil((float)in_latency / block_size) + 4;
|
||||
|
||||
for (auto& buffer : ui_buffers_) {
|
||||
buffer.set_capacity(block_num * block_size);
|
||||
@ -69,6 +69,14 @@ void mixer_track::set_ui_buffer_latency(int32_t in_latency) {
|
||||
}
|
||||
}
|
||||
|
||||
void mixer_track::push_ui_buffer(const audio_buffer& in_buffer) {
|
||||
auto headers = in_buffer.get_headers_vector();
|
||||
for (const auto& header : std::ranges::views::zip(headers, ui_buffers_)) {
|
||||
const auto& [in, out] = header;
|
||||
out.push(in, in_buffer.get_num_samples());
|
||||
}
|
||||
}
|
||||
|
||||
instrument_track::instrument_track(plugin_host* in_instrument): mixer_track(mixer_track_type::instrument)
|
||||
, instrument_(in_instrument) {}
|
||||
|
||||
|
@ -60,14 +60,7 @@ public:
|
||||
}
|
||||
|
||||
void set_ui_buffer_latency(int32_t in_latency);
|
||||
|
||||
void push_ui_buffer(const audio_buffer& in_buffer) {
|
||||
auto headers = in_buffer.get_headers_vector();
|
||||
for (auto header : std::ranges::views::zip(headers, ui_buffers_)) {
|
||||
const auto& [in, out] = header;
|
||||
out.push(in, in_buffer.get_num_samples());
|
||||
}
|
||||
}
|
||||
void push_ui_buffer(const audio_buffer& in_buffer);
|
||||
|
||||
[[nodiscard]] auto get_ui_buffer() -> circular_buffer_vector_type& { return ui_buffers_;}
|
||||
[[nodiscard]] auto get_effects() const -> const std::vector<plugin_host*>& { return effects_; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user