33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import { AudioJitterBuffer } from "../src/audio-jitter-buffer"
|
|
import { PCM_BYTES_PER_MS } from "../src/pcm"
|
|
|
|
const chunk = (durationMs: number, gapMs = 0) => ({ bytes: Buffer.alloc(durationMs * PCM_BYTES_PER_MS), gapMs })
|
|
|
|
describe("AudioJitterBuffer", () => {
|
|
test("holds startup audio until the target buffer is available", () => {
|
|
const buffer = new AudioJitterBuffer(300)
|
|
expect(buffer.push(chunk(100))).toEqual([])
|
|
expect(buffer.push(chunk(100))).toEqual([])
|
|
expect(buffer.push(chunk(100))).toHaveLength(3)
|
|
})
|
|
|
|
test("passes chunks through after playback starts", () => {
|
|
const buffer = new AudioJitterBuffer(200)
|
|
buffer.push(chunk(200))
|
|
expect(buffer.push(chunk(100))).toEqual([chunk(100)])
|
|
})
|
|
|
|
test("flushes short utterances and resets between responses", () => {
|
|
const buffer = new AudioJitterBuffer(300)
|
|
buffer.push(chunk(100))
|
|
expect(buffer.finish()).toHaveLength(1)
|
|
buffer.reset()
|
|
expect(buffer.push(chunk(100))).toEqual([])
|
|
})
|
|
|
|
test("counts intentional timeline silence toward buffered duration", () => {
|
|
const buffer = new AudioJitterBuffer(300)
|
|
expect(buffer.push(chunk(200, 100))).toHaveLength(1)
|
|
})
|
|
})
|