#pragma once #include #include #include #include #include #include #include #include class DbManager; class AudioRecorder; class AudioDeviceSettingsPage : public QWidget { Q_OBJECT public: explicit AudioDeviceSettingsPage(DbManager* db, AudioRecorder* recorder, QWidget* parent = nullptr); ~AudioDeviceSettingsPage() override; void setConfigPath(const QString& path) { m_configPath = path; } 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_recorder = nullptr; AudioRecorder* m_testRecorder = nullptr; QString m_configPath; 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_compressorRiseRateSlider; QLabel* m_compressorMaxGainLabel; QLabel* m_compressorRiseRateLabel; int m_savedCompressorEnabled = 0; int m_savedCompressorMaxGainDb = 25; int m_savedCompressorRiseRate = 10; QComboBox* m_radioOpusModeCombo; QComboBox* m_radioOpusBitrateCombo; QCheckBox* m_radioCaptureStereoCb; int m_savedRadioOpusMode = 0; int m_savedRadioOpusBitrate = 32; int m_savedRadioCaptureStereo = 0; };