add ISO 15 equalizer implementation
This commit is contained in:
@@ -1,10 +1,62 @@
|
|||||||
package player
|
package player
|
||||||
|
|
||||||
|
// Equalizer implementations based on the ffmpeg 'equalizer' filter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
"strings"
|
"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
|
type WidthType int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ type Player struct {
|
|||||||
curPlaylistPos int64
|
curPlaylistPos int64
|
||||||
prePausedState State
|
prePausedState State
|
||||||
clientName string
|
clientName string
|
||||||
|
equalizer Equalizer
|
||||||
|
|
||||||
bgCancel context.CancelFunc
|
bgCancel context.CancelFunc
|
||||||
|
|
||||||
@@ -501,6 +502,14 @@ func (p *Player) SetAudioDevice(deviceName string) error {
|
|||||||
return p.mpv.SetPropertyString("audio-device", deviceName)
|
return p.mpv.SetPropertyString("audio-device", deviceName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Player) SetEqualizer(eq Equalizer) error {
|
||||||
|
p.equalizer = eq
|
||||||
|
if eq == nil || !eq.IsEnabled() {
|
||||||
|
return p.mpv.SetPropertyString("af", "")
|
||||||
|
}
|
||||||
|
return p.mpv.SetPropertyString("af", eq.Curve().String())
|
||||||
|
}
|
||||||
|
|
||||||
func (p *Player) GetMediaInfo() (MediaInfo, error) {
|
func (p *Player) GetMediaInfo() (MediaInfo, error) {
|
||||||
var info MediaInfo
|
var info MediaInfo
|
||||||
n, err := p.mpv.GetProperty("audio-params", mpv.FORMAT_NODE)
|
n, err := p.mpv.GetProperty("audio-params", mpv.FORMAT_NODE)
|
||||||
|
|||||||
Reference in New Issue
Block a user