Generic MIDI-1 polyphonic synth framework. More...
#include <pulp/midi/buffer.hpp>#include <pulp/midi/message.hpp>#include <pulp/runtime/budget_policy.hpp>#include <algorithm>#include <array>#include <atomic>#include <cstddef>#include <cstdint>#include <limits>#include <type_traits>#include <vector>Go to the source code of this file.
Classes | |
| struct | pulp::midi::SynthesiserNote |
| Per-note metadata maintained by the Synthesiser when a voice is activated. More... | |
| struct | pulp::midi::SynthesiserTelemetry |
| struct | pulp::midi::SynthesiserRuntimeBudgetReport |
| class | pulp::midi::SynthesiserVoice |
| Abstract base for one synth voice. More... | |
| struct | pulp::midi::SynthesiserNoteOnPolicy |
| Constant note-on metadata for MIDI-buffer dispatch. More... | |
| class | pulp::midi::Synthesiser< Voice > |
| Polyphonic synth that routes plain-MIDI events into a pool of Voice instances. More... | |
Namespaces | |
| namespace | pulp |
| namespace | pulp::midi |
Enumerations | |
| enum class | pulp::midi::VoiceStealStrategy : uint8_t { pulp::midi::Oldest , pulp::midi::Quietest , pulp::midi::Lowest , pulp::midi::Highest , pulp::midi::Priority } |
| Voice-stealing strategy applied when note_on fires and no free voice is available. More... | |
Generic MIDI-1 polyphonic synth framework.
Synthesiser<Voice> owns a fixed-size pool of Voice instances (subclasses of SynthesiserVoice) and routes MIDI events into them, with a configurable voice-stealing strategy when the pool is exhausted.
Relationship to MPE: MpeVoiceAllocator (in mpe_synth_voice.hpp) is the MPE-aware counterpart that routes per-note expression across MPE member channels. Synthesiser is the plain-MIDI alternative — one note per channel/note pair, channel-level pitch bend / aftertouch / CC apply to every active note on that channel.
Use Synthesiser when the descriptor sets supports_mpe = false (the default for non-expressive synths).