Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
mts_esp_tuning.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#include <memory>
6
7#ifndef PULP_HAS_MTS_ESP
8#define PULP_HAS_MTS_ESP 0
9#endif
10
11namespace pulp::midi {
12
13inline constexpr bool kHasMtsEspTuning = static_cast<bool>(PULP_HAS_MTS_ESP);
14
15#if PULP_HAS_MTS_ESP
16
17class MtsEspTuningProvider final : public TuningProvider {
18public:
19 MtsEspTuningProvider();
20 ~MtsEspTuningProvider() override;
21
22 MtsEspTuningProvider(const MtsEspTuningProvider&) = delete;
23 MtsEspTuningProvider& operator=(const MtsEspTuningProvider&) = delete;
24
25 MtsEspTuningProvider(MtsEspTuningProvider&&) noexcept;
26 MtsEspTuningProvider& operator=(MtsEspTuningProvider&&) noexcept;
27
28 TuningQueryResult note_to_frequency(
29 int midi_note,
30 int midi_channel = kUnknownMidiChannel) const override;
31
32 TuningNoteResult frequency_to_note(
33 double frequency_hz,
34 int preferred_midi_channel = kUnknownMidiChannel) const override;
35
36 TuningNoteResult frequency_to_note_and_channel(double frequency_hz) const override;
37 TuningStatus status() const override;
38 void parse_midi_data(std::span<const std::uint8_t> data) override;
39 bool has_session_tuning() const;
40
41private:
42 struct Impl;
43 std::unique_ptr<Impl> impl_;
44};
45
46enum class MtsEspFallbackPolicy {
47 PreferMtsSession,
48 PreferLocalTuning,
49};
50
51class MtsEspFallbackTuningProvider final : public TuningProvider {
52public:
53 explicit MtsEspFallbackTuningProvider(
54 std::unique_ptr<TuningProvider> local_fallback =
55 std::make_unique<EqualTemperamentTuningProvider>(),
56 MtsEspFallbackPolicy policy = MtsEspFallbackPolicy::PreferMtsSession);
57 explicit MtsEspFallbackTuningProvider(MtsEspFallbackPolicy policy);
58 ~MtsEspFallbackTuningProvider() override;
59
60 MtsEspFallbackTuningProvider(const MtsEspFallbackTuningProvider&) = delete;
61 MtsEspFallbackTuningProvider& operator=(const MtsEspFallbackTuningProvider&) = delete;
62
63 MtsEspFallbackTuningProvider(MtsEspFallbackTuningProvider&&) noexcept;
64 MtsEspFallbackTuningProvider& operator=(MtsEspFallbackTuningProvider&&) noexcept;
65
66 TuningQueryResult note_to_frequency(
67 int midi_note,
68 int midi_channel = kUnknownMidiChannel) const override;
69
70 TuningNoteResult frequency_to_note(
71 double frequency_hz,
72 int preferred_midi_channel = kUnknownMidiChannel) const override;
73
74 TuningNoteResult frequency_to_note_and_channel(double frequency_hz) const override;
75 TuningStatus status() const override;
76 void parse_midi_data(std::span<const std::uint8_t> data) override;
77
78 bool using_mts_session() const;
79 bool mts_session_available() const;
80 const MtsEspTuningProvider& mts_provider() const noexcept { return mts_; }
81 MtsEspTuningProvider& mts_provider() noexcept { return mts_; }
82 const TuningProvider* local_fallback() const noexcept { return fallback_.get(); }
83 TuningProvider* local_fallback() noexcept { return fallback_.get(); }
84
85private:
86 bool local_tuning_available() const;
87 bool should_use_mts_session() const;
88
89 MtsEspTuningProvider mts_;
90 std::unique_ptr<TuningProvider> fallback_;
91 MtsEspFallbackPolicy policy_ = MtsEspFallbackPolicy::PreferMtsSession;
92};
93
94#endif // PULP_HAS_MTS_ESP
95
96} // namespace pulp::midi
Definition tuning.hpp:46
#define PULP_HAS_MTS_ESP
Definition mts_esp_tuning.hpp:8
Definition custom_node_events.hpp:26
constexpr bool kHasMtsEspTuning
Definition mts_esp_tuning.hpp:13
constexpr int kUnknownMidiChannel
Definition tuning.hpp:9
STL namespace.
Definition tuning.hpp:26
Definition tuning.hpp:18
Definition tuning.hpp:32