You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
39 lines
1.1 KiB
package filetrans
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"testing"
|
|
)
|
|
|
|
func wavHeader(channels uint16) []byte {
|
|
b := make([]byte, 44)
|
|
copy(b[0:4], "RIFF")
|
|
binary.LittleEndian.PutUint32(b[4:8], 36)
|
|
copy(b[8:12], "WAVE")
|
|
copy(b[12:16], "fmt ")
|
|
binary.LittleEndian.PutUint32(b[16:20], 16)
|
|
binary.LittleEndian.PutUint16(b[20:22], 1)
|
|
binary.LittleEndian.PutUint16(b[22:24], channels)
|
|
binary.LittleEndian.PutUint32(b[24:28], 16000)
|
|
copy(b[36:40], "data")
|
|
return b
|
|
}
|
|
|
|
func TestWavChannelsFromHeader(t *testing.T) {
|
|
if got := wavChannelsFromHeader(wavHeader(2)); got != 2 {
|
|
t.Fatalf("stereo: got %d", got)
|
|
}
|
|
if got := wavChannelsFromHeader(wavHeader(1)); got != 1 {
|
|
t.Fatalf("mono: got %d", got)
|
|
}
|
|
// 客户端 WavWriter 的头只有 44 字节,但取 64 字节的 Range 会带上 data 的前 20 字节
|
|
if got := wavChannelsFromHeader(append(wavHeader(2), make([]byte, 20)...)); got != 2 {
|
|
t.Fatalf("stereo+data: got %d", got)
|
|
}
|
|
if got := wavChannelsFromHeader([]byte("OggS\x00\x02")); got != 0 {
|
|
t.Fatalf("ogg: got %d", got)
|
|
}
|
|
if got := wavChannelsFromHeader(wavHeader(2)[:20]); got != 0 {
|
|
t.Fatalf("truncated: got %d", got)
|
|
}
|
|
}
|
|
|