@@ -151,6 +151,9 @@ void QobuzStream::runTask() {
151151 } else if (cfg_.XsessionId .expiresAt <= timesync::now_ms () + 60000 ) {
152152 startSession ();
153153 }
154+ if (cfg_.volume != audioControl_->volume .load ()) {
155+ WSSetRendererVolume ();
156+ }
154157 },
155158 30000 );
156159 token_hb_->start ();
@@ -637,6 +640,8 @@ void QobuzStream::WSDecodeMessage(_qconnect_QConnectMessage* data) {
637640 if (!data->has_srvrCtrlVolumeChanged )
638641 break ;
639642 if (data->srvrCtrlVolumeChanged .rendererId == cfg_.rendererId ) {
643+ if (!player_->isRunning ()) break ;
644+ cfg_.volume = data->srvrCtrlVolumeChanged .volume ;
640645 player_->feed_ ->feedCommand (AudioControl::VOLUME_LINEAR ,
641646 data->srvrCtrlVolumeChanged .volume ,
642647 std::optional<uint32_t >(100 ) // max volume
@@ -648,6 +653,7 @@ void QobuzStream::WSDecodeMessage(_qconnect_QConnectMessage* data) {
648653 if (!data->has_srvrRndrSetVolume )
649654 break ;
650655 if (player_->isRunning ()) {
656+ cfg_.volume = data->srvrRndrSetVolume .volume ;
651657 player_->feed_ ->feedCommand (AudioControl::VOLUME_LINEAR ,
652658 data->srvrRndrSetVolume .volume ,
653659 std::optional<uint32_t >(100 ) // max volume
@@ -797,6 +803,7 @@ void QobuzStream::WSSetRendererVolume() {
797803 msg.has_messageType = true ;
798804 msg.has_rndrSrvrVolumeChanged = true ;
799805 msg.rndrSrvrVolumeChanged .has_volume = true ;
800- msg.rndrSrvrVolumeChanged .volume = player_->audio_ ->volume .load ();
806+ msg.rndrSrvrVolumeChanged .volume = audioControl_->volume .load ();
807+ cfg_.volume = audioControl_->volume .load ();
801808 this ->encodeBatches (&msg, 1 );
802809}
0 commit comments