This repository has been archived by the owner on Jan 1, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfilters.go
59 lines (48 loc) · 1.66 KB
/
filters.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package hugipipes_sample
import (
"github.com/mattetti/audio"
)
import "github.com/mattetti/audio/transforms/filters"
func (s *Signal) LowPassFilter(cutOffFreq float64, order int) (*Signal, error) {
if order < 1 {
order = 1
}
bufferL := audio.NewPCMFloatBuffer(s.GetSamples(Left), &audio.Format{SampleRate: int(s.SampleRate)})
bufferR := audio.NewPCMFloatBuffer(s.GetSamples(Right), &audio.Format{SampleRate: int(s.SampleRate)})
for i := 0; i < order; i++ {
if err := filters.LowPass(bufferL, cutOffFreq); err != nil {
return nil, err
}
if err := filters.LowPass(bufferR, cutOffFreq); err != nil {
return nil, err
}
}
return newSignal(s.SampleRate, s.Wav, float64(len(bufferL.Floats)), bufferL.Floats, bufferR.Floats, s.times), nil
}
func (s *Signal) HighPassFilter(cutOffFreq float64, order int) (*Signal, error) {
if order < 1 {
order = 1
}
bufferL := audio.NewPCMFloatBuffer(s.GetSamples(Left), &audio.Format{SampleRate: int(s.SampleRate)})
bufferR := audio.NewPCMFloatBuffer(s.GetSamples(Right), &audio.Format{SampleRate: int(s.SampleRate)})
for i := 0; i < order; i++ {
if err := filters.HighPass(bufferL, cutOffFreq); err != nil {
return nil, err
}
if err := filters.HighPass(bufferR, cutOffFreq); err != nil {
return nil, err
}
}
return newSignal(s.SampleRate, s.Wav, float64(len(bufferL.Floats)), bufferL.Floats, bufferR.Floats, s.times), nil
}
func (s *Signal) BandPassFilter(lower, upper float64, order int) (*Signal, error) {
signal1, err := s.LowPassFilter(upper, order)
if err != nil {
return nil, err
}
signal2, err := signal1.HighPassFilter(lower, order)
if err != nil {
return nil, err
}
return signal2, nil
}