Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
engine_registry.hpp
Go to the documentation of this file.
1#pragma once
2
14
15#include <array>
16#include <memory>
17#include <string_view>
18
19namespace pulp::signal::drum {
20
44
50
61
64inline constexpr std::array<EngineMetadata, 16> engine_registry{{
65 {EngineId::kick_oscillator, "kick.oscillator", "Oscillator Kick",
66 EngineProvenance::pulp_original, "Pulp original implementation", true, true, false},
67 {EngineId::kick_resonant, "kick.resonant", "Resonant Kick",
68 EngineProvenance::pulp_original, "Pulp original implementation", true, true, false},
69 {EngineId::kick_circuit, "kick.circuit", "Bridged-T Circuit Kick",
71 "Werner, Abel, and Smith bridged-T model", true, true, false},
72 {EngineId::snare, "snare", "Snare",
73 EngineProvenance::pulp_original, "Pulp original implementation", true, true, false},
74 {EngineId::hat, "hat", "Metallic Hi-Hat",
75 EngineProvenance::pulp_original, "Pulp original implementation", true, true, false},
76 {EngineId::clap, "clap", "Hand Clap",
77 EngineProvenance::pulp_original, "Pulp original implementation", true, true, false},
78 {EngineId::tom_generic, "tom.generic", "Generic Tom",
79 EngineProvenance::pulp_original, "Pulp original preset and implementation", true, true,
80 false},
81 {EngineId::tom_simmons, "tom.simmons", "SDS-V-Family Tom",
83 "Original implementation of the published Simmons topology", true, true, false},
84 {EngineId::cymbal_comb, "cymbal.comb", "Comb Cymbal",
86 "Original implementation informed by the zionjaymes comb tutorial", true, true, true},
87 {EngineId::membrane_modal, "membrane.modal", "Modal Membrane",
89 "Fletcher and Rossing circular-membrane modal ratios", true, true, false},
90 {EngineId::string_karplus_strong, "string.karplus-strong", "Karplus-Strong String",
92 "Karplus and Strong; Jaffe and Smith extensions", true, true, false},
93 {EngineId::zap_cz, "zap.cz", "CZ Phase-Distortion Zap",
95 "Original implementation of Casio phase distortion", true, true, false},
96 {EngineId::fm2, "fm2", "Two-Operator FM Drum",
98 "Original implementation of Chowning FM synthesis", true, true, false},
99 {EngineId::fm6, "fm6", "Six-Operator FM Drum",
101 "Original implementation of Chowning FM synthesis", true, true, false},
102 {EngineId::fm8, "fm8", "Eight-Operator FM Drum",
104 "Original implementation of Chowning FM synthesis", true, true, false},
105 {EngineId::dx7_msfa, "dx7.msfa", "DX7 (MSFA)",
107 "Unavailable: MSFA vendored license-file mismatch must be resolved", false, false,
108 false},
109}};
110
111inline const EngineMetadata* find_engine(std::string_view name) noexcept {
112 for (const auto& engine : engine_registry) {
113 if (engine.name == name) return &engine;
114 }
115 return nullptr;
116}
117
120inline std::unique_ptr<Voice> create_engine(EngineId id) {
121 switch (id) {
123 auto voice = std::make_unique<KickVoice>();
124 voice->set_body(KickBody::oscillator);
125 return voice;
126 }
128 auto voice = std::make_unique<KickVoice>();
129 voice->set_body(KickBody::resonant);
130 return voice;
131 }
133 auto voice = std::make_unique<KickVoice>();
134 voice->set_body(KickBody::circuit);
135 return voice;
136 }
137 case EngineId::snare:
138 return std::make_unique<SnareVoice>();
139 case EngineId::hat:
140 return std::make_unique<HatVoice>();
141 case EngineId::clap:
142 return std::make_unique<ClapVoice>();
144 auto voice = std::make_unique<TomVoice>();
145 voice->apply_preset(TomVoice::Preset::generic_tom);
146 return voice;
147 }
149 auto voice = std::make_unique<TomVoice>();
150 voice->apply_preset(TomVoice::Preset::low_tom);
151 return voice;
152 }
154 return std::make_unique<CymbalVoice>();
156 return std::make_unique<MembraneVoice>();
158 return std::make_unique<StringVoice>();
159 case EngineId::zap_cz:
160 return std::make_unique<ZapVoice>();
161 case EngineId::fm2:
162 return std::make_unique<FmDrumVoice>();
163 case EngineId::fm6:
164 return std::make_unique<Fm6DrumVoice>();
165 case EngineId::fm8:
166 return std::make_unique<Fm8DrumVoice>();
168 return nullptr;
169 }
170 return nullptr;
171}
172
173} // namespace pulp::signal::drum
@ generic_tom
Definition tom.hpp:68
@ low_tom
Definition tom.hpp:69
Definition clap.hpp:13
std::unique_ptr< Voice > create_engine(EngineId id)
Construct a configured engine by stable identity.
Definition engine_registry.hpp:120
constexpr std::array< EngineMetadata, 16 > engine_registry
The authoritative engine inventory.
Definition engine_registry.hpp:64
const EngineMetadata * find_engine(std::string_view name) noexcept
Definition engine_registry.hpp:111
EngineId
Stable identities for the drum engines Pulp can describe.
Definition engine_registry.hpp:26
@ membrane_modal
Definition engine_registry.hpp:36
@ fm6
Definition engine_registry.hpp:40
@ kick_resonant
Definition engine_registry.hpp:28
@ cymbal_comb
Definition engine_registry.hpp:35
@ hat
Definition engine_registry.hpp:31
@ fm2
Definition engine_registry.hpp:39
@ snare
Definition engine_registry.hpp:30
@ zap_cz
Definition engine_registry.hpp:38
@ dx7_msfa
Definition engine_registry.hpp:42
@ tom_generic
Definition engine_registry.hpp:33
@ tom_simmons
Definition engine_registry.hpp:34
@ kick_circuit
Definition engine_registry.hpp:29
@ clap
Definition engine_registry.hpp:32
@ fm8
Definition engine_registry.hpp:41
@ string_karplus_strong
Definition engine_registry.hpp:37
@ kick_oscillator
Definition engine_registry.hpp:27
EngineProvenance
Definition engine_registry.hpp:45
@ license_hold
Definition engine_registry.hpp:48
@ pulp_original
Definition engine_registry.hpp:46
@ published_technique
Definition engine_registry.hpp:47
@ resonant
A struck resonance.
Definition kick.hpp:29
@ oscillator
A swept oscillator.
Definition kick.hpp:24
@ circuit
The TR-808's bridged-T network in its op-amp feedback loop.
Definition kick.hpp:37
Definition engine_registry.hpp:51
std::string_view lineage
Definition engine_registry.hpp:56
EngineId id
Definition engine_registry.hpp:52
bool velocity_changes_timbre
Definition engine_registry.hpp:58
bool velocity_may_change_decay
Definition engine_registry.hpp:59
bool available
Definition engine_registry.hpp:57
std::string_view name
Definition engine_registry.hpp:53
EngineProvenance provenance
Definition engine_registry.hpp:55
std::string_view display_name
Definition engine_registry.hpp:54