發布 | 音量控制器

  • 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的事件通知去更新音量顯示,這樣會高效點。