add ISO 15 equalizer implementation

This commit is contained in:
Drew Weymouth
2023-06-22 18:36:06 -07:00
parent 0e590ca8f3
commit ab22f871d2
2 changed files with 61 additions and 0 deletions
+52
View File
@@ -1,10 +1,62 @@
package player
// Equalizer implementations based on the ffmpeg 'equalizer' filter
import (
"fmt"
"math"
"strings"
)
type Equalizer interface {
IsEnabled() bool
Curve() EqualizerCurve
Type() string
// Returns the band frequencies as strings friendly for display
BandFrequencies() []string
}
type ISO15BandEqualizer struct {
Disabled bool
BandGains [15]float64
}
var (
iso15Bands = []string{"25", "40", "63", "100", "160", "250", "400", "630", "1k", "1.6k", "2.5k", "4k", "6.3k", "10k", "16k"}
iso15FMult = math.Pow(2, 2./3)
)
var _ Equalizer = (*ISO15BandEqualizer)(nil)
func (i *ISO15BandEqualizer) IsEnabled() bool {
return !i.Disabled
}
func (i *ISO15BandEqualizer) Curve() EqualizerCurve {
fC := float64(25)
curve := make([]EqualizerBand, 0, len(i.BandGains))
for _, bandGain := range i.BandGains {
curve = append(curve, EqualizerBand{
Frequency: int(math.Round(fC)),
Width: 2. / 3,
WidthType: WidthTypeOctave,
Gain: bandGain,
})
fC *= iso15FMult
}
return curve
}
func (*ISO15BandEqualizer) BandFrequencies() []string {
ret := make([]string, len(iso15Bands))
copy(ret, iso15Bands)
return ret
}
func (*ISO15BandEqualizer) Type() string {
return "ISO15Band"
}
type WidthType int
const (