57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package player
|
|
|
|
// UserVolume represents volume on a user-facing scale (0-100).
|
|
type UserVolume int
|
|
|
|
// Volume represents volume on an internal scale (-4 to 0).
|
|
type Volume float64
|
|
|
|
// User volume range bounds.
|
|
const (
|
|
MinUserVol UserVolume = 0
|
|
MaxUserVol UserVolume = 100
|
|
DefaultUserVol UserVolume = 50
|
|
)
|
|
|
|
// Internal volume range bounds.
|
|
const (
|
|
MinVol Volume = -5
|
|
MaxVol Volume = 0
|
|
)
|
|
|
|
// ToVolume converts user volume to internal player volume.
|
|
func (oldVol UserVolume) ToVolume() Volume {
|
|
var newVol Volume
|
|
|
|
if oldVol >= MinUserVol && oldVol <= MaxUserVol {
|
|
ratio := Volume(oldVol-MinUserVol) / Volume(MaxUserVol-MinUserVol)
|
|
newVol = ratio*(MaxVol-MinVol) + MinVol
|
|
}
|
|
|
|
return newVol
|
|
}
|
|
|
|
// ToUserVolume converts internal player volume to user volume.
|
|
func (oldVolFloat Volume) ToUserVolume() UserVolume {
|
|
var newVol UserVolume
|
|
|
|
if oldVolFloat >= MinVol && oldVolFloat <= MaxVol {
|
|
ratio := (oldVolFloat - MinVol) / (MaxVol - MinVol)
|
|
newVol = UserVolume(ratio*Volume(MaxUserVol-MinUserVol)) + MinUserVol
|
|
}
|
|
|
|
return newVol
|
|
}
|
|
|
|
func clampVolume(v UserVolume) UserVolume {
|
|
if v > MaxUserVol {
|
|
return MaxUserVol
|
|
}
|
|
|
|
if v < MinUserVol {
|
|
return MinUserVol
|
|
}
|
|
|
|
return v
|
|
}
|