64 public juce::AudioDeviceManager,
70 Q_DISABLE_COPY_MOVE (DeviceManager)
72 QVector<zrythm::gui::backend::AudioInputInfo> availableAudioInputs READ
73 availableAudioInputs NOTIFY availableAudioInputsChanged)
75 QVector<zrythm::gui::backend::MidiInputInfo> availableMidiInputs READ
76 availableMidiInputs NOTIFY availableMidiInputsChanged)
79 using XmlStateGetter = std::function<std::unique_ptr<juce::XmlElement> ()>;
80 using XmlStateSetter = std::function<void (
const juce::XmlElement &)>;
82 DeviceManager (XmlStateGetter state_getter, XmlStateSetter state_setter);
84 ~DeviceManager ()
override;
102 int max_input_channels,
103 int max_output_channels,
104 bool fallback_to_default);
109 void createAudioDeviceTypes (
110 juce::OwnedArray<juce::AudioIODeviceType> &types)
override;
112 Q_INVOKABLE
void showDeviceSelector ();
114 QVector<AudioInputInfo> availableAudioInputs ()
const;
115 Q_SIGNAL
void availableAudioInputsChanged ();
117 QVector<MidiInputInfo> availableMidiInputs ()
const;
118 Q_SIGNAL
void availableMidiInputsChanged ();
130 friend struct MidiImpl;
132 void reconcile_midi_buffers ();
134 class DeviceChangeListener final :
public juce::ChangeListener
137 explicit DeviceChangeListener (DeviceManager &dev_manager)
138 : dev_manager_ (dev_manager)
143 void changeListenerCallback (juce::ChangeBroadcaster *)
override
145 Q_EMIT dev_manager_.availableAudioInputsChanged ();
146 Q_EMIT dev_manager_.availableMidiInputsChanged ();
147 dev_manager_.reconcile_midi_buffers ();
150 DeviceManager &dev_manager_;
153 class DeviceSelectorWindow :
public juce::DocumentWindow
156 DeviceSelectorWindow (DeviceManager &dev_manager);
157 void closeButtonPressed ()
override;
160 DeviceManager &dev_manager_;
164 XmlStateGetter state_getter_;
165 XmlStateSetter state_setter_;
166 std::unique_ptr<DeviceSelectorWindow> device_selector_window_;
167 DeviceChangeListener device_change_listener_{ *
this };
168 std::unique_ptr<MidiImpl> midi_impl_;