diff --git a/player/equalizer.go b/player/equalizer.go new file mode 100644 index 0000000..8203142 --- /dev/null +++ b/player/equalizer.go @@ -0,0 +1,57 @@ +package player + +import ( + "fmt" + "strings" +) + +type WidthType int + +const ( + WidthTypeHz WidthType = iota + WidthTypeKhz + WidthTypeQ + WidthTypeOctave + WidthTypeSlope +) + +type EqualizerBand struct { + Frequency int + Gain float64 + Width float64 + WidthType WidthType +} + +type EqualizerCurve []EqualizerBand + +func (e EqualizerCurve) String() string { + var sb strings.Builder + for i, band := range e { + if i > 0 { + sb.WriteString(",") + } + sb.WriteString(band.String()) + } + return sb.String() +} + +func (e EqualizerBand) String() string { + return fmt.Sprintf("equalizer=f=%d:g=%0.2f:t=%s:w=%0.2f", + e.Frequency, e.Gain, e.WidthType.String(), e.Width) +} + +func (w WidthType) String() string { + switch w { + case WidthTypeHz: + return "h" + case WidthTypeKhz: + return "k" + case WidthTypeQ: + return "q" + case WidthTypeOctave: + return "o" + case WidthTypeSlope: + return "s" + } + return "x" // not reached +}