用途
该技能面向 iOS 语音识别开发,目标是把实时语音和预录音频转换为文本。它同时覆盖两套 API:面向 iOS 26+ 的现代设备端方案 SpeechAnalyzer,以及兼容 iOS 10+ 的旧版 SFSpeechRecognizer。
主要能力
- 权限与音频会话:在 Info.plist 中添加 NSSpeechRecognitionUsageDescription 和 NSMicrophoneUsageDescription,并在开始录音前请求语音与麦克风授权。
- 现代 SpeechAnalyzer(iOS 26+):通过 SpeechTranscriber 提供模块化、异步的流式转录,可区分部分结果(Partial)与最终结果(Committed)。
- 旧版 SFSpeechRecognizer:用于音频文件转录与向后兼容,示例中使用 SFSpeechURLRecognitionRequest 并开启 requiresOnDeviceRecognition。
- 设备端模型资源:通过 AssetInventory 检查语言包安装状态,必要时下载。
- 常见错误与审查清单:列出权限缺失、部分与最终结果混淆、并发识别任务、设备端回退失败、音频引擎未停止等问题。
使用方式
- 在 Info.plist 中声明语音识别与麦克风用途说明。
- 调用 SFSpeechRecognizer.requestAuthorization 请求语音授权,并通过 AVAudioApplication.requestRecordPermission 请求录音权限。
- 现代方案:创建 SpeechTranscriber(指定 locale 与 preset,如 .transcription),将其作为模块传入 SpeechAnalyzer,异步遍历 transcriber.results 获取文本,通过 analyzer.start(inputFormat:) 启动,用 analyzer.append(buffer:) 追加音频,最后调用 analyzer.finish() 结束。
- 旧版方案:创建 SFSpeechRecognizer,检查 isAvailable,构造 SFSpeechURLRecognitionRequest,在 recognitionTask 回调中等待 result.isFinal 后取 bestTranscription.formattedString。
- 使用前可用 AssetInventory.status 检查模型是否已安装,未安装则调用 AssetInventory.download 下载。
适用场景
- 应用内实时听写与实时字幕。
- 对已录制音频文件进行转录。
- 需要设备端离线识别、避免上传音频的场景。
- 需要同时兼容新旧 iOS 版本的语音功能开发。
限制与注意事项
- 缺少 NSMicrophoneUsageDescription 会在访问 AVAudioEngine 时立即崩溃。
- 部分结果更新频繁,只有 result.isFinal 为 true 时才应将文本写入数据模型。
- 启动新的识别流前,必须先结束或取消上一个识别任务。
- 若 requiresOnDeviceRecognition 为 true,需确保通过 AssetInventory 安装了模型资源。
- 识别结束后需同时停止 AVAudioEngine,否则状态栏麦克风指示会持续显示。
- 具体平台版本、语言支持范围与性能表现等细节,资料中暂未提供。