39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
package media
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"testing"
|
|
)
|
|
|
|
func TestValidateAudioWAVPCM16(t *testing.T) {
|
|
content := syntheticWAV(8000, 1, 800)
|
|
if code := validateAudio("wav_pcm_s16le", 100, content); code != "" {
|
|
t.Fatalf("valid WAV rejected with %s", code)
|
|
}
|
|
if code := validateAudio("wav_pcm_s16le", 101, content); code != "DURATION_MISMATCH" {
|
|
t.Fatalf("duration mismatch code = %s", code)
|
|
}
|
|
if code := validateAudio("opus", 100, content); code != "CODEC_VALIDATION_UNAVAILABLE" {
|
|
t.Fatalf("unsupported codec code = %s", code)
|
|
}
|
|
}
|
|
|
|
func syntheticWAV(sampleRate uint32, channels uint16, samples int) []byte {
|
|
dataSize := samples * int(channels) * 2
|
|
content := make([]byte, 44+dataSize)
|
|
copy(content[0:4], "RIFF")
|
|
binary.LittleEndian.PutUint32(content[4:8], uint32(len(content)-8))
|
|
copy(content[8:12], "WAVE")
|
|
copy(content[12:16], "fmt ")
|
|
binary.LittleEndian.PutUint32(content[16:20], 16)
|
|
binary.LittleEndian.PutUint16(content[20:22], 1)
|
|
binary.LittleEndian.PutUint16(content[22:24], channels)
|
|
binary.LittleEndian.PutUint32(content[24:28], sampleRate)
|
|
binary.LittleEndian.PutUint32(content[28:32], sampleRate*uint32(channels)*2)
|
|
binary.LittleEndian.PutUint16(content[32:34], channels*2)
|
|
binary.LittleEndian.PutUint16(content[34:36], 16)
|
|
copy(content[36:40], "data")
|
|
binary.LittleEndian.PutUint32(content[40:44], uint32(dataSize))
|
|
return content
|
|
}
|