Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

51 satır
1.1KB

  1. package stereo
  2. import (
  3. "math"
  4. "testing"
  5. "github.com/jan/fm-rds-tx/internal/audio"
  6. )
  7. func TestStereoEncoderEncode(t *testing.T) {
  8. enc := NewStereoEncoder(48000)
  9. frame := audio.NewFrame(1, -1)
  10. result := enc.Encode(frame)
  11. if diff := result.Mono; math.Abs(diff) > 1e-9 {
  12. t.Fatalf("expected mono 0, got %v", diff)
  13. }
  14. expected := 0.75 * ((1 - (-1)) / 2.0)
  15. if math.Abs(result.Stereo-expected) > 1e-9 {
  16. t.Fatalf("unexpected stereo level: %v", result.Stereo)
  17. }
  18. if result.Pilot < -0.1 || result.Pilot > 0.1 {
  19. t.Fatalf("pilot sample out of expected range: %v", result.Pilot)
  20. }
  21. }
  22. func TestStereoEncoderReset(t *testing.T) {
  23. frame := audio.NewFrame(0.1, -0.1)
  24. enc := NewStereoEncoder(48000)
  25. initial := make([]float64, 0, 4)
  26. for i := 0; i < 4; i++ {
  27. initial = append(initial, enc.Encode(frame).Pilot)
  28. }
  29. enc.Reset()
  30. afterReset := make([]float64, 0, 4)
  31. for i := 0; i < 4; i++ {
  32. afterReset = append(afterReset, enc.Encode(frame).Pilot)
  33. }
  34. for i := range initial {
  35. if math.Abs(initial[i]-afterReset[i]) > 1e-9 {
  36. t.Fatalf("reset failed at sample %d: %v vs %v", i, initial[i], afterReset[i])
  37. }
  38. }
  39. }