File size: 2,393 Bytes
b8cc2bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**
 * Keet v2.0 - Type Definitions
 * 
 * Core types for the transcription application.
 * Based on architecture.md specifications.
 */

// ============================================
// Audio Types
// ============================================

export interface AudioConfig {
  sampleRate: number;      // 16000 Hz
  channels: number;        // 1 (mono)
  chunkSize: number;       // Frame-aligned (40/80/120ms)
}

export interface AudioChunk {
  samples: Float32Array;
  timestamp: number;       // Absolute time in ms
  duration: number;        // Duration in ms
}

// ============================================
// VAD Types
// ============================================

export interface VADResult {
  isSpeech: boolean;
  energy: number;          // RMS energy level (0-1)
  timestamp: number;
}

export interface VADConfig {
  energyThreshold: number; // Default: 0.01
  minSpeechDuration: number; // Default: 100ms
  minSilenceDuration: number; // Default: 300ms
}

// ============================================
// Transcription Types
// ============================================

export interface TranscriptionResult {
  text: string;
  tokens: Token[];
  isFinal: boolean;
  timestamp: number;
}

export interface Token {
  text: string;
  startTime: number;
  endTime: number;
  confidence: number;
}

export interface DecoderState {
  // Opaque state from parakeet.js
  // LSTM hidden/cell states for stateful streaming
  [key: string]: unknown;
}

// ============================================
// App State Types
// ============================================

export type RecordingState = 'idle' | 'recording' | 'paused';
export type ModelState = 'unloaded' | 'loading' | 'ready' | 'error';
export type BackendType = 'webgpu' | 'wasm';

export interface AppState {
  recording: RecordingState;
  model: ModelState;
  backend: BackendType;
  transcript: string;
  sessionDuration: number;
  isOfflineReady: boolean;
}

// ============================================
// Component Props Types
// ============================================

export interface TranscriptPanelProps {
  transcript: string;
  isRecording: boolean;
  onCopy: () => void;
  onClear: () => void;
}

export interface WaveformProps {
  audioLevel: number;
  isRecording: boolean;
}

export interface RecordButtonProps {
  isRecording: boolean;
  onToggle: () => void;
  disabled: boolean;
}