|
- package audio
-
- // Sample represents a normalized audio sample in the range [-1, +1].
- type Sample float64
-
- const (
- SampleMin Sample = -1.0
- SampleMax Sample = 1.0
- )
-
- // Frame is a stereo pair of audio samples.
- type Frame struct {
- L Sample
- R Sample
- }
-
- // NewFrame creates a Frame from the provided left/right samples.
- func NewFrame(l, r Sample) Frame {
- return Frame{L: l, R: r}
- }
-
- // Mono returns the (L+R)/2 signal used in MPX generation.
- func (f Frame) Mono() Sample {
- return (f.L + f.R) / 2
- }
-
- // Difference returns the (L-R)/2 signal used for the stereo subcarrier.
- func (f Frame) Difference() Sample {
- return (f.L - f.R) / 2
- }
-
- // Clamp ensures the sample stays within the legal range.
- func (s Sample) Clamp() Sample {
- if s > SampleMax {
- return SampleMax
- }
- if s < SampleMin {
- return SampleMin
- }
- return s
- }
-
- // Scale adjusts the sample by a gain factor while keeping the result clamped.
- func (s Sample) Scale(gain float64) Sample {
- return Sample(float64(s) * gain).Clamp()
- }
|