#pragma once #include #include #include #include #include namespace rack { namespace app { struct AudioDriverChoice : LedDisplayChoice { audio::Port* port; void onAction(const ActionEvent& e) override; void step() override; }; struct AudioDeviceChoice : LedDisplayChoice { audio::Port* port; void onAction(const ActionEvent& e) override; void step() override; }; struct AudioSampleRateChoice : LedDisplayChoice { audio::Port* port; void onAction(const ActionEvent& e) override; void step() override; }; struct AudioBlockSizeChoice : LedDisplayChoice { audio::Port* port; void onAction(const ActionEvent& e) override; void step() override; }; struct AudioDeviceMenuChoice : AudioDeviceChoice { void onAction(const ActionEvent& e) override; }; /** Designed for Audio-8 and Audio-16 module. */ struct AudioDisplay : LedDisplay { AudioDriverChoice* driverChoice; LedDisplaySeparator* driverSeparator; AudioDeviceChoice* deviceChoice; LedDisplaySeparator* deviceSeparator; AudioSampleRateChoice* sampleRateChoice; LedDisplaySeparator* sampleRateSeparator; AudioBlockSizeChoice* bufferSizeChoice; void setAudioPort(audio::Port* port); }; /** A virtual audio port graphic that displays an audio menu when clicked. */ struct AudioButton : SvgButton { audio::Port* port; void setAudioPort(audio::Port* port); void onAction(const ActionEvent& e) override; }; /** Appends menu items to the given menu with driver, device, etc. Useful alternative to putting an AudioDisplay on your module's panel. */ void appendAudioMenu(ui::Menu* menu, audio::Port* port); } // namespace app } // namespace rack