|
- package stereo
-
- import (
- "github.com/jan/fm-rds-tx/internal/audio"
- "github.com/jan/fm-rds-tx/internal/dsp"
- )
-
- // Components holds the individual MPX components produced by the stereo encoder.
- type Components struct {
- Mono float64 // L+R baseband
- Stereo float64 // L-R baseband on suppressed carrier
- Pilot float64 // 19 kHz pilot tone
- }
-
- // StereoEncoder generates stereo MPX primitives from stereo audio frames.
- type StereoEncoder struct {
- pilot dsp.PilotGenerator
- LevelStereo float64
- }
-
- // NewStereoEncoder creates a StereoEncoder configured for the provided sample rate.
- func NewStereoEncoder(sampleRate float64) StereoEncoder {
- return StereoEncoder{
- pilot: dsp.NewPilotGenerator(sampleRate, 0.1),
- LevelStereo: 0.75,
- }
- }
-
- // Encode converts a stereo frame into MPX components.
- func (s *StereoEncoder) Encode(frame audio.Frame) Components {
- return Components{
- Mono: float64(frame.Mono()),
- Stereo: float64(frame.Difference()) * s.LevelStereo,
- Pilot: s.pilot.Sample(),
- }
- }
-
- // Reset restarts the pilot generator phase.
- func (s *StereoEncoder) Reset() {
- s.pilot.Reset()
- }
|