Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
device_placement.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <bit>
7#include <cmath>
8#include <compare>
9#include <cstddef>
10#include <cstdint>
11#include <optional>
12#include <string>
13
14namespace pulp::timeline {
15
19
21enum class DeviceChainPosition : std::uint8_t {
26};
27
37
39enum class DeviceKind : std::uint8_t {
48};
49
51inline constexpr std::size_t kMaximumDeviceBindingKeyBytes = 1024;
52
62 std::string binding_key;
64 bool bypassed = false;
66 std::uint32_t wet_dry_bits = std::bit_cast<std::uint32_t>(1.0f);
67
69 bool valid() const noexcept {
70 switch (position) {
73 break;
74 default:
75 return false;
76 }
77 switch (slot_kind) {
81 break;
82 default:
83 return false;
84 }
85 switch (device_kind) {
87 if (!binding_key.empty())
88 return false;
89 break;
93 if (binding_key.empty())
94 return false;
95 break;
96 default:
97 return false;
98 }
100 return false;
101 for (const unsigned char byte : binding_key)
102 if (byte < 0x20 || byte == 0x7f)
103 return false;
104 const auto wet_dry = std::bit_cast<float>(wet_dry_bits);
105 return std::isfinite(wet_dry) && wet_dry >= 0.0f && wet_dry <= 1.0f;
106 }
107
108 auto operator<=>(const DeviceConfiguration&) const = default;
109};
110
122 std::optional<ContentHash> state_ref;
123
125 bool valid() const noexcept {
126 return id.valid() && configuration.valid() &&
127 (!state_ref || state_ref->valid());
128 }
129
130 auto operator<=>(const DevicePlacement&) const = default;
131};
132
134
135} // namespace pulp::timeline
DeviceSlotKind
Static signal-domain contract of one device slot.
Definition device_placement.hpp:29
DeviceChainPosition
Authored position of a device relative to the track fader.
Definition device_placement.hpp:21
DeviceKind
Format-neutral namespace of a durable device binding key.
Definition device_placement.hpp:39
constexpr std::size_t kMaximumDeviceBindingKeyBytes
Maximum UTF-8 byte length of a durable binding key.
Definition device_placement.hpp:51
@ AudioToAudio
Accepts audio and emits audio.
Definition device_placement.hpp:35
@ EventToEvent
Accepts events and emits events.
Definition device_placement.hpp:31
@ EventToAudio
Accepts events and emits audio.
Definition device_placement.hpp:33
@ PostFader
Runs after the authored track fader.
Definition device_placement.hpp:25
@ PreFader
Runs before the authored track fader.
Definition device_placement.hpp:23
@ Unresolved
Has no resolver binding yet.
Definition device_placement.hpp:41
@ Generated
Resolves through a generated-device namespace.
Definition device_placement.hpp:47
@ External
Resolves through an external device namespace.
Definition device_placement.hpp:45
@ BuiltIn
Resolves through Pulp's built-in device namespace.
Definition device_placement.hpp:43
@ External
Resolve the bytes outside the project package.
Definition assets.hpp:48
Definition program_compiler.hpp:18
Authored device configuration excluding placement identity and opaque state.
Definition device_placement.hpp:54
std::uint32_t wet_dry_bits
Exact IEEE-754 binary32 bits for the canonical [0, 1] wet fraction.
Definition device_placement.hpp:66
DeviceKind device_kind
Namespace used to interpret binding_key.
Definition device_placement.hpp:60
bool bypassed
Whether playback bypasses this declaration.
Definition device_placement.hpp:64
std::string binding_key
Format-neutral resolver key; empty only for Unresolved.
Definition device_placement.hpp:62
auto operator<=>(const DeviceConfiguration &) const =default
bool valid() const noexcept
Returns whether enums, binding key, and wet/dry value are canonical.
Definition device_placement.hpp:69
DeviceChainPosition position
Authored position relative to the track fader.
Definition device_placement.hpp:56
DeviceSlotKind slot_kind
Static input/output signal-domain contract.
Definition device_placement.hpp:58
Durable declaration for one logical placement in a Track device chain.
Definition device_placement.hpp:117
std::optional< ContentHash > state_ref
Optional content identity of opaque device state.
Definition device_placement.hpp:122
DeviceConfiguration configuration
Authored resolver and signal-domain declaration.
Definition device_placement.hpp:120
auto operator<=>(const DevicePlacement &) const =default
ItemId id
Definition device_placement.hpp:118
bool valid() const noexcept
Returns whether identity, declaration, and optional state hash are valid.
Definition device_placement.hpp:125
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19