36class DeviceManager :
public QObject,
public juce::AudioDeviceManager
41 Q_DISABLE_COPY_MOVE (DeviceManager)
43 QVector<zrythm::gui::backend::AudioInputInfo> availableAudioInputs READ
44 availableAudioInputs NOTIFY availableAudioInputsChanged)
47 using XmlStateGetter = std::function<std::unique_ptr<juce::XmlElement> ()>;
48 using XmlStateSetter = std::function<void (
const juce::XmlElement &)>;
50 DeviceManager (XmlStateGetter state_getter, XmlStateSetter state_setter);
52 ~DeviceManager ()
override;
70 int max_input_channels,
71 int max_output_channels,
72 bool fallback_to_default);
77 void createAudioDeviceTypes (
78 juce::OwnedArray<juce::AudioIODeviceType> &types)
override;
80 Q_INVOKABLE
void showDeviceSelector ();
82 QVector<AudioInputInfo> availableAudioInputs ()
const;
83 Q_SIGNAL
void availableAudioInputsChanged ();
86 class DeviceChangeListener final :
public juce::ChangeListener
89 explicit DeviceChangeListener (DeviceManager &dev_manager)
90 : dev_manager_ (dev_manager)
95 void changeListenerCallback (juce::ChangeBroadcaster *)
override
97 Q_EMIT dev_manager_.availableAudioInputsChanged ();
100 DeviceManager &dev_manager_;
103 class DeviceSelectorWindow :
public juce::DocumentWindow
106 DeviceSelectorWindow (DeviceManager &dev_manager);
107 void closeButtonPressed ()
override;
110 DeviceManager &dev_manager_;
114 XmlStateGetter state_getter_;
115 XmlStateSetter state_setter_;
116 std::unique_ptr<DeviceSelectorWindow> device_selector_window_;
117 DeviceChangeListener device_change_listener_{ *
this };