發布 | 音量控制器
- 2020 年 2 月 24 日
- 筆記
❝可設置/同步揚聲器與錄音音量。(目前僅支援Windows系統)❞

功能
- 「可設置揚聲器/錄音音量,開關靜音功能」。
部分程式碼
- 音量控制類
VolumeController
對外介面。
class VolumeController {public: explicit VolumeController(); virtual ~VolumeController(); int getSpeakerVolume(); bool setSpeakerVolume(int volumePercent); bool isSpeakerMuted(); bool setSpeakerMuted(bool mute); int getMicVolume(); bool setMicVolume(int volumePercent); bool isMicMuted(); bool setMicMuted(bool mute); private: IAudioEndpointVolume* getEndpointVolume(bool isSpeaker); private: IAudioEndpointVolume *m_speakerEndpointVolume; IAudioEndpointVolume *m_micEndpointVolume; };
- 綁定音量狀態更新的槽函數
onUpdate()
,並設置更新時間為500ms。
connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(onUpdate())); m_updateTimer.start(500);
onUpdate()
槽函數實現。
void onUpdate() { int micVolume = m_volumeController->getMicVolume(); int speakerVolume = m_volumeController->getSpeakerVolume(); ui->horizontalSlider->setValue(micVolume); ui->horizontalSlider_2->setValue(speakerVolume); ui->label_2->setText(QString::fromLocal8Bit("錄音音量:(%1%)").arg(micVolume)); ui->label_3->setText(QString::fromLocal8Bit("揚聲器音量:(%1%)").arg(speakerVolume)); }
- 通過觸發QSlider的槽函數來設置揚聲器或錄音的音量,並會將設置結果輸出。
void on_horizontalSlider_valueChanged(int value) { qDebug() << "Set mic volume: " << value << "; Result: " << m_volumeController->setMicVolume(value); } void on_horizontalSlider_2_valueChanged(int value) { qDebug() << "Set speaker voluem: " << value << "; Result: " << m_volumeController->setSpeakerVolume(value); }
- 目前更新音量狀態變化是使用定時器查詢的方法,後續會使用Windows的事件通知去更新音量顯示,這樣會高效點。