Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
synthesiser.hpp File Reference

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...

Detailed Description

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).