Skip to content

Commit ad0154e

Browse files
committed
feat(qobuz): set volume if changed by ui - fix(qobuz): disconnect
1 parent a40363d commit ad0154e

5 files changed

Lines changed: 12 additions & 6 deletions

File tree

StreamCore32/core/include/AudioControl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class AudioControl {
109109
case CommandType::VOLUME_LOGARITHMIC: {
110110
this->audioController->volume.store(
111111
this->audioSink->to_logarithmic_volume(value));
112-
this->audioSink->feed_command([this, value](uint8_t) {
112+
this->audioSink->feed_command([this](uint8_t) {
113113
this->audioSink->set_volume(this->audioController->volume.load());
114114
});
115115
} break;

StreamCore32/stream/qobuz/include/QobuzPlayer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class QobuzPlayer : public StreamBase {
4242
stopTask();
4343
while (hb_)
4444
BELL_SLEEP_MS(50);
45-
pb_release(qconnect_QueueRendererState_fields, &player_state);
4645
std::scoped_lock lock(isRunningMutex_);
46+
pb_release(qconnect_QueueRendererState_fields, &player_state);
4747
}
4848
void runTask() override;
4949

StreamCore32/stream/qobuz/include/QobuzStream.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class QobuzStream : public bell::Task {
5151
std::string queueSnapshot;
5252
std::string api_base = "https://www.qobuz.com/api.json/0.2";
5353
char queue_uuid[37];
54+
uint8_t volume = 0;
5455
uint32_t expiresAt = 0;
5556
uint64_t rendererId = 0;
5657
WSToken ws_token;

StreamCore32/stream/qobuz/src/QobuzPlayer.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -478,9 +478,7 @@ void QobuzPlayer::runTask() {
478478
retries = 0;
479479
} // outer while
480480
feed_->feedCommand(AudioControl::DISC, 0);
481-
while (hb_)
482-
BELL_SLEEP_MS(100);
483-
isRunning_.store(false);
481+
isRunning_.store(false)
484482
}
485483

486484
void QobuzPlayer::sendPlayerState() {

StreamCore32/stream/qobuz/src/QobuzStream.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)