[ui] update Spiral from processor
This commit is contained in:
parent
bf657b668b
commit
c3adc2be38
5 changed files with 42 additions and 15 deletions
|
@ -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];
|
||||
|
||||
|
|
|
@ -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};
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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<SpiralDisplay> widget{.x = 0, .y = 0};
|
||||
} spiral;
|
||||
halp::custom_actions_item<SpiralDisplay> 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);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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<num_ID; ++id) all_spirals[id].clear();
|
||||
// update();
|
||||
}
|
||||
|
||||
void Amuencha::SpiralDisplay::compute_frequencies()
|
||||
{
|
||||
// Now the spiral
|
||||
|
|
|
@ -19,6 +19,10 @@ struct SpiralDisplay
|
|||
static consteval int width() { return 500; }
|
||||
static consteval int height() { return 500; }
|
||||
|
||||
void set_min_max_notes(int min_midi_note, int max_midi_note);
|
||||
|
||||
float gain;
|
||||
|
||||
void paint(avnd::painter auto ctx)
|
||||
{
|
||||
half = height() * .5f;
|
||||
|
@ -36,8 +40,6 @@ struct SpiralDisplay
|
|||
note_names[i]);
|
||||
}
|
||||
|
||||
ctx.stroke();
|
||||
|
||||
int num_octaves = (max_midi_note - min_midi_note + 11) / 12;
|
||||
|
||||
for (int id{0}; id < num_ID; ++id)
|
||||
|
@ -62,6 +64,7 @@ struct SpiralDisplay
|
|||
}
|
||||
|
||||
// Overlay the base spiral in black
|
||||
// FIXME : find the avendish way to store a painter
|
||||
// if (base_spiral.isEmpty()) {
|
||||
ctx.move_to(x(spiral_positions.back().real()), y(spiral_positions.back().imag()));
|
||||
for (int b = spiral_positions.size() - 1; b >= 0; --b)
|
||||
|
@ -91,6 +94,8 @@ private:
|
|||
|
||||
std::array<std::complex<float>, 12> note_positions{};
|
||||
|
||||
int min_midi_note, max_midi_note, visual_fading;
|
||||
|
||||
// central frequencies (log space)
|
||||
std::vector<float> frequencies;
|
||||
|
||||
|
@ -109,9 +114,7 @@ private:
|
|||
struct Radius_Angle {float r, a;};
|
||||
std::vector<Radius_Angle> spiral_r_a;
|
||||
|
||||
int min_midi_note, max_midi_note, visual_fading;
|
||||
|
||||
float gain{1.f}, half;
|
||||
float half;
|
||||
|
||||
float x(float x) const
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue