Repository navigation
feat(apple): move Apple Speech to SpeechAnalyzer; require macOS 26 - #58
Merged
Merged
Conversation
The Apple engine now runs SpeechTranscriber through SpeechAnalyzer instead of SFSpeechRecognizer. The old recognizer dropped everything before a pause and only waited 0.3s after endAudio, so dictations came back truncated; the new pipeline finalizes the whole recording in tens of milliseconds. The system manages the model, so the bundle does not grow. - AppleSpeechBackend becomes a PCMCaptureEngine: SpeechTranscriber's preferred input is the hub's 16 kHz mono int16 PCM, so the native-buffer sink path (BufferCaptureEngine, AudioTapHub buffer sinks, replay int16Buffer) is removed. - Lifecycle calls arrive from arbitrary tasks, so the backend hops to main and keeps session state main-confined; ingest reaches the session's AnalyzerInput stream through a Lock. Finalized text shows solid in the HUD and the volatile tail dimmed, like the other engines. - SpeechTranscriber needs no Speech Recognition authorization (verified in an app bundle with the permission undetermined and no usage string), so the launch request, the permissions-pane row and the usage strings go. - Deployment target, LSMinimumSystemVersion and README move to macOS 26. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
SpeechTranscriberthroughSpeechAnalyzer(macOS 26) instead ofSFSpeechRecognizer. The old recognizer dropped everything before a pause and only waited 0.3 s afterendAudio, which is why dictations were truncated. The new pipeline returns the whole recording.AppleSpeechBackendis now aPCMCaptureEngine.SpeechTranscriber's preferred input is the hub's 16 kHz mono int16 PCM, so the native-buffer path is removed:BufferCaptureEngine, theAudioTapHubbuffer sinks, and the replayint16Buffer.SpeechTranscriberneeds no Speech Recognition authorization, so the launch-time request, the 权限管理 row and the usage strings are removed.LSMinimumSystemVersionmove to 26.0.Verification
swift test: 452 tests, 0 failures.make build/make installsucceed with a Developer ID signature and the audio-input entitlement..appbundle with noNSSpeechRecognitionUsageDescriptionand authorization.notDetermined. Transcription works.Known limits
🤖 Generated with Claude Code