Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

53 lignes
1.4KB

  1. package audio
  2. import (
  3. "os"
  4. "path/filepath"
  5. "testing"
  6. )
  7. func TestPCM16ToSample(t *testing.T) {
  8. if pcm16ToSample(32767) <= 0 {
  9. t.Fatal("expected positive sample")
  10. }
  11. if pcm16ToSample(-32768) < -1.0 {
  12. t.Fatal("expected clamped lower bound")
  13. }
  14. }
  15. func TestLoadWAVSource(t *testing.T) {
  16. dir := t.TempDir()
  17. path := filepath.Join(dir, "test.wav")
  18. wav := []byte{
  19. 'R','I','F','F', 52,0,0,0, 'W','A','V','E',
  20. 'f','m','t',' ', 16,0,0,0, 1,0, 1,0, 0x80,0xbb,0x00,0x00, 0x00,0x77,0x01,0x00, 2,0, 16,0,
  21. 'd','a','t','a', 8,0,0,0,
  22. 0,0, 255,127, 0,128, 0,0,
  23. }
  24. if err := os.WriteFile(path, wav, 0o644); err != nil {
  25. t.Fatalf("write wav: %v", err)
  26. }
  27. src, err := LoadWAVSource(path)
  28. if err != nil {
  29. t.Fatalf("LoadWAVSource failed: %v", err)
  30. }
  31. if src.SampleRate != 48000 {
  32. t.Fatalf("unexpected sample rate: %d", src.SampleRate)
  33. }
  34. if src.Channels != 1 {
  35. t.Fatalf("unexpected channels: %d", src.Channels)
  36. }
  37. _ = src.NextFrame()
  38. }
  39. func TestRejectInvalidWAV(t *testing.T) {
  40. dir := t.TempDir()
  41. path := filepath.Join(dir, "bad.wav")
  42. if err := os.WriteFile(path, []byte("nope"), 0o644); err != nil {
  43. t.Fatalf("write wav: %v", err)
  44. }
  45. if _, err := LoadWAVSource(path); err == nil {
  46. t.Fatal("expected wav load error")
  47. }
  48. }