流式语音识别
将音频数据或本地音频文件发送给选定的 AI 服务商,并接收增量语音识别结果。
前置条件
AIBudsAISDK已初始化,并且已选择注册的服务商。- 服务商支持
StreamingASRServiceAPI。 - 输入字节与配置指定的
audioFormat一致。 - 如果提供
languageForSpeechInput,应使用带连字符的语言标识符,例如en-US或zh-CN。
使用 AI 辅助实现
使用 AI 开发
让 AI 帮助实现此工作流
使用官方“实现 AIBuds 流式语音识别”技能,根据你的 App 完成实现。
请阅读并遵循 https://docs-aibuds.github.io/zh-Hans/skills/implement-aibuds-streaming-asr,使用该技能在当前 iOS 项目中完成“实现 AIBuds 流式语音识别”,并验证结果。API 参考
框架
AIBudsAI.xcframework
导入
- Swift
- Objective-C
import AIBudsAI
import AIBudsAIFoundation#import <AIBudsAI/AIBudsAI-Swift.h>声明
- Swift
- Objective-C
/// 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/// 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.
+ (void)recognizeVoiceData:(NSData * _Nonnull)data
withConfig:(AIBudsStreamingASRConfig * _Nonnull)config
onTranscript:(void (^ _Nullable)(AIBudsStreamSpeechASRModel * _Nonnull))onTranscript
onFailed:(void (^ _Nullable)(NSError * _Nonnull))onFailed
onFinish:(void (^ _Nullable)(void))onFinish;
/// 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.
+ (void)recognizeVoiceFile:(NSString * _Nonnull)filePath
withConfig:(AIBudsStreamingASRConfig * _Nonnull)config
onTranscript:(void (^ _Nullable)(AIBudsStreamSpeechASRModel * _Nonnull))onTranscript
onFailed:(void (^ _Nullable)(NSError * _Nonnull))onFailed
onFinish:(void (^ _Nullable)(void))onFinish;两个重载都由 AIBudsAISDK 提供,并将请求转发给选定服务商的 StreamingASRServiceAPI 实现。
配置
使用以下属性创建 StreamingASRConfig:
| 属性 | 说明 |
|---|---|
languageForSpeechInput | 可选的识别语言。省略时,服务商使用当前 App 本地化语言。 |
audioFormat | 输入格式,例如 .pcm、.mp3 或 .wav。 |
enableSpeakerDiarization | 是否由服务商识别不同说话人的语音片段,默认为 false。 |
输入格式使用 AIAudioFormat:
| 值 | 输入数据 |
|---|---|
.pcm | 与所选服务商采样格式要求一致的原始 PCM 音频。 |
.opus | Opus 编码音频。 |
.mp3 | MP3 音频。 |
.wav | WAV 容器音频。 |
.none / .unknown | 不表示可用格式,不要使用这些值启动识别。 |
每个 StreamSpeechASRModel 都包含序号、可选请求 ID、增量转写文本、确定性标记、可选转写序号以及可选说话人片段。
使用示例
识别文件
- Swift
- Objective-C
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")
}
)AIBudsStreamingASRConfig *config =
[[AIBudsStreamingASRConfig alloc] initWithLanguageForSpeechInput:@"en-US"
audioFormat:AIBudsAIAudioFormatWav
enableSpeakerDiarization:YES];
[AIBudsAISDK recognizeVoiceFile:fileURL.path
withConfig:config
onTranscript:^(AIBudsStreamSpeechASRModel *result) {
NSLog(@"Sequence %ld: %@", (long)result.sequence, result.transcript ?: @"");
if (result.isDefinite) {
NSLog(@"Definite transcript received");
}
}
onFailed:^(NSError *error) {
NSLog(@"Recognition failed: %@", error.localizedDescription);
}
onFinish:^{
NSLog(@"Recognition finished");
}];对于内存中的音频,调用 recognizeVoice(_:config:onTranscript:onFailed:onFinish:) 并传入 Data / NSData,采用相同的回调处理方式。
注意事项
- 转写文本以增量方式返回,并可能随着句子逐渐完整而重复;组合 UI 输出时应使用
sequence、transcriptSequence和isDefinite。 - 当前 API 接收完整的
Data或文件路径,不提供 start/append/stop 流式控制方法或识别 delegate。 onFinish不包含结果值。如果完成后仍需最终文本,请保存onTranscript返回的最新转写结果。- 支持的格式、语言和说话人分离行为可能因服务商而异。