From dc8951776f418452138d3c9023d3df8a87804efb Mon Sep 17 00:00:00 2001 From: Hane Date: Tue, 30 Apr 2024 23:40:52 +0200 Subject: [PATCH] wip: session meter --- src/back/backlasses.cpp | 5 +++++ src/back/backsessionclasses.cpp | 14 +++++++++++++- src/back/backsessionclasses.h | 2 ++ src/cont/contsessionclasses.cpp | 4 ++++ src/cont/contsessionclasses.h | 1 + src/qt/qtclasses.cpp | 7 ++++--- src/qt/qtclasses.h | 2 +- 7 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/back/backlasses.cpp b/src/back/backlasses.cpp index ced20f3..f5b4fa7 100644 --- a/src/back/backlasses.cpp +++ b/src/back/backlasses.cpp @@ -294,6 +294,11 @@ void Endpoint::activateEndpointSessions() { for (int i = 0; i < sessionCount; i++) { IAudioSessionControl* sessionControlTmp; sessionEnumerator->GetSession(i, (IAudioSessionControl**)&sessionControlTmp); + /*todo: borrar when donezo + * float test2; + * IAudioMeterInformation* ttmp = (IAudioMeterInformation*)sessionControlTmp; + * ttmp->GetPeakValue(&test2); + */ //todo:: asegurar lo del dynamic_cast IAudioSessionControl2* sessionControl; sessionControlTmp->QueryInterface(__uuidof(IAudioSessionControl2), (void**)&sessionControl); diff --git a/src/back/backsessionclasses.cpp b/src/back/backsessionclasses.cpp index 21e7959..fd33728 100644 --- a/src/back/backsessionclasses.cpp +++ b/src/back/backsessionclasses.cpp @@ -100,7 +100,11 @@ Session::Session(Endpoint* ep, IAudioSessionControl2* sessionControl, size_t idx this->ep = ep; this->sessionControl = sessionControl; this->idx = idx; - + //https://matthewvaneerde.wordpress.com/2012/06/08/getting-audio-peak-meter-values-for-all-active-audio-sessions/ + if (FAILED(sessionControl->QueryInterface(__uuidof(IAudioMeterInformation), (void**)&meterInformation))) { log_wdebugcpp(L"sPeakbros......"); }; + //meterInformation = (IAudioMeterInformation*)sessionControl; + + AudioSessionState msState; sessionControl->GetState(&msState); switch (msState) { @@ -142,6 +146,13 @@ float Session::getVolume(int channel){ return volume; } +float Session::getPeakVolume() { + float peakVol; + if(meterInformation) meterInformation->GetPeakValue(&peakVol); + else return 0; + return peakVol; +} + /* * uint32_t Endpoint::getChannelCount(){ * return (uint32_t)channelCount; @@ -283,6 +294,7 @@ void Session::removeStateCallback(SessionStateCallback *ssc){ } Session::~Session() { + meterInformation->Release(); sessionControl->Release(); sessionVolume->Release(); } diff --git a/src/back/backsessionclasses.h b/src/back/backsessionclasses.h index 421f514..2b5db99 100644 --- a/src/back/backsessionclasses.h +++ b/src/back/backsessionclasses.h @@ -33,6 +33,7 @@ class Session { Session(Endpoint* ep, IAudioSessionControl2* sessionControl) : Session(ep, sessionControl, SIZE_MAX) {}; void setVolume(NGuid guid, int channel, float volume); float getVolume(int channel); + float getPeakVolume(); void setMute(NGuid guid, bool muted); bool getMute(); SessionState getState(); @@ -51,6 +52,7 @@ class Session { SessionState sessionState; Endpoint* ep; IAudioSessionControl2* sessionControl = nullptr; + IAudioMeterInformation* meterInformation = nullptr; ISimpleAudioVolume* sessionVolume = nullptr; size_t idx; }; diff --git a/src/cont/contsessionclasses.cpp b/src/cont/contsessionclasses.cpp index 085527e..b63631e 100644 --- a/src/cont/contsessionclasses.cpp +++ b/src/cont/contsessionclasses.cpp @@ -36,6 +36,10 @@ void SessionHandler::setName(std::wstring newName){ session->setName(newName); } +float SessionHandler::getPeakVolume(){ + return session->getPeakVolume(); +} + bool SessionHandler::getMute(){ return session->getMute(); } diff --git a/src/cont/contsessionclasses.h b/src/cont/contsessionclasses.h index 8a93164..488d3ea 100644 --- a/src/cont/contsessionclasses.h +++ b/src/cont/contsessionclasses.h @@ -29,6 +29,7 @@ class SessionHandler { void setState(SessionState state); uint64_t getFrontIndex(); std::wstring getName(); + float getPeakVolume(); void setName(std::wstring newName); void reviseSessionShowing(SessionState state); SessionVolumeInfo* getVolumeInfo(); diff --git a/src/qt/qtclasses.cpp b/src/qt/qtclasses.cpp index c6faba8..4cfbcb1 100644 --- a/src/qt/qtclasses.cpp +++ b/src/qt/qtclasses.cpp @@ -200,7 +200,7 @@ SessionWidget::SessionWidget(uint64_t idx, SessionHandler* sh, QWidget *parent) muteButton = new QCheckBox(this); mainLabel = new QLabel(QString::fromStdWString(sh->getName()), this); - mainSlider = new QSlider(Qt::Horizontal, this); + mainSlider = new MeterSlider(Qt::Horizontal, this); //mainLabel->setMaximumWidth(150 /*1/16ish 1080p*/); //mainLabel->setMinimumWidth(150 /*1/16ish 1080p*/); @@ -248,9 +248,10 @@ SessionWidget::SessionWidget(uint64_t idx, SessionHandler* sh, QWidget *parent) mainSlider->blockSignals(true); muteButton->blockSignals(true); mainSlider->setValue((int)((sh->getVolumeInfo()->mainVolume + roundingFactor) * 100)); + mainSlider->setPeakValue(sh->getPeakVolume()); + mainSlider->update(); muteButton->setCheckState((sh->getVolumeInfo()->muted == false ? Qt::Unchecked : Qt::Checked)); muteButton->setText(sh->getVolumeInfo()->muted ? STRING_UNMUTE : STRING_MUTE); - //memcpy(osh->callbackInfo[idx]->caller, osh->getGuid(), sizeof(NGuid)); //TODO: el default = objcopy frees? @@ -259,7 +260,7 @@ SessionWidget::SessionWidget(uint64_t idx, SessionHandler* sh, QWidget *parent) mainSlider->blockSignals(false); muteButton->blockSignals(false); }); - volumePoller->start(10); + volumePoller->start(2); } void SessionWidget::calculateSize(uint64_t width, uint64_t height) { diff --git a/src/qt/qtclasses.h b/src/qt/qtclasses.h index 3441442..c4eb958 100644 --- a/src/qt/qtclasses.h +++ b/src/qt/qtclasses.h @@ -112,7 +112,7 @@ public slots: private: QLabel *mainLabel = nullptr; - QSlider *mainSlider = nullptr; + MeterSlider *mainSlider = nullptr; uint64_t idx; QHBoxLayout *widgetLayout = nullptr; QCheckBox *muteButton = nullptr;