package audio
|
|
import "testing"
|
|
func TestReadSamplesSinceReturnsOnlyNewSamples(t *testing.T) {
|
r := &Recorder{
|
pcmBuf: pcm16LE(0, 16384, -32768),
|
}
|
|
samples, nextOffset := r.ReadSamplesSince(1)
|
if nextOffset != 3 {
|
t.Fatalf("next offset = %d, want 3", nextOffset)
|
}
|
if len(samples) != 2 {
|
t.Fatalf("sample count = %d, want 2", len(samples))
|
}
|
if samples[0] != 0.5 {
|
t.Fatalf("samples[0] = %f, want 0.5", samples[0])
|
}
|
if samples[1] != -1 {
|
t.Fatalf("samples[1] = %f, want -1", samples[1])
|
}
|
}
|
|
func TestReadSamplesSinceClampsOffset(t *testing.T) {
|
r := &Recorder{
|
pcmBuf: pcm16LE(0, 16384),
|
}
|
|
samples, nextOffset := r.ReadSamplesSince(99)
|
if nextOffset != 2 {
|
t.Fatalf("next offset = %d, want 2", nextOffset)
|
}
|
if len(samples) != 0 {
|
t.Fatalf("sample count = %d, want 0", len(samples))
|
}
|
}
|
|
func TestOnDataCapsRecordingBuffer(t *testing.T) {
|
r := &Recorder{
|
isRecording: true,
|
pcmBuf: make([]byte, maxPCMBufferBytes-2),
|
}
|
|
r.onData(pcm16LE(1, 2))
|
|
if got := len(r.pcmBuf); got != maxPCMBufferBytes {
|
t.Fatalf("pcm buffer length = %d, want capped %d", got, maxPCMBufferBytes)
|
}
|
if !r.bufferLimitHit {
|
t.Fatal("bufferLimitHit should be set after truncating at cap")
|
}
|
|
r.onData(pcm16LE(3))
|
if got := len(r.pcmBuf); got != maxPCMBufferBytes {
|
t.Fatalf("pcm buffer length after cap = %d, want %d", got, maxPCMBufferBytes)
|
}
|
}
|
|
func pcm16LE(values ...int16) []byte {
|
buf := make([]byte, len(values)*2)
|
for i, value := range values {
|
buf[i*2] = byte(value)
|
buf[i*2+1] = byte(value >> 8)
|
}
|
return buf
|
}
|