Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
sample_bank.hpp
Go to the documentation of this file.
1#pragma once
2
7
8#include <cstdint>
9#include <filesystem>
10#include <limits>
11#include <memory>
12#include <span>
13#include <string>
14#include <string_view>
15#include <vector>
16
17namespace pulp::audio {
18
19inline constexpr std::string_view kSampleBankSchema = "pulp.sample-bank.v1";
20inline constexpr std::size_t kSampleBankMaxJsonBytes = 16u << 20;
21inline constexpr std::uint32_t kSampleBankMaxSamples = 4096;
22inline constexpr std::uint32_t kSampleBankMaxZones = 65536;
23
25 std::uint32_t id = kInvalidSampleId;
26 std::string path;
27 std::string sha256;
28 std::string license_ref;
29 // Canonical JSON object with namespaced keys (for example
30 // "pulp.sample-edit.v1"). Unknown extension payloads are preserved but
31 // never interpreted by the v1 materializer.
32 std::string extensions_json = "{}";
33};
34
37 std::string extensions_json = "{}";
38};
39
41 std::string schema = std::string(kSampleBankSchema);
42 std::string id;
43 std::string name;
44 std::vector<SampleBankSample> samples;
45 std::vector<SampleBankZone> zones;
46 std::string extensions_json = "{}";
47};
48
74
75const char* sample_bank_status_name(SampleBankStatus status) noexcept;
76
86
89 std::string field_path;
90 std::string json;
91
92 bool valid() const noexcept {
94 }
95};
96
99 std::string& field_path);
101
107
109 std::vector<std::string> manifest_paths;
110 std::vector<std::string> sample_paths;
111 std::vector<SampleBankContentIssue> issues;
112
113 bool valid() const noexcept { return issues.empty(); }
114};
115
121 const std::filesystem::path& content_root,
122 std::span<const std::string> exported_bank_paths,
123 std::uint64_t max_encoded_bytes_per_sample = 1ull << 30);
124
126 enum class Residency : std::uint8_t {
129 };
130
132 // Optional host/render rate used to validate preparation context. Samples
133 // always preserve their native rates; playback consumers apply the existing
134 // source-rate / host-rate ratio.
135 double target_sample_rate = 0.0;
137 // v1 materializes resident data. Values smaller than a decoded sample are
138 // rejected instead of silently discarding its tail.
139 std::uint64_t preload_frames_per_sample = std::numeric_limits<std::uint64_t>::max();
142 std::uint64_t max_encoded_bytes_per_sample = 1ull << 30;
143 std::uint64_t max_total_decoded_bytes = 8ull << 30;
144};
145
147 public:
154
155 const SampleBankManifest& manifest() const noexcept;
156 const SampleZoneMap& zone_map() const noexcept;
157 const SamplePool& sample_pool() const noexcept;
158 const SampleAssetView* sample_asset(std::uint32_t sample_id) const noexcept;
159
160 private:
162 struct Impl;
163 std::unique_ptr<Impl> impl_;
164};
165
168 std::string field_path;
170 std::unique_ptr<PreparedSampleBank> bank;
171
172 bool valid() const noexcept {
173 return status == SampleBankStatus::ok && bank != nullptr;
174 }
175};
176
181 public:
183 const std::filesystem::path& content_root,
184 const SampleBankMaterializePolicy& policy = {}) const;
185};
186
187} // namespace pulp::audio
friend class SampleBankMaterializer
Definition sample_bank.hpp:161
PreparedSampleBank(const PreparedSampleBank &)=delete
const SampleAssetView * sample_asset(std::uint32_t sample_id) const noexcept
PreparedSampleBank & operator=(const PreparedSampleBank &)=delete
const SampleBankManifest & manifest() const noexcept
const SampleZoneMap & zone_map() const noexcept
const SamplePool & sample_pool() const noexcept
PreparedSampleBank(PreparedSampleBank &&) noexcept
Control/background-thread loader.
Definition sample_bank.hpp:180
SampleBankMaterializeResult materialize(const SampleBankManifest &manifest, const std::filesystem::path &content_root, const SampleBankMaterializePolicy &policy={}) const
Definition sample_pool.hpp:31
Definition sample_zone_map.hpp:65
Definition analyzer_provider.hpp:12
constexpr std::string_view kSampleBankSchema
Definition sample_bank.hpp:19
SampleAssetStatus
Definition sample_asset_io.hpp:19
@ ok
Definition sample_asset_io.hpp:20
const char * sample_bank_status_name(SampleBankStatus status) noexcept
SampleBankParseResult parse_sample_bank_json(std::string_view json)
constexpr std::size_t kSampleBankMaxJsonBytes
Definition sample_bank.hpp:20
SampleBankStatus
Definition sample_bank.hpp:49
@ duplicate_field
Definition sample_bank.hpp:54
@ invalid_sample_id
Definition sample_bank.hpp:59
@ invalid_identifier
Definition sample_bank.hpp:58
@ unknown_field
Definition sample_bank.hpp:53
@ root_not_object
Definition sample_bank.hpp:52
@ unsupported_materialization_policy
Definition sample_bank.hpp:72
@ preparation_failed
Definition sample_bank.hpp:70
@ path_escape
Definition sample_bank.hpp:67
@ ok
Definition sample_bank.hpp:50
@ import_failed
Definition sample_bank.hpp:69
@ unsupported_schema
Definition sample_bank.hpp:57
@ missing_field
Definition sample_bank.hpp:55
@ invalid_path
Definition sample_bank.hpp:60
@ filesystem_error
Definition sample_bank.hpp:66
@ invalid_zone
Definition sample_bank.hpp:64
@ wrong_type
Definition sample_bank.hpp:56
@ resource_limit_exceeded
Definition sample_bank.hpp:71
@ invalid_hash
Definition sample_bank.hpp:61
@ duplicate_sample_path
Definition sample_bank.hpp:63
@ duplicate_sample_id
Definition sample_bank.hpp:62
@ hash_mismatch
Definition sample_bank.hpp:68
@ missing_sample_reference
Definition sample_bank.hpp:65
@ invalid_json
Definition sample_bank.hpp:51
SampleBankStatus validate_sample_bank_manifest(const SampleBankManifest &manifest, std::string &field_path)
@ ok
Definition analyzer_provider.hpp:58
constexpr std::uint32_t kSampleBankMaxSamples
Definition sample_bank.hpp:21
constexpr std::uint32_t kInvalidSampleId
Definition sample_identity.hpp:8
SampleBankContentValidationResult validate_sample_bank_content(const std::filesystem::path &content_root, std::span< const std::string > exported_bank_paths, std::uint64_t max_encoded_bytes_per_sample=1ull<< 30)
Validate exported bank manifests and every referenced sample under one content root.
SampleBankWriteResult write_sample_bank_json(const SampleBankManifest &manifest)
constexpr std::uint32_t kSampleBankMaxZones
Definition sample_bank.hpp:22
STL namespace.
Definition sample_asset_io.hpp:36
Immutable audio-thread snapshot borrowed from one SampleAsset owner.
Definition sample_asset.hpp:130
Definition sample_bank.hpp:102
std::string field_path
Definition sample_bank.hpp:105
SampleBankStatus status
Definition sample_bank.hpp:103
std::string manifest_path
Definition sample_bank.hpp:104
bool valid() const noexcept
Definition sample_bank.hpp:113
std::vector< SampleBankContentIssue > issues
Definition sample_bank.hpp:111
std::vector< std::string > manifest_paths
Definition sample_bank.hpp:109
std::vector< std::string > sample_paths
Definition sample_bank.hpp:110
Definition sample_bank.hpp:40
std::vector< SampleBankZone > zones
Definition sample_bank.hpp:45
std::string schema
Definition sample_bank.hpp:41
std::string extensions_json
Definition sample_bank.hpp:46
std::string id
Definition sample_bank.hpp:42
std::string name
Definition sample_bank.hpp:43
std::vector< SampleBankSample > samples
Definition sample_bank.hpp:44
Definition sample_bank.hpp:125
double target_sample_rate
Definition sample_bank.hpp:135
std::uint32_t max_samples
Definition sample_bank.hpp:140
Residency residency
Definition sample_bank.hpp:136
std::uint64_t preload_frames_per_sample
Definition sample_bank.hpp:139
Residency
Definition sample_bank.hpp:126
@ sample_assets
Definition sample_bank.hpp:127
@ published_pool
Definition sample_bank.hpp:128
std::uint64_t max_total_decoded_bytes
Definition sample_bank.hpp:143
std::uint64_t max_encoded_bytes_per_sample
Definition sample_bank.hpp:142
std::uint32_t max_zones
Definition sample_bank.hpp:141
SampleAssetPolicy sample_policy
Definition sample_bank.hpp:131
Definition sample_bank.hpp:166
std::string field_path
Definition sample_bank.hpp:168
SampleBankStatus status
Definition sample_bank.hpp:167
std::unique_ptr< PreparedSampleBank > bank
Definition sample_bank.hpp:170
SampleAssetStatus asset_status
Definition sample_bank.hpp:169
bool valid() const noexcept
Definition sample_bank.hpp:172
Definition sample_bank.hpp:77
SampleBankManifest manifest
Definition sample_bank.hpp:80
std::string field_path
Definition sample_bank.hpp:79
bool valid() const noexcept
Definition sample_bank.hpp:82
SampleBankStatus status
Definition sample_bank.hpp:78
Definition sample_bank.hpp:24
std::string extensions_json
Definition sample_bank.hpp:32
std::string license_ref
Definition sample_bank.hpp:28
std::string path
Definition sample_bank.hpp:26
std::string sha256
Definition sample_bank.hpp:27
Definition sample_bank.hpp:87
SampleBankStatus status
Definition sample_bank.hpp:88
std::string field_path
Definition sample_bank.hpp:89
bool valid() const noexcept
Definition sample_bank.hpp:92
std::string json
Definition sample_bank.hpp:90
Definition sample_bank.hpp:35
std::string extensions_json
Definition sample_bank.hpp:37
SampleZone zone
Definition sample_bank.hpp:36
Definition sample_zone_map.hpp:18