fix: skip silent recordings instead of transcribing them
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user