49 lines
1.3 KiB
Go
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")
|
|
}
|
|
}
|