sync: migrate ai-operator to Gitea (2026-08-10)
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package audio
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func pcm(samples int) []byte {
|
||||
b := make([]byte, samples*2)
|
||||
for i := 0; i < samples; i++ {
|
||||
binary.LittleEndian.PutUint16(b[i*2:], uint16(int16(i)))
|
||||
}
|
||||
return b
|
||||
}
|
||||
func TestPCMBase64ChunkResample(t *testing.T) {
|
||||
data := pcm(160)
|
||||
if !IsPCM16Aligned(data) {
|
||||
t.Fatal("aligned")
|
||||
}
|
||||
if IsPCM16Aligned([]byte{1}) {
|
||||
t.Fatal("misaligned")
|
||||
}
|
||||
enc := Base64Encode(data)
|
||||
dec, err := Base64Decode(enc)
|
||||
if err != nil || len(dec) != len(data) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
chunks := ChunkBytes(data, 100)
|
||||
if len(chunks) == 0 || len(chunks[0]) > 100 {
|
||||
t.Fatal("chunks")
|
||||
}
|
||||
dur := ChunkPCM16ByDuration(data, 16000, 10*time.Millisecond)
|
||||
if len(dur) != 1 {
|
||||
t.Fatal("duration chunks")
|
||||
}
|
||||
up, err := ResamplePCM16MonoLinear(pcm(16000), 16000, 24000)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got := len(up) / 2; got < 23990 || got > 24010 {
|
||||
t.Fatalf("up samples=%d", got)
|
||||
}
|
||||
down, err := ResamplePCM16MonoLinear(pcm(24000), 24000, 16000)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got := len(down) / 2; got < 15990 || got > 16010 {
|
||||
t.Fatalf("down samples=%d", got)
|
||||
}
|
||||
if _, err := ResamplePCM16MonoLinear([]byte{1}, 16000, 24000); err == nil {
|
||||
t.Fatal("want err")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user