11#include <AudioUnitSDK/MusicDeviceBase.h>
18#include <pulp/format/detail/playhead_diff.hpp>
50 const std::size_t declared =
51 desc.output_buses.empty() ? std::size_t{1} : desc.output_buses.size();
67 std::size_t cap)
noexcept {
69 for (std::size_t i = 0; i < desc.output_buses.size() && n < cap; ++i) {
70 out[n].name = desc.output_buses[i].name;
74 out[n].declared_channels = desc.output_buses[i].default_channels;
77 out[n].optional = (i != 0);
93 AudioUnitParameterID* outParameterList,
94 UInt32& outNumParameters)
override;
96 AudioUnitParameterID inParameterID,
97 AudioUnitParameterInfo& outParameterInfo)
override;
102 OSStatus
GetParameter(AudioUnitParameterID inID, AudioUnitScope inScope,
103 AudioUnitElement inElement, Float32& outValue)
override;
104 OSStatus
SetParameter(AudioUnitParameterID inID, AudioUnitScope inScope,
105 AudioUnitElement inElement, Float32 inValue,
106 UInt32 inBufferOffsetInFrames)
override;
112 CFArrayRef* outStrings)
override;
120 AudioUnitElement inElement, UInt32& outDataSize,
121 bool& outWritable)
override;
122 OSStatus
GetProperty(AudioUnitPropertyID inID, AudioUnitScope inScope,
123 AudioUnitElement inElement,
void* outData)
override;
125 OSStatus
SetProperty(AudioUnitPropertyID inID, AudioUnitScope inScope,
126 AudioUnitElement inElement,
const void* inData,
127 UInt32 inDataSize)
override;
143 bool ValidFormat(AudioUnitScope inScope, AudioUnitElement inElement,
144 const AudioStreamBasicDescription& inNewFormat) override;
146 const AudioStreamBasicDescription& inPrevFormat,
147 const AudioStreamBasicDescription& inNewFormat) override;
150 UInt8 inVelocity, UInt32 inStartFrame) override;
152 UInt8 inVelocity, UInt32 inStartFrame) override;
162 UInt32 inStartFrame) override;
169 OSStatus
HandleSysEx(const UInt8* inData, UInt32 inLength) override;
171 OSStatus
Render(AudioUnitRenderActionFlags& ioActionFlags,
172 const AudioTimeStamp& inTimeStamp,
173 UInt32 inNumberFrames) override;
191 return factory_presets_;
194 OSStatus
SaveState(CFPropertyListRef* outData)
override;
220 std::unique_ptr<Processor> processor_;
222 std::shared_ptr<PanicState> panic_state_;
254 std::array<std::vector<float*>, kMaxOutputBuses> output_bus_ptrs_{};
263 bool has_input_element_ =
false;
264 bool has_sidechain_element_ =
false;
265 std::array<const float*, boundary::kBoundaryMaxChannels> input_ptrs_{};
266 std::array<const float*, boundary::kBoundaryMaxChannels> sidechain_ptrs_{};
269 std::array<AUChannelInfo, kMaxChannelInfoPairs> channel_info_{};
273 state::ListenerToken ui_push_listener_;
274 ParameterDisplayNamePublisher parameter_display_names_;
278 runtime::SpscQueue<midi::MidiEvent, 1024> midi_in_queue_;
283 static constexpr std::size_t kMaxSysexPayloadBytes = 1024;
285 std::array<uint8_t, kMaxSysexPayloadBytes> bytes{};
288 runtime::SpscQueue<SysexChunk, 32> sysex_in_queue_;
293 static constexpr std::size_t kMaxSysexPerBlock = 64;
294 midi::MidiBuffer midi_in_;
295 midi::MidiBuffer midi_out_;
302 bool plugin_produces_midi() const noexcept;
303 MidiOutputCallbackPublisher midi_output_callback_;
304 MidiOutputPacketBuilder midi_out_packet_builder_;
309 detail::PlayheadSnapshot playhead_prev_{};
313 OfflineRenderProperty offline_render_;
The shared adapter-boundary core.
kAudioUnitProperty_RenderContextObserver, the v2 form of AUv3's renderContextObserver.
Definition au_v2_common.hpp:492
Shared, fail-closed lifetime signal for callbacks that may outlive an owner.
Definition alive_token.hpp:19
RAII attachment.
Definition trace_session.hpp:276
Centralized parameter storage with lock-free value access.
Definition store.hpp:164
Per-host accommodation flags consumed by format adapters.