First public release of SpeechLanes: on-device, multi-language speech-to-text for Apple platforms.
What it does
SpeechLanes runs one SpeechAnalyzer lane per configured locale and returns the highest-confidence transcript. It picks SpeechTranscriber where Apple ships a model for the locale and falls back to DictationTranscriber (for example ru-RU). Lanes run in priority order, so the first clear match wins and one lane's failure never takes down a language that still works. Audio matching no configured language fails with a typed lowConfidence error instead of returning garbage.
Highlights
- A
SpeechLaneTranscriberactor behind theSpeechTranscribingprotocol, withConfiguration, aTranscriptionResultthat reports the winning locale/confidence/engine, and a typedTranscriptionError. - On-device model provisioning that serializes reservations process-wide and evicts only the locales this library reserved, never the host app's.
- Task cancellation tears down a wedged analyzer and throws
.cancelled. - Any
AVAudioFile-decodable input: Ogg/Opus, MP3, M4A, CAF, WAV. - Swift 6.2 strict concurrency, zero third-party dependencies.
Requirements
iOS 26, macOS 26, visionOS 26. Swift 6.2 and Xcode 26.
Install
.package(url: "https://github.com/ivan-magda/swift-speech-lanes.git", from: "1.0.0")Documentation: https://ivan-magda.github.io/swift-speech-lanes/documentation/speechlanes