mirror of
https://github.com/pion/mediadevices.git
synced 2025-10-05 08:36:55 +08:00

This follows image package from the standard library. By having a homogenous data type for storing the samples, it makes easier to manipulate the raw data in a generic way.
115 lines
2.8 KiB
Go
115 lines
2.8 KiB
Go
package audio
|
|
|
|
import (
|
|
"io"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/pion/mediadevices/pkg/wave"
|
|
)
|
|
|
|
func TestBuffer(t *testing.T) {
|
|
input1 := wave.NewInt16Interleaved(wave.ChunkInfo{Len: 1, Channels: 2, SamplingRate: 1234})
|
|
input1.SetInt16(0, 0, 1)
|
|
input1.SetInt16(0, 1, 2)
|
|
|
|
input2 := wave.NewInt16Interleaved(wave.ChunkInfo{Len: 3, Channels: 2, SamplingRate: 1234})
|
|
input2.SetInt16(0, 0, 3)
|
|
input2.SetInt16(0, 1, 4)
|
|
input2.SetInt16(1, 0, 5)
|
|
input2.SetInt16(1, 1, 6)
|
|
input2.SetInt16(2, 0, 7)
|
|
input2.SetInt16(2, 1, 8)
|
|
|
|
input3 := wave.NewInt16Interleaved(wave.ChunkInfo{Len: 2, Channels: 2, SamplingRate: 1234})
|
|
input3.SetInt16(0, 0, 9)
|
|
input3.SetInt16(0, 1, 10)
|
|
input3.SetInt16(1, 0, 11)
|
|
input3.SetInt16(1, 1, 12)
|
|
|
|
input4 := wave.NewInt16Interleaved(wave.ChunkInfo{Len: 7, Channels: 2, SamplingRate: 1234})
|
|
input4.SetInt16(0, 0, 13)
|
|
input4.SetInt16(0, 1, 14)
|
|
input4.SetInt16(1, 0, 15)
|
|
input4.SetInt16(1, 1, 16)
|
|
input4.SetInt16(2, 0, 17)
|
|
input4.SetInt16(2, 1, 18)
|
|
input4.SetInt16(3, 0, 19)
|
|
input4.SetInt16(3, 1, 20)
|
|
input4.SetInt16(4, 0, 21)
|
|
input4.SetInt16(4, 1, 22)
|
|
input4.SetInt16(5, 0, 23)
|
|
input4.SetInt16(5, 1, 24)
|
|
input4.SetInt16(6, 0, 25)
|
|
input4.SetInt16(6, 1, 26)
|
|
|
|
expected1 := wave.NewInt16Interleaved(wave.ChunkInfo{Len: 3, Channels: 2, SamplingRate: 1234})
|
|
expected1.SetInt16(0, 0, 1)
|
|
expected1.SetInt16(0, 1, 2)
|
|
expected1.SetInt16(1, 0, 3)
|
|
expected1.SetInt16(1, 1, 4)
|
|
expected1.SetInt16(2, 0, 5)
|
|
expected1.SetInt16(2, 1, 6)
|
|
|
|
expected2 := wave.NewInt16Interleaved(wave.ChunkInfo{Len: 3, Channels: 2, SamplingRate: 1234})
|
|
expected2.SetInt16(0, 0, 7)
|
|
expected2.SetInt16(0, 1, 8)
|
|
expected2.SetInt16(1, 0, 9)
|
|
expected2.SetInt16(1, 1, 10)
|
|
expected2.SetInt16(2, 0, 11)
|
|
expected2.SetInt16(2, 1, 12)
|
|
|
|
expected3 := wave.NewInt16Interleaved(wave.ChunkInfo{Len: 3, Channels: 2, SamplingRate: 1234})
|
|
expected3.SetInt16(0, 0, 13)
|
|
expected3.SetInt16(0, 1, 14)
|
|
expected3.SetInt16(1, 0, 15)
|
|
expected3.SetInt16(1, 1, 16)
|
|
expected3.SetInt16(2, 0, 17)
|
|
expected3.SetInt16(2, 1, 18)
|
|
|
|
expected4 := wave.NewInt16Interleaved(wave.ChunkInfo{Len: 3, Channels: 2, SamplingRate: 1234})
|
|
expected4.SetInt16(0, 0, 19)
|
|
expected4.SetInt16(0, 1, 20)
|
|
expected4.SetInt16(1, 0, 21)
|
|
expected4.SetInt16(1, 1, 22)
|
|
expected4.SetInt16(2, 0, 23)
|
|
expected4.SetInt16(2, 1, 24)
|
|
|
|
input := []wave.Audio{
|
|
input1,
|
|
input2,
|
|
input3,
|
|
input4,
|
|
}
|
|
expected := []wave.Audio{
|
|
expected1,
|
|
expected2,
|
|
expected3,
|
|
expected4,
|
|
}
|
|
|
|
trans := NewBuffer(3)
|
|
|
|
var iSent int
|
|
r := trans(ReaderFunc(func() (wave.Audio, error) {
|
|
if iSent < len(input) {
|
|
iSent++
|
|
return input[iSent-1], nil
|
|
}
|
|
return nil, io.EOF
|
|
}))
|
|
|
|
for i := 0; ; i++ {
|
|
a, err := r.Read()
|
|
if err != nil {
|
|
if err == io.EOF && i >= len(expected) {
|
|
break
|
|
}
|
|
t.Fatal(err)
|
|
}
|
|
if !reflect.DeepEqual(expected[i], a) {
|
|
t.Errorf("Expected wave[%d]: %v, got: %v", i, expected[i], a)
|
|
}
|
|
}
|
|
}
|