Files
go-sip/internal/audio/mp3_test.go
T

49 lines
1.3 KiB
Go

package audio
import (
"os"
"testing"
)
func TestDecodeMP3ToPCM16Mono(t *testing.T) {
encoded, err := os.ReadFile("testdata/sine_16k_mono.mp3")
if err != nil {
t.Fatal(err)
}
pcm16k, sourceRate, err := DecodeMP3ToPCM16Mono(encoded, 16000, 1<<20)
if err != nil {
t.Fatal(err)
}
if sourceRate != 16000 {
t.Fatalf("source sample rate = %d, want 16000", sourceRate)
}
if len(pcm16k) == 0 || len(pcm16k)%2 != 0 {
t.Fatalf("decoded PCM16 length = %d, want nonempty complete samples", len(pcm16k))
}
pcm8k, decodedRate, err := DecodeMP3ToPCM16Mono(encoded, 8000, 1<<20)
if err != nil {
t.Fatal(err)
}
if decodedRate != sourceRate {
t.Fatalf("source sample rate changed between conversions: %d != %d", decodedRate, sourceRate)
}
if len(pcm16k) != 2*len(pcm8k) {
t.Fatalf("16 kHz output has %d bytes, 8 kHz output has %d; want 2:1", len(pcm16k), len(pcm8k))
}
}
func TestDecodeMP3ToPCM16MonoRejectsInvalidAndOversizedAudio(t *testing.T) {
if _, _, err := DecodeMP3ToPCM16Mono([]byte("not an MP3"), 16000, 1<<20); err == nil {
t.Fatal("invalid MP3 was accepted")
}
encoded, err := os.ReadFile("testdata/sine_16k_mono.mp3")
if err != nil {
t.Fatal(err)
}
if _, _, err := DecodeMP3ToPCM16Mono(encoded, 16000, 2048); err == nil {
t.Fatal("decoded output beyond the limit was accepted")
}
}