fix: skip silent recordings instead of transcribing them

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 09:58:09 +02:00
co-authored by Claude Sonnet 5.5
parent 835b8bb46b
commit 479169b258
2 changed files with 27 additions and 1 deletions
+10 -1
View File
@@ -13,20 +13,24 @@ public final class DictationController {
private let cleaner: Cleaner
private let inserter: TextInserting
private let minimumSamples: Int
private let silenceThreshold: Float
/// - Parameter minimumSamples: 16 kHz samples; default is 0.3 s.
/// - Parameter silenceThreshold: RMS below which a recording counts as silence and is skipped.
public init(
recorder: AudioRecording,
transcriber: Transcriber,
cleaner: Cleaner,
inserter: TextInserting,
minimumSamples: Int = 4_800
minimumSamples: Int = 4_800,
silenceThreshold: Float = 0.005
) {
self.recorder = recorder
self.transcriber = transcriber
self.cleaner = cleaner
self.inserter = inserter
self.minimumSamples = minimumSamples
self.silenceThreshold = silenceThreshold
}
public func handle(_ event: HotkeyEvent) async {
@@ -44,6 +48,11 @@ public final class DictationController {
state = .idle
return
}
let energy = samples.reduce(0) { $0 + $1 * $1 }
guard (energy / Float(samples.count)).squareRoot() >= silenceThreshold else {
state = .idle
return
}
await process(samples)
default:
break