28 explicit JuceHardwareAudioInterface (
29 std::shared_ptr<juce::AudioDeviceManager> device_manager);
31 ~JuceHardwareAudioInterface ()
override;
46 [[nodiscard]] std::optional<juce::AudioWorkgroup>
52 static std::unique_ptr<IHardwareAudioInterface>
53 create (std::shared_ptr<juce::AudioDeviceManager> device_manager);
60 class JuceCallbackAdapter :
public juce::AudioIODeviceCallback
64 : callback_ (callback)
68 void audioDeviceIOCallbackWithContext (
69 const float *
const * inputChannelData,
71 float *
const * outputChannelData,
72 int numOutputChannels,
74 const juce::AudioIODeviceCallbackContext &context)
override
76 juce::ScopedNoDenormals no_denormals;
78 inputChannelData, numInputChannels, outputChannelData,
79 numOutputChannels, 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(const float *const *input_channel_data, int num_input_channels, float *const *output_channel_data, int num_output_channels, int num_samples) noexcept=0
Called when the audio device wants to process a block of audio data.