score-avnd-amuencha/Amuencha/AmuenchaModel.hpp

76 lines
1.8 KiB
C++
Raw Normal View History

2024-10-12 22:18:42 +01:00
#pragma once
#include <halp/audio.hpp>
#include <halp/midi.hpp>
#include <halp/controls.hpp>
#include <halp/meta.hpp>
#include "FrequencyAnalyzer.hpp"
2024-10-12 22:18:42 +01:00
namespace Amuencha
{
class Model
2024-10-12 22:18:42 +01:00
{
public:
halp_meta(name, "Amuencha")
halp_meta(category, "Audio")
halp_meta(c_name, "amuencha")
halp_meta(uuid, "b37351b4-7b8d-4150-9e1c-708eec9182b2")
struct processor_to_ui
{
2024-10-29 00:07:57 +00:00
std::vector<float> reassigned_frequencies;
std::vector<float> power_spectrum;
};
std::function<void(processor_to_ui&&)> send_message;
2024-10-12 22:18:42 +01:00
// Define inputs and outputs ports.
// See the docs at https://github.com/celtera/avendish
struct ins
{
2024-10-29 00:07:57 +00:00
halp::fixed_audio_bus<"Input", float, 1> audio;
2024-11-01 00:01:20 +00:00
halp::hslider_i32<"Min", halp::range{.min = 0, .max = 127, .init = 24}> min;
halp::hslider_i32<"Max", halp::range{.min = 0, .max = 127, .init = 72}> max;
halp::spinbox_i32<"Periods", halp::range{.min = 0, .max = 99, .init = 30}> periods;
2024-10-12 22:18:42 +01:00
} inputs;
void process_message(const std::vector<float>& frequencies)
2024-10-23 00:22:31 +01:00
{
analyzer.setup(sampling_rate,
frequencies,
[&] (const std::vector<float>& r_f,
const std::vector<float>& p_s)
{
2024-11-01 00:01:20 +00:00
this->send_message({.reassigned_frequencies = r_f,
.power_spectrum = p_s});
},
inputs.periods);
2024-11-01 00:01:20 +00:00
if (!analyzer.isRunning())
analyzer.start(QThread::NormalPriority);
}
2024-10-23 00:22:31 +01:00
2024-10-12 22:18:42 +01:00
struct outs
{
halp::midi_bus<"Output"> midi;
} outputs;
using setup = halp::setup;
2024-11-01 00:01:20 +00:00
void prepare(setup info);
2024-10-12 22:18:42 +01:00
// Do our processing for N samples
using tick = halp::tick;
// Defined in the .cpp
2024-11-01 00:01:20 +00:00
void operator()(tick t);
2024-10-12 22:18:42 +01:00
// UI is defined in another file to keep things clear.
struct ui;
private:
float sampling_rate;
FrequencyAnalyzer analyzer;
2024-10-12 22:18:42 +01:00
};
}