|
- package stereo
-
- import (
- "math"
- "testing"
-
- "github.com/jan/fm-rds-tx/internal/audio"
- )
-
- func TestSSBAndVSBDelayMonoToMatchDiffPath(t *testing.T) {
- const sampleRate = 228000
- const wantDelay = (ssbHilbertTaps - 1) / 2
-
- for _, mode := range []Mode{ModeSSB, ModeVSB} {
- enc := NewStereoEncoder(sampleRate)
- enc.SetMode(mode, sampleRate)
-
- for i := 0; i < wantDelay; i++ {
- c := enc.Encode(audio.NewFrame(1, 1))
- if math.Abs(c.Mono) > 1e-12 {
- t.Fatalf("mode %s: mono leaked before delay filled at sample %d: got %.9f want 0", mode, i, c.Mono)
- }
- }
-
- c := enc.Encode(audio.NewFrame(1, 1))
- if math.Abs(c.Mono-1) > 1e-12 {
- t.Fatalf("mode %s: mono did not emerge after expected delay: got %.9f want 1", mode, c.Mono)
- }
- }
- }
-
- func TestDSBMonoRemainsUndelayed(t *testing.T) {
- enc := NewStereoEncoder(228000)
- enc.SetMode(ModeDSB, 228000)
- c := enc.Encode(audio.NewFrame(1, 1))
- if math.Abs(c.Mono-1) > 1e-12 {
- t.Fatalf("DSB mono should be immediate: got %.9f want 1", c.Mono)
- }
- }
-
- func TestResetClearsMonoDelayState(t *testing.T) {
- const sampleRate = 228000
- const wantDelay = (ssbHilbertTaps - 1) / 2
-
- enc := NewStereoEncoder(sampleRate)
- enc.SetMode(ModeSSB, sampleRate)
-
- for i := 0; i < wantDelay+4; i++ {
- _ = enc.Encode(audio.NewFrame(1, 1))
- }
-
- enc.Reset()
-
- for i := 0; i < wantDelay; i++ {
- c := enc.Encode(audio.NewFrame(1, 1))
- if math.Abs(c.Mono) > 1e-12 {
- t.Fatalf("reset did not clear mono delay at sample %d: got %.9f want 0", i, c.Mono)
- }
- }
- }
|