28 explicit JuceHardwareAudioInterface (
29 std::shared_ptr<juce::AudioDeviceManager> device_manager);
31 ~JuceHardwareAudioInterface ()
override;
45 [[nodiscard]] std::optional<juce::AudioWorkgroup>
51 static std::unique_ptr<IHardwareAudioInterface>
52 create (std::shared_ptr<juce::AudioDeviceManager> device_manager);
59 class JuceCallbackAdapter :
public juce::AudioIODeviceCallback
63 : callback_ (callback)
67 void audioDeviceIOCallbackWithContext (
68 const float *
const * inputChannelData,
70 float *
const * outputChannelData,
71 int numOutputChannels,
73 const juce::AudioIODeviceCallbackContext &context)
override
75 juce::ScopedNoDenormals no_denormals;
77 { inputChannelData,
static_cast<size_t> (numInputChannels) },
78 { outputChannelData,
static_cast<size_t> (numOutputChannels) },
79 units::samples (numSamples));
82 void audioDeviceAboutToStart (juce::AudioIODevice * device)
override;
83 void audioDeviceStopped ()
override;
84 void audioDeviceError (
const juce::String &errorMessage)
override;
87 IAudioCallback &callback_;
90 std::shared_ptr<juce::AudioDeviceManager> device_manager_;
93 std::unordered_map<IAudioCallback *, std::unique_ptr<JuceCallbackAdapter>>
virtual void process_audio(std::span< const float *const > input_channels, std::span< float *const > output_channels, units::sample_u32_t num_samples) noexcept=0
Called when the audio device wants to process a block of audio data.