Classes | |
| class | ClapVoice |
| A hand clap. More... | |
| class | CymbalVoice |
| A cymbal, built from a bank of comb filters and then deliberately de-tuned out of any musical relationship. More... | |
| struct | EngineMetadata |
| class | FmDrumVoice |
| A two-operator FM percussion voice. More... | |
| class | Fm8DrumVoice |
| An eight-operator FM percussion voice with a fixed algorithm table. More... | |
| class | Fm6DrumVoice |
| A six-operator FM voice with the classic thirty-two algorithm set. More... | |
| struct | FmWaveTable |
| A compact, license-clean bank of 26 phase-readable FM waves. More... | |
| struct | FmTransient |
| class | HatVoice |
| A hi-hat, and by extension every other struck metal in a kit. More... | |
| struct | HitLifeDecision |
| class | HitLife |
| Allocation-free shared sequencing for a voice's anti-machine-gun policy. More... | |
| class | KickVoice |
| A kick drum. More... | |
| class | Kit |
| A set of percussion voices summed into one output, with choke groups. More... | |
| class | ClickLayer |
| The transient: a burst of noise through a lowpass, decaying in a few milliseconds. More... | |
| class | NoiseLayer |
| The air a strike moves: a longer, coloured noise layer under the body. More... | |
| class | ShellLayer |
| A high-Q body resonance mixed back into an excitation path. More... | |
| class | SubLayer |
| A sine an octave below the body, gated by the body's own envelope. More... | |
| class | MembraneVoice |
| A struck membrane, modelled as its modes rather than as an oscillator. More... | |
| class | OutputStageT |
| The output stage every percussion voice ends with: fold, saturate, degrade, set the level, then apply an optional AHD/VCA. More... | |
| class | SnareVoice |
| A snare drum. More... | |
| class | StringVoice |
| A plucked or struck string, as a percussion voice. More... | |
| class | TomVoice |
| A tom, and the analogue electronic-drum voice it generalises. More... | |
| struct | VelocityResponse |
| How hard a hit changes the sound, beyond changing how loud it is. More... | |
| class | Voice |
| The lifecycle every percussion voice shares. More... | |
| class | ZapVoice |
| A zap: a phase-distortion percussion voice. More... | |
Typedefs | |
| using | OutputStage = OutputStageT<float> |
| using | OutputStage64 = OutputStageT<double> |
Enumerations | |
| enum class | EngineId { kick_oscillator , kick_resonant , kick_circuit , snare , hat , clap , tom_generic , tom_simmons , cymbal_comb , membrane_modal , string_karplus_strong , zap_cz , fm2 , fm6 , fm8 , dx7_msfa } |
| Stable identities for the drum engines Pulp can describe. More... | |
| enum class | EngineProvenance { pulp_original , published_technique , license_hold } |
| enum class | HitLifeMode { fixed_seed , advancing_seed , preserved_state , fixed_seed_preserved_body , advancing_seed_preserved_body } |
| Selects the intentional source of variation between otherwise identical hits. More... | |
| enum class | KickBody { oscillator , resonant , circuit } |
| How a kick's body is produced. More... | |
| enum class | MembraneExciter { noise_burst , pluck } |
| What strikes the modal membrane. More... | |
| enum class | OutputOversampling { bypass = 1 , x2 = 2 , x4 = 4 } |
| Realtime quality choices for the shared drum output nonlinearity. More... | |
| enum class | StringModulation { none , fm , ring , sync } |
| enum class | VoiceState { idle , ringing , choking } |
| Public lifecycle inspection for a drum voice. More... | |
Functions | |
| const EngineMetadata * | find_engine (std::string_view name) noexcept |
| std::unique_ptr< Voice > | create_engine (EngineId id) |
| Construct a configured engine by stable identity. | |
Variables | |
| constexpr std::array< EngineMetadata, 16 > | engine_registry |
| The authoritative engine inventory. | |
| constexpr std::array< FmTransient, 24 > | kFmTransients |
| Twenty-four original procedural strike recipes. | |
| using pulp::signal::drum::OutputStage = OutputStageT<float> |
| using pulp::signal::drum::OutputStage64 = OutputStageT<double> |
|
strong |
Stable identities for the drum engines Pulp can describe.
An unavailable identity stays in this list when its provenance is useful to callers. That lets a preset loader distinguish "known but held" from an unknown engine without compiling or vendoring the held implementation.
| Enumerator | |
|---|---|
| kick_oscillator | |
| kick_resonant | |
| kick_circuit | |
| snare | |
| hat | |
| clap | |
| tom_generic | |
| tom_simmons | |
| cymbal_comb | |
| membrane_modal | |
| string_karplus_strong | |
| zap_cz | |
| fm2 | |
| fm6 | |
| fm8 | |
| dx7_msfa | |
|
strong |
|
strong |
Selects the intentional source of variation between otherwise identical hits.
These are lifecycle policies, not random "humanize" amounts.
Two independent things happen on a hit: what the excitation stream does, and what the resonating body does. Every mode is one cell of that grid, so a voice never has to encode a policy outside this enum:
| Mode | Excitation | Body |
|---|---|---|
| fixed_seed | restart, base seed | reset |
| advancing_seed | restart, advancing | reset |
| preserved_state | continue uninterrupted | preserved |
| fixed_seed_preserved_body | restart, base seed | preserved |
| advancing_seed_preserved_body | restart, advancing | preserved |
Preserving the body is what stops a struck metal voice from sounding machine-gunned: the previous hit keeps ringing and the new excitation is added into a body that is already in motion, which is what happens when a real cymbal is struck twice.
| Enumerator | |
|---|---|
| fixed_seed | |
| advancing_seed | |
| preserved_state | |
| fixed_seed_preserved_body | |
| advancing_seed_preserved_body | |
|
strong |
How a kick's body is produced.
The three options are genuinely different instruments rather than three settings of one, which is why this is a mode switch and not a blend control.
|
strong |
|
strong |
Realtime quality choices for the shared drum output nonlinearity.
x2 is the shipping default. It is the same 65-tap Kaiser half-band pair used by Pulp's character-delay hysteresis path. x4 cascades a second copy for unusually hard fold/drive settings. bypass deliberately preserves host-rate aliasing for period-authentic drum-machine sounds and removes the filter latency entirely.
| Enumerator | |
|---|---|
| bypass | |
| x2 | |
| x4 | |
|
strong |
|
strong |
Public lifecycle inspection for a drum voice.
This is intentionally not a serializable DSP snapshot: voices own heterogeneous filter, delay, and RNG state, so pretending one base blob can restore them would create a false portability contract. Plugin parameter/state persistence belongs above the voice; this value is for allocation, UI, and choke-policy decisions.
| Enumerator | |
|---|---|
| idle | |
| ringing | |
| choking | |
Construct a configured engine by stable identity.
This is a setup-time operation and may allocate. Held or unknown implementations return null.
|
inlinenoexcept |
|
inlineconstexpr |
The authoritative engine inventory.
Names are persistence-safe and must not be reused for a different topology.
|
inlineconstexpr |
Twenty-four original procedural strike recipes.
These are synthesis settings, not sampled or matched values.