score-plugin-analysis/Analysis/Envelope.hpp
1 #pragma once
2 #include <Engine/Node/SimpleApi.hpp>
3 
4 #include <Analysis/GistState.hpp>
5 
6 #include <numeric>
7 namespace Analysis
8 {
9 struct RMS
10 {
12  {
13  static const constexpr auto prettyName = "RMS";
14  static const constexpr auto objectKey = "RMS";
15  static const constexpr auto category = "Analysis/Envelope";
16  static const constexpr auto author = "ossia score, Gist library";
17  static const constexpr auto kind = Process::ProcessCategory::Analyzer;
18  static const constexpr auto description = "Get the RMS of a signal";
19  static const constexpr auto tags = std::array<const char*, 0>{};
20  static const uuid_constexpr auto uuid
21  = make_uuid("5d4057ff-d8d0-4d66-9e0f-55675e3323be");
22 
23  static const constexpr audio_in audio_ins[]{"in"};
24  static const constexpr auto controls = tuplet::make_tuple(
25  Control::LogFloatSlider{"Gain", 0., 100., 1.},
26  Control::FloatSlider{"Gate", 0., 1., 0.});
27 
28  static const constexpr value_out value_outs[]{"out"};
29  };
30 
31  using State = GistState;
32  using control_policy = ossia::safe_nodes::last_tick;
33 
34  static void
35  run(const ossia::audio_port& in, float gain, float gate, ossia::value_port& out,
36  ossia::token_request tk, ossia::exec_state_facade e, State& st)
37  {
38  st.process<&Gist<double>::rootMeanSquare>(in, gain, gate, out, tk, e);
39  }
40 };
41 struct Peak
42 {
44  {
45  static const constexpr auto prettyName = "Peak";
46  static const constexpr auto objectKey = "Peak";
47  static const constexpr auto category = "Analysis/Envelope";
48  static const constexpr auto author = "ossia score, Gist library";
49  static const constexpr auto kind = Process::ProcessCategory::Analyzer;
50  static const constexpr auto description = "Get the peak energy of a signal";
51  static const constexpr auto tags = std::array<const char*, 0>{};
52  static const uuid_constexpr auto uuid
53  = make_uuid("a14c8ced-25e6-4c89-ac45-63750cbb87fd");
54 
55  static const constexpr audio_in audio_ins[]{"in"};
56  static const constexpr auto controls = tuplet::make_tuple(
57  Control::LogFloatSlider{"Gain", 0., 100., 1.},
58  Control::FloatSlider{"Gate", 0., 1., 0.});
59 
60  static const constexpr value_out value_outs[]{"out"};
61  };
62 
63  using State = GistState;
64  using control_policy = ossia::safe_nodes::last_tick;
65 
66  static void
67  run(const ossia::audio_port& in, float gain, float gate, ossia::value_port& out,
68  ossia::token_request tk, ossia::exec_state_facade e, State& st)
69  {
70  st.process<&Gist<double>::peakEnergy>(in, gain, gate, out, tk, e);
71  }
72 };
73 }
Utilities for OSSIA data structures.
Definition: DeviceInterface.hpp:33
Definition: GistState.hpp:24
Definition: score-plugin-analysis/Analysis/Envelope.hpp:44
Definition: score-plugin-analysis/Analysis/Envelope.hpp:42
Definition: score-plugin-analysis/Analysis/Envelope.hpp:12
Definition: score-plugin-analysis/Analysis/Envelope.hpp:10
Definition: score-lib-process/Control/Widgets.hpp:77
Definition: SimpleApi.hpp:32