keet-streaming / src /lib /audio /AudioSegmentProcessor.test.ts
ysdede's picture
feat(space): migrate Hugging Face Space to keet SolidJS app
b8cc2bf
import { describe, it, expect } from 'vitest';
import { AudioSegmentProcessor } from './AudioSegmentProcessor';
describe('AudioSegmentProcessor', () => {
it('should initialize without errors', () => {
const processor = new AudioSegmentProcessor();
expect(processor).toBeDefined();
const stats = processor.getStats();
expect(stats).toBeDefined();
expect(stats.noiseFloor).toBeGreaterThan(0);
});
it('should process silence without detecting segments', () => {
const processor = new AudioSegmentProcessor({
sampleRate: 16000,
energyThreshold: 0.1
});
// 16000 samples = 1 second
const silence = new Float32Array(16000).fill(0);
const energy = 0.0001;
const currentTime = 1.0;
const segments = processor.processAudioData(silence, currentTime, energy);
expect(segments).toEqual([]);
const state = processor.getStateInfo();
expect(state.inSpeech).toBe(false);
});
it('should process speech and detect segments', () => {
// This is a simplified test.
// Real VAD is complex, so we just check state transitions if we force high energy
const processor = new AudioSegmentProcessor({
sampleRate: 16000,
energyThreshold: 0.01
});
const speech = new Float32Array(1600).fill(0.5); // 100ms
const energy = 0.5; // High energy
// Process a few chunks to trigger speech detection
let segments = processor.processAudioData(speech, 1.0, energy);
// It might not trigger immediately due to lookback/SNR checks,
// but let's check internal state or just that it doesn't crash
// Force state check
// processor.processAudioData is complex, so let's just ensure it runs
expect(Array.isArray(segments)).toBe(true);
});
it('should reset state correctly', () => {
const processor = new AudioSegmentProcessor();
// Simulate some state change
const chunk = new Float32Array(100).fill(0.1);
processor.processAudioData(chunk, 1.0, 0.5);
processor.reset();
const stats = processor.getStats();
expect(stats.noiseFloor).toBe(0.005); // Default reset value
const state = processor.getStateInfo();
expect(state.inSpeech).toBe(false);
expect(state.speechStartTime).toBeNull();
});
});