跳到主要内容

流式语音识别

将音频数据或本地音频文件发送给选定的 AI 服务商,并接收增量语音识别结果。

前置条件

  • AIBudsAISDK 已初始化,并且已选择注册的服务商。
  • 服务商支持 StreamingASRServiceAPI
  • 输入字节与配置指定的 audioFormat 一致。
  • 如果提供 languageForSpeechInput,应使用带连字符的语言标识符,例如 en-USzh-CN

使用 AI 辅助实现

使用 AI 开发

让 AI 帮助实现此工作流

使用官方“实现 AIBuds 流式语音识别”技能,根据你的 App 完成实现。

请阅读并遵循 https://docs-aibuds.github.io/zh-Hans/skills/implement-aibuds-streaming-asr,使用该技能在当前 iOS 项目中完成“实现 AIBuds 流式语音识别”,并验证结果。
查看官方技能

API 参考

框架

AIBudsAI.xcframework

导入

Swift
import AIBudsAI
import AIBudsAIFoundation

声明

Swift
/// Recognizes voice data.
/// - Parameters:
///   - data: The audio data to recognize.
///   - config: The recognition configuration.
///   - onTranscript: Called for each incremental transcript result.
///   - onFailed: Called when recognition fails.
///   - onFinish: Called when recognition finishes.
public static func recognizeVoice(_ data: Data,
                                  config: StreamingASRConfig = .default,
                            onTranscript: ((_ transcriptData: StreamSpeechASRModel) -> Void)? = nil,
                                onFailed: ((_ error: NSError) -> Void)? = nil,
                                onFinish: (() -> Void)? = nil) -> Void

/// Recognizes a voice file.
/// - Parameters:
///   - filePath: The local path of the audio file to recognize.
///   - config: The recognition configuration.
///   - onTranscript: Called for each incremental transcript result.
///   - onFailed: Called when recognition fails.
///   - onFinish: Called when recognition finishes.
public static func recognizeVoice(withFile filePath: String,
                                             config: StreamingASRConfig = .default,
                                       onTranscript: ((_ transcriptData: StreamSpeechASRModel) -> Void)? = nil,
                                           onFailed: ((_ error: NSError) -> Void)? = nil,
                                           onFinish: (() -> Void)? = nil) -> Void

两个重载都由 AIBudsAISDK 提供,并将请求转发给选定服务商的 StreamingASRServiceAPI 实现。

配置

使用以下属性创建 StreamingASRConfig

属性说明
languageForSpeechInput可选的识别语言。省略时,服务商使用当前 App 本地化语言。
audioFormat输入格式,例如 .pcm.mp3.wav
enableSpeakerDiarization是否由服务商识别不同说话人的语音片段,默认为 false

输入格式使用 AIAudioFormat

输入数据
.pcm与所选服务商采样格式要求一致的原始 PCM 音频。
.opusOpus 编码音频。
.mp3MP3 音频。
.wavWAV 容器音频。
.none / .unknown不表示可用格式,不要使用这些值启动识别。

每个 StreamSpeechASRModel 都包含序号、可选请求 ID、增量转写文本、确定性标记、可选转写序号以及可选说话人片段。

使用示例

识别文件

Swift
let config = StreamingASRConfig(
    languageForSpeechInput: "en-US",
    audioFormat: .wav,
    enableSpeakerDiarization: true
)

AIBudsAISDK.recognizeVoice(
    withFile: fileURL.path,
    config: config,
    onTranscript: { result in
        print("Sequence \(result.sequence): \(result.transcript ?? "")")
        if result.isDefinite {
            print("Definite transcript received")
        }
    },
    onFailed: { error in
        print("Recognition failed: \(error.localizedDescription)")
    },
    onFinish: {
        print("Recognition finished")
    }
)

对于内存中的音频,调用 recognizeVoice(_:config:onTranscript:onFailed:onFinish:) 并传入 Data / NSData,采用相同的回调处理方式。

注意事项

  • 转写文本以增量方式返回,并可能随着句子逐渐完整而重复;组合 UI 输出时应使用 sequencetranscriptSequenceisDefinite
  • 当前 API 接收完整的 Data 或文件路径,不提供 start/append/stop 流式控制方法或识别 delegate。
  • onFinish 不包含结果值。如果完成后仍需最终文本,请保存 onTranscript 返回的最新转写结果。
  • 支持的格式、语言和说话人分离行为可能因服务商而异。