Add volume changing logic
This commit is contained in:
@@ -247,6 +247,16 @@ func SetAllSinkVolumes(level float64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ConvertVolume converts a desired volume percentage (0%, 25%, 33%, 90%, etc) to
|
||||
// the float64 value needed to pass to SetAllSinkVolumes 0..1.0
|
||||
// Percentages should be passed as integers. 25% -> 25
|
||||
func ConvertVolume(volPerc int) float64 {
|
||||
if volPerc == 0 {
|
||||
return 0.0
|
||||
}
|
||||
return float64(volPerc) / 100.0
|
||||
}
|
||||
|
||||
// parseSinks parses the output of `wpctl status` and extracts audio sinks.
|
||||
func parseSinks(data []byte) ([]Sink, error) {
|
||||
var sinks []Sink
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package mixer_test
|
||||
|
||||
import (
|
||||
"math"
|
||||
"testing"
|
||||
|
||||
"rhemawavetech.com/rhemawave/internal/mixer"
|
||||
)
|
||||
|
||||
func TestConvertVolume(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input int
|
||||
expected float64
|
||||
}{
|
||||
{"0 percent", 0, 0.0},
|
||||
{"25 percent", 25, 0.25},
|
||||
{"33 percent", 33, 0.33},
|
||||
{"50 percent", 50, 0.50},
|
||||
{"90 percent", 90, 0.90},
|
||||
{"100 percent", 100, 1.0},
|
||||
}
|
||||
|
||||
const epsilon = 1e-9
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := mixer.ConvertVolume(tt.input)
|
||||
if math.Abs(got-tt.expected) > epsilon {
|
||||
t.Errorf("ConvertVolume(%d) = %v, want %v", tt.input, got, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user