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