mirror of
https://github.com/badaix/snapcast.git
synced 2025-05-17 02:56:16 +02:00
Fix resetting hardware mixer volume
This commit is contained in:
parent
fa7340a9bc
commit
622c283d78
4 changed files with 21 additions and 25 deletions
|
@ -236,10 +236,10 @@ void Controller::getNextMessage()
|
|||
player_->start();
|
||||
// Don't change the initial hardware mixer volume on the user's device.
|
||||
// The player class will send the device's volume to the server instead
|
||||
if (settings_.player.mixer.mode != ClientSettings::Mixer::Mode::hardware)
|
||||
{
|
||||
// if (settings_.player.mixer.mode != ClientSettings::Mixer::Mode::hardware)
|
||||
// {
|
||||
player_->setVolume(serverSettings_->getVolume() / 100., serverSettings_->isMuted());
|
||||
}
|
||||
// }
|
||||
}
|
||||
else if (response->type == message_type::kStreamTags)
|
||||
{
|
||||
|
|
|
@ -209,19 +209,17 @@ void AlsaPlayer::waitForEvent()
|
|||
waitForEvent();
|
||||
return;
|
||||
}
|
||||
// Sometimes the old volume is reported after this event has been raised.
|
||||
// Sometimes the old volume is reported by getHardwareVolume after this event has been raised.
|
||||
// As workaround we defer getting the volume by 20ms.
|
||||
timer_.cancel();
|
||||
timer_.expires_after(20ms);
|
||||
timer_.async_wait([this](const boost::system::error_code& ec) {
|
||||
if (!ec)
|
||||
{
|
||||
double volume;
|
||||
bool muted;
|
||||
if (getHardwareVolume(volume, muted))
|
||||
if (getHardwareVolume(volume_, muted_))
|
||||
{
|
||||
LOG(DEBUG, LOG_TAG) << "Volume: " << volume << ", muted: " << muted << "\n";
|
||||
notifyVolumeChange(volume, muted);
|
||||
LOG(DEBUG, LOG_TAG) << "Volume changed: " << volume_ << ", muted: " << muted_ << "\n";
|
||||
notifyVolumeChange(volume_, muted_);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -110,16 +110,14 @@ void Player::start()
|
|||
// If hardware mixer is used, send the initial volume to the server, because this is
|
||||
// the volume that is configured by the user on his local device, so we shouldn't change it
|
||||
// on client start up
|
||||
if (settings_.mixer.mode == ClientSettings::Mixer::Mode::hardware)
|
||||
{
|
||||
double volume;
|
||||
bool muted;
|
||||
if (getHardwareVolume(volume, muted))
|
||||
{
|
||||
LOG(DEBUG, LOG_TAG) << "Volume: " << volume << ", muted: " << muted << "\n";
|
||||
notifyVolumeChange(volume, muted);
|
||||
}
|
||||
}
|
||||
// if (settings_.mixer.mode == ClientSettings::Mixer::Mode::hardware)
|
||||
// {
|
||||
// if (getHardwareVolume(volume_, muted_))
|
||||
// {
|
||||
// LOG(DEBUG, LOG_TAG) << "Volume: " << volume_ << ", muted: " << muted_ << "\n";
|
||||
// notifyVolumeChange(volume_, muted_);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
@ -205,7 +203,7 @@ void Player::setVolume(double volume, bool mute)
|
|||
muted_ = mute;
|
||||
if (settings_.mixer.mode == ClientSettings::Mixer::Mode::hardware)
|
||||
{
|
||||
setHardwareVolume(volume, muted_);
|
||||
setHardwareVolume(volume, mute);
|
||||
}
|
||||
else if (settings_.mixer.mode == ClientSettings::Mixer::Mode::software)
|
||||
{
|
||||
|
|
|
@ -183,9 +183,9 @@ void PulsePlayer::triggerVolumeUpdate()
|
|||
if (info)
|
||||
{
|
||||
auto self = static_cast<PulsePlayer*>(userdata);
|
||||
auto volume = (double)pa_cvolume_avg(&(info->volume)) / (double)PA_VOLUME_NORM;
|
||||
bool muted = (info->mute != 0);
|
||||
LOG(DEBUG, LOG_TAG) << "volume changed: " << volume << ", muted: " << muted << "\n";
|
||||
self->volume_ = (double)pa_cvolume_avg(&(info->volume)) / (double)PA_VOLUME_NORM;
|
||||
self->muted_ = (info->mute != 0);
|
||||
LOG(DEBUG, LOG_TAG) << "Volume changed: " << self->volume_ << ", muted: " << self->muted_ << "\n";
|
||||
|
||||
auto now = std::chrono::steady_clock::now();
|
||||
if (now - self->last_change_ < 1s)
|
||||
|
@ -195,7 +195,7 @@ void PulsePlayer::triggerVolumeUpdate()
|
|||
<< " ms => ignoring volume change\n";
|
||||
return;
|
||||
}
|
||||
self->notifyVolumeChange(volume, muted);
|
||||
self->notifyVolumeChange(self->volume_, self->muted_);
|
||||
}
|
||||
},
|
||||
this);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue