Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
sample_asset_io.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <string>
6#include <string_view>
7#include <vector>
8
10
11namespace pulp::audio {
12
13enum class SampleAssetKind : std::uint8_t {
17};
18
33
34[[nodiscard]] const char* sample_asset_status_name(SampleAssetStatus status) noexcept;
35
37 std::uint32_t max_channels = 0;
38 std::uint64_t max_frames = 0;
39 std::uint64_t max_decoded_bytes = 0;
40 std::vector<std::uint32_t> allowed_sample_rates;
41 std::vector<std::string> allowed_audio_read_extensions;
42 std::vector<std::string> allowed_audio_write_extensions;
43 bool allow_midi_drop = false;
44};
45
56
60
61 [[nodiscard]] bool ok() const noexcept { return descriptor.ok() && !audio.empty(); }
62};
63
65 std::string path;
66 std::string extension;
68 std::uint64_t frames_written = 0;
69 std::uint64_t decoded_bytes = 0;
70
71 [[nodiscard]] bool ok() const noexcept { return status == SampleAssetStatus::ok; }
72};
73
84
85[[nodiscard]] std::string sample_asset_normalize_extension(std::string_view extension);
86[[nodiscard]] SampleAssetKind classify_sample_asset_extension(std::string_view extension);
87[[nodiscard]] std::uint64_t sample_asset_decoded_bytes(std::uint32_t channels,
88 std::uint64_t frames) noexcept;
89
90// Control/background-thread importer policy over FormatRegistry. This may do
91// file I/O and allocate decoded audio; never call it from the audio callback.
93public:
94 [[nodiscard]] std::vector<std::string> supported_audio_extensions() const;
95 [[nodiscard]] bool supports_audio_extension(std::string_view extension) const;
96
98 const std::string& path,
99 const SampleAssetPolicy& policy = {}) const;
100
102 const std::string& path,
103 const SampleAssetPolicy& policy = {}) const;
104};
105
106// Control/background-thread exporter policy over FormatRegistry. This may do
107// file I/O and allocate/copy encoded data; never call it from the audio callback.
109public:
110 [[nodiscard]] std::vector<std::string> supported_audio_extensions() const;
111 [[nodiscard]] bool supports_audio_extension(std::string_view extension) const;
112
114 const std::string& path,
115 const AudioFileData& audio,
116 const SampleAssetPolicy& policy = {}) const;
117};
118
119// Extension-only drop classification for platform/UI drag handlers. This does
120// not read file metadata and can be followed by probe_sample_asset_drop() on a
121// background/control thread when detailed audio info is needed.
122[[nodiscard]] std::vector<SampleAssetDropItem> classify_sample_asset_drop(
123 const std::vector<std::string>& paths,
124 const SampleAssetPolicy& policy = {});
125
126// Metadata-probing drop classification. This may do file I/O and codec metadata
127// reads for audio-looking paths; never call it from audio callbacks or hot UI
128// pointer handlers.
129[[nodiscard]] std::vector<SampleAssetDropItem> probe_sample_asset_drop(
130 const std::vector<std::string>& paths,
131 const SampleAssetPolicy& policy = {});
132
133} // namespace pulp::audio
Definition sample_asset_io.hpp:108
std::vector< std::string > supported_audio_extensions() const
SampleAssetExportResult export_audio_file(const std::string &path, const AudioFileData &audio, const SampleAssetPolicy &policy={}) const
bool supports_audio_extension(std::string_view extension) const
Definition sample_asset_io.hpp:92
std::vector< std::string > supported_audio_extensions() const
SampleAssetImportResult import_audio_file(const std::string &path, const SampleAssetPolicy &policy={}) const
SampleAssetDescriptor describe_audio_file(const std::string &path, const SampleAssetPolicy &policy={}) const
bool supports_audio_extension(std::string_view extension) const
Definition analyzer_provider.hpp:12
SampleAssetStatus
Definition sample_asset_io.hpp:19
@ byte_budget_exceeded
Definition sample_asset_io.hpp:30
@ empty_path
Definition sample_asset_io.hpp:21
@ metadata_read_failed
Definition sample_asset_io.hpp:24
@ unsupported_extension
Definition sample_asset_io.hpp:22
@ ok
Definition sample_asset_io.hpp:20
@ read_failed
Definition sample_asset_io.hpp:25
@ unsupported_asset_kind
Definition sample_asset_io.hpp:23
@ channel_budget_exceeded
Definition sample_asset_io.hpp:28
@ invalid_audio
Definition sample_asset_io.hpp:27
@ write_failed
Definition sample_asset_io.hpp:26
@ sample_rate_not_allowed
Definition sample_asset_io.hpp:31
const char * sample_asset_status_name(SampleAssetStatus status) noexcept
SampleAssetKind
Definition sample_asset_io.hpp:13
@ unknown
Definition sample_asset_io.hpp:14
std::vector< SampleAssetDropItem > classify_sample_asset_drop(const std::vector< std::string > &paths, const SampleAssetPolicy &policy={})
@ frame_budget_exceeded
Definition analyzer_provider.hpp:80
std::string sample_asset_normalize_extension(std::string_view extension)
@ ok
Definition analyzer_provider.hpp:58
SampleAssetKind classify_sample_asset_extension(std::string_view extension)
std::uint64_t sample_asset_decoded_bytes(std::uint32_t channels, std::uint64_t frames) noexcept
std::vector< SampleAssetDropItem > probe_sample_asset_drop(const std::vector< std::string > &paths, const SampleAssetPolicy &policy={})
Definition custom_node_events.hpp:26
Definition audio_file.hpp:24
Definition audio_file.hpp:13
Definition sample_asset_io.hpp:46
std::uint64_t decoded_bytes
Definition sample_asset_io.hpp:52
std::string extension
Definition sample_asset_io.hpp:48
AudioFileInfo info
Definition sample_asset_io.hpp:51
bool ok() const noexcept
Definition sample_asset_io.hpp:54
std::string path
Definition sample_asset_io.hpp:47
SampleAssetStatus status
Definition sample_asset_io.hpp:50
SampleAssetKind kind
Definition sample_asset_io.hpp:49
Definition sample_asset_io.hpp:74
std::string path
Definition sample_asset_io.hpp:75
std::uint64_t decoded_bytes
Definition sample_asset_io.hpp:80
AudioFileInfo audio_info
Definition sample_asset_io.hpp:79
bool supported() const noexcept
Definition sample_asset_io.hpp:82
std::string extension
Definition sample_asset_io.hpp:76
SampleAssetStatus status
Definition sample_asset_io.hpp:78
SampleAssetKind kind
Definition sample_asset_io.hpp:77
Definition sample_asset_io.hpp:64
bool ok() const noexcept
Definition sample_asset_io.hpp:71
std::uint64_t decoded_bytes
Definition sample_asset_io.hpp:69
SampleAssetStatus status
Definition sample_asset_io.hpp:67
std::string extension
Definition sample_asset_io.hpp:66
std::uint64_t frames_written
Definition sample_asset_io.hpp:68
std::string path
Definition sample_asset_io.hpp:65
Definition sample_asset_io.hpp:57
bool ok() const noexcept
Definition sample_asset_io.hpp:61
AudioFileData audio
Definition sample_asset_io.hpp:59
SampleAssetDescriptor descriptor
Definition sample_asset_io.hpp:58
Definition sample_asset_io.hpp:36
std::vector< std::uint32_t > allowed_sample_rates
Definition sample_asset_io.hpp:40
std::vector< std::string > allowed_audio_read_extensions
Definition sample_asset_io.hpp:41
std::uint32_t max_channels
Definition sample_asset_io.hpp:37
std::uint64_t max_decoded_bytes
Definition sample_asset_io.hpp:39
std::vector< std::string > allowed_audio_write_extensions
Definition sample_asset_io.hpp:42
bool allow_midi_drop
Definition sample_asset_io.hpp:43
std::uint64_t max_frames
Definition sample_asset_io.hpp:38