






















@@ -13,7 +13,9 @@ public struct WakeWordSegment: Sendable, Equatable {
1313self.range = range
1414}
151516-public var end: TimeInterval { start + duration }
16+public var end: TimeInterval {
17+self.start + self.duration
18+}
1719}
18201921public struct WakeWordGateConfig: Sendable, Equatable {
@@ -24,7 +26,8 @@ public struct WakeWordGateConfig: Sendable, Equatable {
2426public init(
2527 triggers: [String],
2628 minPostTriggerGap: TimeInterval = 0.45,
27- minCommandLength: Int = 1) {
29+ minCommandLength: Int = 1)
30+{
2831self.triggers = triggers
2932self.minPostTriggerGap = minPostTriggerGap
3033self.minCommandLength = minCommandLength
@@ -78,10 +81,10 @@ public enum WakeWordGate {
7881 segments: [WakeWordSegment],
7982 config: WakeWordGateConfig)
8083-> WakeWordGateMatch? {
81-let triggerTokens = normalizeTriggers(config.triggers)
84+let triggerTokens = self.normalizeTriggers(config.triggers)
8285guard !triggerTokens.isEmpty else { return nil }
838684-let tokens = normalizeSegments(segments)
87+let tokens = self.normalizeSegments(segments)
8588guard !tokens.isEmpty else { return nil }
86898790var best: MatchCandidate?
@@ -115,7 +118,7 @@ public enum WakeWordGate {
115118}
116119117120guard let best else { return nil }
118-let command = commandText(transcript: transcript, segments: segments, triggerEndTime: best.triggerEnd)
121+let command = self.commandText(transcript: transcript, segments: segments, triggerEndTime: best.triggerEnd)
119122.trimmingCharacters(in: Self.whitespaceAndPunctuation)
120123guard command.count >= config.minCommandLength else { return nil }
121124return WakeWordGateMatch(
@@ -145,7 +148,7 @@ public enum WakeWordGate {
145148guard !text.isEmpty else { return false }
146149let normalized = text.lowercased()
147150for trigger in triggers {
148-let token = trigger.trimmingCharacters(in: whitespaceAndPunctuation).lowercased()
151+let token = trigger.trimmingCharacters(in: self.whitespaceAndPunctuation).lowercased()
149152if token.isEmpty { continue }
150153if normalized.contains(token) { return true }
151154}
@@ -155,19 +158,19 @@ public enum WakeWordGate {
155158public static func stripWake(text: String, triggers: [String]) -> String {
156159var out = text
157160for trigger in triggers {
158-let token = trigger.trimmingCharacters(in: whitespaceAndPunctuation)
161+let token = trigger.trimmingCharacters(in: self.whitespaceAndPunctuation)
159162guard !token.isEmpty else { continue }
160163 out = out.replacingOccurrences(of: token, with: "", options: [.caseInsensitive])
161164}
162-return out.trimmingCharacters(in: whitespaceAndPunctuation)
165+return out.trimmingCharacters(in: self.whitespaceAndPunctuation)
163166}
164167165168private static func normalizeTriggers(_ triggers: [String]) -> [TriggerTokens] {
166169var output: [TriggerTokens] = []
167170for trigger in triggers {
168171let tokens = trigger
169172.split(whereSeparator: { $0.isWhitespace })
170-.map { normalizeToken(String($0)) }
173+.map { self.normalizeToken(String($0)) }
171174.filter { !$0.isEmpty }
172175if tokens.isEmpty { continue }
173176 output.append(TriggerTokens(source: tokens.joined(separator: " "), tokens: tokens))
@@ -177,7 +180,7 @@ public enum WakeWordGate {
177180178181private static func normalizeSegments(_ segments: [WakeWordSegment]) -> [Token] {
179182 segments.compactMap { segment in
180-let normalized = normalizeToken(segment.text)
183+let normalized = self.normalizeToken(segment.text)
181184guard !normalized.isEmpty else { return nil }
182185return Token(
183186 normalized: normalized,
@@ -190,7 +193,7 @@ public enum WakeWordGate {
190193191194private static func normalizeToken(_ token: String) -> String {
192195 token
193-.trimmingCharacters(in: whitespaceAndPunctuation)
196+.trimmingCharacters(in: self.whitespaceAndPunctuation)
194197.lowercased()
195198}
196199此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。