Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
device_manager.h
1// SPDX-FileCopyrightText: © 2025-2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <QtQmlIntegration/qqmlintegration.h>
7
8#include <juce_audio_devices/juce_audio_devices.h>
9#include <juce_gui_basics/juce_gui_basics.h>
10
11namespace zrythm::gui::backend
12{
16class DeviceManager : public QObject, public juce::AudioDeviceManager
17{
18 Q_OBJECT
19 QML_ELEMENT
20 QML_UNCREATABLE ("")
21
22public:
23 using XmlStateGetter = std::function<std::unique_ptr<juce::XmlElement> ()>;
24 using XmlStateSetter = std::function<void (const juce::XmlElement &)>;
25
26 DeviceManager (XmlStateGetter state_getter, XmlStateSetter state_setter);
27
44 int max_input_channels,
45 int max_output_channels,
46 bool fallback_to_default);
47
48 void save_state ();
49
50 // this can be mocked in tests to add a test device
51 void createAudioDeviceTypes (
52 juce::OwnedArray<juce::AudioIODeviceType> &types) override;
53
54 Q_INVOKABLE void showDeviceSelector ();
55
56private:
57 class DeviceSelectorWindow : public juce::DocumentWindow
58 {
59 public:
60 DeviceSelectorWindow (DeviceManager &dev_manager);
61 void closeButtonPressed () override
62 {
63 dev_manager_.save_state ();
64 dev_manager_.device_selector_window_.reset ();
65 }
66
67 private:
68 DeviceManager &dev_manager_;
69 };
70
71private:
72 XmlStateGetter state_getter_;
73 XmlStateSetter state_setter_;
74 std::unique_ptr<DeviceSelectorWindow> device_selector_window_;
75};
76} // namespace zrythm::gui::backend
Wrapper over juce::AudioDeviceManager that exposes changes as signals.
void initialize(int max_input_channels, int max_output_channels, bool fallback_to_default)
Opens a set of devices ready for use.