]> Sergey Matveev's repositories - go-opus.git/commitdiff
Compare pre-decoded wav with decoded opus data
authorHraban Luyat <hraban@0brg.net>
Sun, 12 Jul 2015 11:08:13 +0000 (11:08 +0000)
committerHraban Luyat <hraban@0brg.net>
Sun, 12 Jul 2015 11:08:13 +0000 (11:08 +0000)
stream_test.go
testdata/speech_8.wav [new file with mode: 0644]

index 8badc69ef28928fa4ed0b11ba8883d9280ede11b..a2c02038f6b5ba60659e986ad2cd5f6755f2c386 100644 (file)
@@ -8,6 +8,7 @@ import (
        "fmt"
        "io"
        "io/ioutil"
+       "math"
        "os"
        "reflect"
        "strings"
@@ -71,7 +72,7 @@ func opus2pcm(t *testing.T, fname string, buffersize int) []int16 {
 }
 
 // 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 @@ func exctractWavPcm(t *testing.T, fname string) []int16 {
        return samples
 }
 
-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))
+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) {
+       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 (file)
index 0000000..4c6c1fa
Binary files /dev/null and b/testdata/speech_8.wav differ