Skip to content

Commit 95dc9f8

Browse files
authored
Merge pull request #1009 from JasonLG1979/fix-fixed
Fix fixed volume with hardware mixer
2 parents fc1e745 + e4deb5d commit 95dc9f8

2 files changed

Lines changed: 20 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
### Added
1313

1414
### Fixed
15+
- [playback] `alsamixer`: make `--volume-ctrl fixed` work as expected when combined with `--mixer alsa`
1516

1617
### Removed
1718

playback/src/mixer/alsamixer.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,23 +104,33 @@ impl Mixer for AlsaMixer {
104104

105105
let min_db = min_millibel.to_db() as f64;
106106
let max_db = max_millibel.to_db() as f64;
107-
let mut db_range = f64::abs(max_db - min_db);
107+
let reported_db_range = f64::abs(max_db - min_db);
108108

109109
// Synchronize the volume control dB range with the mixer control,
110110
// unless it was already set with a command line option.
111-
if !config.volume_ctrl.range_ok() {
112-
if db_range > 100.0 {
111+
let db_range = if config.volume_ctrl.range_ok() {
112+
let db_range_override = config.volume_ctrl.db_range();
113+
if db_range_override.is_normal() {
114+
db_range_override
115+
} else {
116+
reported_db_range
117+
}
118+
} else {
119+
config.volume_ctrl.set_db_range(reported_db_range);
120+
reported_db_range
121+
};
122+
123+
if reported_db_range == db_range {
124+
debug!("Alsa dB volume range was reported as {}", reported_db_range);
125+
if reported_db_range > 100.0 {
113126
debug!("Alsa mixer reported dB range > 100, which is suspect");
114-
warn!("Please manually set `--volume-range` if this is incorrect");
127+
debug!("Please manually set `--volume-range` if this is incorrect");
115128
}
116-
config.volume_ctrl.set_db_range(db_range);
117129
} else {
118-
let db_range_override = config.volume_ctrl.db_range();
119130
debug!(
120-
"Alsa dB volume range was detected as {} but overridden as {}",
121-
db_range, db_range_override
131+
"Alsa dB volume range was reported as {} but overridden to {}",
132+
reported_db_range, db_range
122133
);
123-
db_range = db_range_override;
124134
}
125135

126136
// For hardware controls with a small range (24 dB or less),

0 commit comments

Comments
 (0)