SuperAPI AI 工具集

speech-recognition

编程与开发

查看项目

更新于 10-16 06:54

技能介绍

用途

该技能面向 iOS 语音识别开发,目标是把实时语音和预录音频转换为文本。它同时覆盖两套 API:面向 iOS 26+ 的现代设备端方案 SpeechAnalyzer,以及兼容 iOS 10+ 的旧版 SFSpeechRecognizer。

主要能力

  • 权限与音频会话:在 Info.plist 中添加 NSSpeechRecognitionUsageDescription 和 NSMicrophoneUsageDescription,并在开始录音前请求语音与麦克风授权。
  • 现代 SpeechAnalyzer(iOS 26+):通过 SpeechTranscriber 提供模块化、异步的流式转录,可区分部分结果(Partial)与最终结果(Committed)。
  • 旧版 SFSpeechRecognizer:用于音频文件转录与向后兼容,示例中使用 SFSpeechURLRecognitionRequest 并开启 requiresOnDeviceRecognition。
  • 设备端模型资源:通过 AssetInventory 检查语言包安装状态,必要时下载。
  • 常见错误与审查清单:列出权限缺失、部分与最终结果混淆、并发识别任务、设备端回退失败、音频引擎未停止等问题。

使用方式

  1. 在 Info.plist 中声明语音识别与麦克风用途说明。
  2. 调用 SFSpeechRecognizer.requestAuthorization 请求语音授权,并通过 AVAudioApplication.requestRecordPermission 请求录音权限。
  3. 现代方案:创建 SpeechTranscriber(指定 locale 与 preset,如 .transcription),将其作为模块传入 SpeechAnalyzer,异步遍历 transcriber.results 获取文本,通过 analyzer.start(inputFormat:) 启动,用 analyzer.append(buffer:) 追加音频,最后调用 analyzer.finish() 结束。
  4. 旧版方案:创建 SFSpeechRecognizer,检查 isAvailable,构造 SFSpeechURLRecognitionRequest,在 recognitionTask 回调中等待 result.isFinal 后取 bestTranscription.formattedString。
  5. 使用前可用 AssetInventory.status 检查模型是否已安装,未安装则调用 AssetInventory.download 下载。

适用场景

  • 应用内实时听写与实时字幕。
  • 对已录制音频文件进行转录。
  • 需要设备端离线识别、避免上传音频的场景。
  • 需要同时兼容新旧 iOS 版本的语音功能开发。

限制与注意事项

  • 缺少 NSMicrophoneUsageDescription 会在访问 AVAudioEngine 时立即崩溃。
  • 部分结果更新频繁,只有 result.isFinal 为 true 时才应将文本写入数据模型。
  • 启动新的识别流前,必须先结束或取消上一个识别任务。
  • 若 requiresOnDeviceRecognition 为 true,需确保通过 AssetInventory 安装了模型资源。
  • 识别结束后需同时停止 AVAudioEngine,否则状态栏麦克风指示会持续显示。
  • 具体平台版本、语言支持范围与性能表现等细节,资料中暂未提供。