#pragma once #include #include #include #include #include #include #include #include class DbManager; class AudioRecorder; class AudioCompressor; class AudioDeviceSettingsPage : public QWidget { Q_OBJECT public: explicit AudioDeviceSettingsPage(DbManager* db, QWidget* parent = nullptr); ~AudioDeviceSettingsPage() override; void loadFromDb(); void applyAndSave(); private slots: void onTestMicToggled(); void onTestSpeaker(); void onLevelTimer(); private: void stopMicTest(); void buildCompressorUI(class QVBoxLayout* layout); void updateCompressorLabels(); DbManager* m_db; AudioRecorder* m_testRecorder = nullptr; QComboBox* m_outputCombo; QComboBox* m_inputCombo; QComboBox* m_codecPresetCombo; QProgressBar* m_micLevelBar; QPushButton* m_testMicBtn; QPushButton* m_testSpeakerBtn; QTimer* m_levelTimer; bool m_micTestActive = false; int m_savedOutputIdx = -1; int m_savedInputIdx = -1; int m_savedCodecPreset = 1; QCheckBox* m_compressorEnabledCb; QSlider* m_compressorMaxGainSlider; QSlider* m_compressorLookbackSlider; QSlider* m_compressorLookaheadSlider; QSlider* m_compressorRiseRateSlider; QSlider* m_compressorTargetLevelSlider; QLabel* m_compressorMaxGainLabel; QLabel* m_compressorLookbackLabel; QLabel* m_compressorLookaheadLabel; QLabel* m_compressorRiseRateLabel; QLabel* m_compressorTargetLevelLabel; int m_savedCompressorEnabled = 0; int m_savedCompressorMaxGainDb = 30; int m_savedCompressorLookbackMs = 200; int m_savedCompressorLookaheadMs = 100; int m_savedCompressorRiseRateTenths = 20; int m_savedCompressorTargetLevelDb = -12; };