#include "sounddialog.h" #include "ui_sounddialog.h" #include int SoundDialog::m_value = 0; #include SoundDialog::SoundDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SoundDialog) { ui->setupUi(this); this->setWindowFlags(Qt::FramelessWindowHint); //设置无边框 setAttribute(Qt::WA_TranslucentBackground,true); //设置透明 ui->cancel_Btn->setVisible(false); this->setRange(0,100); soundController = new SoundController(this); } SoundDialog::~SoundDialog() { delete ui; // if(m_player) delete m_player; // if(m_audioOutput) delete m_audioOutput; } void SoundDialog::setTitleAndUnit(QString title, QString unit) { ui->title_Label->setText(title); //ui->unit_Label->setText(unit); } int SoundDialog::getValue() { return m_value; } void SoundDialog::setValue(int value) { ui->slider->setValue(value); ui->value_Label->setText(QString::number(value)); // qDebug()<<"设置滑块和方块数字:"<slider->value(); } void SoundDialog::setRange(int min, int max) { ui->slider->setRange(min,max); } void SoundDialog::on_cancel_Btn_clicked() { this->close(); } void SoundDialog::on_slider_sliderMoved(int position) { //qDebug() <<"mode的值:"<value_Label->setText(QString::number(position)); SetSystemVolume(position); } void SoundDialog::on_confirm_Btn_clicked() { m_value = ui->value_Label->text().toInt(); if(m_value == 0) SetSystemVolume(-2);//设置禁音 else { SetSystemVolume(-1); //取消禁音 SetSystemVolume(m_value -1); } this->close(); } void SoundDialog::on_minus_Btn_clicked() { int value = ui->slider->value(); --value; if(value < 0) return; ui->slider->setValue(value); ui->value_Label->setText(QString::number(value)); SetSystemVolume(value); // m_player->setVolume(value); // qDebug()<slider->value(); ++value; if(value > 100) return; ui->slider->setValue(value); ui->value_Label->setText(QString::number(value)); SetSystemVolume(value); // m_player->setVolume(value); // qDebug()<value_Label->setText(QString::number(value)); //SetSystemVolume(value); //SetSystemVolume2(value); //soundController->setSystemVolume(value); // m_player->setVolume(value); //qDebug()<<"m_value"<type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: QWidget::changeEvent(event); break; } qDebug()<<"m_value、当前音量"<setValue(m_value); // testFunction(); } void SoundDialog::SetSystemVolume(int value) { HRESULT hr; IMMDeviceEnumerator* pDeviceEnumerator=0; IMMDevice* pDevice=0; IAudioEndpointVolume* pAudioEndpointVolume=0; IAudioClient* pAudioClient=0; hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),NULL,CLSCTX_ALL,__uuidof(IMMDeviceEnumerator),(void**)&pDeviceEnumerator); hr = pDeviceEnumerator->GetDefaultAudioEndpoint(eRender,eMultimedia,&pDevice); hr = pDevice->Activate(__uuidof(IAudioEndpointVolume),CLSCTX_ALL,NULL,(void**)&pAudioEndpointVolume); hr = pDevice->Activate(__uuidof(IAudioClient),CLSCTX_ALL,NULL,(void**)&pAudioClient); if(value == -1) pAudioEndpointVolume->SetMute(FALSE,NULL); /*取消静音*/ else if(value == -2) pAudioEndpointVolume->SetMute(TRUE,NULL); /*静音*/ else{ value = (value > 100) ? 100 : (value < 0) ? 0: value; /*将音量限制在0-100内*/ float fVolume; fVolume = value/100.0f; hr = pAudioEndpointVolume->SetMasterVolumeLevelScalar(fVolume,&GUID_NULL); } pAudioClient->Release(); pAudioEndpointVolume->Release(); pDevice->Release(); pDeviceEnumerator->Release(); } int SoundDialog::GetCurrentVolume() { HRESULT hr; IMMDeviceEnumerator* pDeviceEnumerator=0; IMMDevice* pDevice=0; IAudioEndpointVolume* pAudioEndpointVolume=0; IAudioClient* pAudioClient=0; hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),NULL,CLSCTX_ALL,__uuidof(IMMDeviceEnumerator),(void**)&pDeviceEnumerator); hr = pDeviceEnumerator->GetDefaultAudioEndpoint(eRender,eMultimedia,&pDevice); hr = pDevice->Activate(__uuidof(IAudioEndpointVolume),CLSCTX_ALL,NULL,(void**)&pAudioEndpointVolume); hr = pDevice->Activate(__uuidof(IAudioClient),CLSCTX_ALL,NULL,(void**)&pAudioClient); float fVolume; hr = pAudioEndpointVolume->GetMasterVolumeLevelScalar(&fVolume); pAudioClient->Release(); pAudioEndpointVolume->Release(); pDevice->Release(); pDeviceEnumerator->Release(); int intVolume = fVolume*100+1; if(intVolume>100) { intVolume =100; } return intVolume; } int SoundDialog::GetSystemVolume2() { HRESULT hr; int volume = 0; IMMDeviceEnumerator *deviceEnumerator = NULL; IMMDevice *device = NULL; IAudioEndpointVolume *endpointVolume = NULL; // Initialize COM. hr = CoInitialize(NULL); if (FAILED(hr)) { qDebug() << "Failed to initialize COM"; return -1; } // Create the device enumerator. hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnumerator); if (FAILED(hr)) { qDebug() << "Failed to create the device enumerator"; CoUninitialize(); return -1; } // Get the default audio endpoint. hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &device); if (FAILED(hr)) { qDebug() << "Failed to get the default audio endpoint"; deviceEnumerator->Release(); CoUninitialize(); return -1; } // Activate the endpoint volume interface. hr = device->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void**)&endpointVolume); if (FAILED(hr)) { qDebug() << "Failed to activate the endpoint volume interface"; device->Release(); deviceEnumerator->Release(); CoUninitialize(); return -1; } // Get the current volume. float fVolume; hr = endpointVolume->GetMasterVolumeLevelScalar(&fVolume); if (FAILED(hr)) { qDebug() << "Failed to get the current volume"; endpointVolume->Release(); device->Release(); deviceEnumerator->Release(); CoUninitialize(); return -1; } // Convert to an integer percentage. volume = static_cast(fVolume * 100); // Clean up. endpointVolume->Release(); device->Release(); deviceEnumerator->Release(); CoUninitialize(); return volume; } bool SoundDialog::SetSystemVolume2(int volume) { HRESULT hr; IMMDeviceEnumerator *deviceEnumerator = NULL; IMMDevice *device = NULL; IAudioEndpointVolume *endpointVolume = NULL; // Initialize COM. hr = CoInitialize(NULL); if (FAILED(hr)) { qDebug() << "Failed to initialize COM"; return false; } // Create the device enumerator. hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnumerator); if (FAILED(hr)) { qDebug() << "Failed to create the device enumerator"; CoUninitialize(); return false; } // Get the default audio endpoint. hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &device); if (FAILED(hr)) { qDebug() << "Failed to get the default audio endpoint"; deviceEnumerator->Release(); CoUninitialize(); return false; } // Activate the endpoint volume interface. hr = device->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void**)&endpointVolume); if (FAILED(hr)) { qDebug() << "Failed to activate the endpoint volume interface"; device->Release(); deviceEnumerator->Release(); CoUninitialize(); return false; } // Set the master volume level scalar. float fVolume = static_cast(volume) / 100.0f; hr = endpointVolume->SetMasterVolumeLevelScalar(fVolume, NULL); if (FAILED(hr)) { qDebug() << "Failed to set the volume"; endpointVolume->Release(); device->Release(); deviceEnumerator->Release(); CoUninitialize(); return false; } // Clean up. endpointVolume->Release(); device->Release(); deviceEnumerator->Release(); CoUninitialize(); return true; }