Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
audio_callback.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <functional>
7
8#include <juce_wrapper.h>
9
10namespace zrythm::dsp
11{
12class AudioCallback : public juce::AudioIODeviceCallback
13{
14public:
15 using EngineProcessCallback = std::function<void (
16 const float * const * inputChannelData,
17 int numInputChannels,
18 float * const * outputChannelData,
19 int numOutputChannels,
20 int numSamples)>;
21 using DeviceAboutToStartCallback = std::function<void (juce::AudioIODevice *)>;
22 using DeviceStoppedCallback = std::function<void ()>;
23
24 AudioCallback (
25 EngineProcessCallback process_cb,
26 DeviceAboutToStartCallback device_about_to_start_cb,
27 DeviceStoppedCallback device_stopped_cb);
28
29public:
30 void audioDeviceIOCallbackWithContext (
31 const float * const * inputChannelData,
32 int numInputChannels,
33 float * const * outputChannelData,
34 int numOutputChannels,
35 int numSamples,
36 const juce::AudioIODeviceCallbackContext &context) override;
37 void audioDeviceAboutToStart (juce::AudioIODevice * device) override;
38 void audioDeviceStopped () override;
39 void audioDeviceError (const juce::String &errorMessage) override;
40
41private:
42 EngineProcessCallback process_cb_;
43 std::optional<DeviceAboutToStartCallback> device_about_to_start_cb_;
44 std::optional<DeviceStoppedCallback> device_stopped_cb_;
45};
46} // namespace zrythm::engine::device_io