From c3adc2be382dad089e8dcc76f1cf194776433750 Mon Sep 17 00:00:00 2001 From: thibaudk Date: Fri, 25 Oct 2024 12:02:48 +0100 Subject: [PATCH] [ui] update Spiral from processor --- Amuencha/AmuenchaModel.cpp | 9 +++++++++ Amuencha/AmuenchaModel.hpp | 3 +++ Amuencha/AmuenchaUi.hpp | 18 ++++++++---------- Amuencha/SpiralDisplay.cpp | 14 ++++++++++++++ Amuencha/SpiralDisplay.hpp | 13 ++++++++----- 5 files changed, 42 insertions(+), 15 deletions(-) diff --git a/Amuencha/AmuenchaModel.cpp b/Amuencha/AmuenchaModel.cpp index 34b2631..f6670b2 100644 --- a/Amuencha/AmuenchaModel.cpp +++ b/Amuencha/AmuenchaModel.cpp @@ -4,6 +4,15 @@ namespace Amuencha { void Analyser::operator()(halp::tick t) { + if (inputs.min != previous_min || + inputs.max != previous_max) + { + send_message(processor_to_ui{.min = inputs.min, + .max = inputs.max}); + previous_min = inputs.min; + previous_max = inputs.max; + } + // Process the input buffer auto* in = inputs.audio[0]; diff --git a/Amuencha/AmuenchaModel.hpp b/Amuencha/AmuenchaModel.hpp index a8034f9..093215d 100644 --- a/Amuencha/AmuenchaModel.hpp +++ b/Amuencha/AmuenchaModel.hpp @@ -52,6 +52,9 @@ public: // UI is defined in another file to keep things clear. struct ui; + +private: + double previous_min{24}, previous_max{72}; }; } diff --git a/Amuencha/AmuenchaUi.hpp b/Amuencha/AmuenchaUi.hpp index 08ebc75..359d137 100644 --- a/Amuencha/AmuenchaUi.hpp +++ b/Amuencha/AmuenchaUi.hpp @@ -22,22 +22,20 @@ struct Analyser::ui halp::item<&ins::max> max; } controls; - struct - { - halp_meta(layout, halp::layouts::vbox) - halp_meta(background, halp::colors::mid) - halp_meta(width, 500) - halp_meta(height, 500) - - halp::custom_actions_item widget{.x = 0, .y = 0}; - } spiral; + halp::custom_actions_item spiral{.x = 0, .y = 0}; // Define the communication between UI and processor. struct bus { + // // Set up connections + // init(ui& self) + // { + // } + // Receive a message on the UI thread from the processing thread - static void process_message(ui& self, processor_to_ui msg) + static void process_message(ui& self, const processor_to_ui& msg) { + self.spiral.set_min_max_notes(msg.min, msg.max); } }; }; diff --git a/Amuencha/SpiralDisplay.cpp b/Amuencha/SpiralDisplay.cpp index 1e69579..f4fe5cc 100644 --- a/Amuencha/SpiralDisplay.cpp +++ b/Amuencha/SpiralDisplay.cpp @@ -3,12 +3,26 @@ Amuencha::SpiralDisplay::SpiralDisplay() : min_midi_note{24} , max_midi_note{72} + , gain{1.f} { for (int i{0}; i < 12; i++) note_positions[i] = std::polar(.9f, half_pi - i * two_pi / 12); display_spectrum.resize(num_ID); } +void Amuencha::SpiralDisplay::set_min_max_notes(int min_midi_note, int max_midi_note) +{ + if (max_midi_note < min_midi_note) std::swap(min_midi_note, max_midi_note); + + this->min_midi_note = min_midi_note; + this->max_midi_note = max_midi_note; + display_bins.clear(); + // QPainterPath empty; + // base_spiral.swap(empty); + // for(int id=0; id= 0; --b) @@ -91,6 +94,8 @@ private: std::array, 12> note_positions{}; + int min_midi_note, max_midi_note, visual_fading; + // central frequencies (log space) std::vector frequencies; @@ -109,9 +114,7 @@ private: struct Radius_Angle {float r, a;}; std::vector spiral_r_a; - int min_midi_note, max_midi_note, visual_fading; - - float gain{1.f}, half; + float half; float x(float x) const {