stream_test.go | 34 +++++++++++++++++++++++++++++----- diff --git a/stream_test.go b/stream_test.go index 8badc69ef28928fa4ed0b11ba8883d9280ede11b..a2c02038f6b5ba60659e986ad2cd5f6755f2c386 100644 --- a/stream_test.go +++ b/stream_test.go @@ -8,6 +8,7 @@ import ( "fmt" "io" "io/ioutil" + "math" "os" "reflect" "strings" @@ -71,7 +72,7 @@ return readStreamPcm(t, stream, buffersize) } // Extract raw pcm data from .wav file -func exctractWavPcm(t *testing.T, fname string) []int16 { +func extractWavPcm(t *testing.T, fname string) []int16 { bytes, err := ioutil.ReadFile(fname) if err != nil { t.Fatalf("Error reading file data from %s: %v", fname, err) @@ -89,12 +90,35 @@ } return samples } +func maxDiff(a []int16, b []int16) int32 { + if len(a) != len(b) { + return math.MaxInt16 + } + var max int32 = 0 + for i := range a { + d := int32(a[i]) - int32(b[i]) + if d < 0 { + d = -d + } + if d > max { + max = d + } + } + return max +} + func TestStream(t *testing.T) { - pcm := opus2pcm(t, "testdata/speech_8.opus", 10000) - if len(pcm) != 518400 { - t.Fatalf("Unexpected length of decoded opus file: %d", len(pcm)) + opuspcm := opus2pcm(t, "testdata/speech_8.opus", 10000) + wavpcm := extractWavPcm(t, "testdata/speech_8.wav") + if len(opuspcm) != len(wavpcm) { + t.Fatalf("Unexpected length of decoded opus file: %d (.wav: %d)", len(opuspcm), len(wavpcm)) } - + d := maxDiff(opuspcm, wavpcm) + // No science behind this number + const epsilon = 12 + if d > epsilon { + t.Errorf("Maximum difference between decoded streams too high: %d", d) + } } func TestStreamSmallBuffer(t *testing.T) { diff --git a/testdata/speech_8.wav b/testdata/speech_8.wav new file mode 100644 index 0000000000000000000000000000000000000000..4c6c1faf027afdc166c00904827eab84ec4ba2ba Binary files /dev/null and b/testdata/speech_8.wav differ