跳到主要内容

AI 同声传译(TSAIInterpreterInterface)

同声传译通过设备麦克风建立 ASR → 翻译 → 可选 TTS 的长会话管线。协议层提供单向翻译;需要双向对话时,App 应停止当前会话并交换语言后重新启动。

前提条件​

TSAIContext *context = [TSAIKit sharedInstance].activeContext;
if (![context supportsAIFeatures:TSAIFeatureInterpretation]) {
return;
}
id<TSAIInterpreterInterface> interpreter = context.interpreter;

设备必须已连接并允许使用麦克风音频,App 还需完成录音权限授权。

TSAIInterpreterConfig​

属性类型说明
audioRouteConfigurationTSAIAudioRouteConfiguration *本次会话的完整音频路由;显式值优先于旧版播放字段
sourceLanguageTSAILanguage源语言,可使用 TSAILanguageAuto
targetLanguageTSAILanguage目标语言,必须是具体语言
enableVoiceOutputBOOL是否生成译文 TTS 音频
autoPlayVoiceBOOL是否由 SDK 播放译文音频
preferSpeakerOutputBOOLSDK 播放时是否优先手机扬声器
speakerIdNSString *TTS 发音人标识

defaultConfig 默认开启语音输出、自动播放和扬声器优先。调用前必须设置源语言和目标语言。

内容、事件与报告​

模型主要属性说明
TSAIInterpreterContentcontentType、utteranceIndex、language流式内容类型和语句序号
TSAIInterpreterContenttext、isTextFinal原文或译文累积文本
TSAIInterpreterContentaudioChunk、audioFormat、isAudioFinal译文 TTS 增量音频
TSAIInterpreterEventeventType、timestamp、detectedLanguageVAD、播放、语言检测和错误事件
TSAIInterpreterUtteranceindex、startTime、originalText、translatedText、源/目标语言一条稳定语句记录
TSAIInterpreterReport配置回显、startTime、endTime、duration、endReason、rawAudioFilePath、utterances可直接持久化的完整会话档案

TSAIInterpreterContentType​

枚举值内容语义
TSAIInterpreterContentTypeOriginalTextASR 原文,text 为累积值
TSAIInterpreterContentTypeTranslatedText翻译文本,text 为累积值
TSAIInterpreterContentTypeAudioChunkTTS 音频,audioChunk 为增量值

同一个 utteranceIndex 的原文、译文和音频属于同一句话。

事件、状态与结束原因​

TSAIInterpreterEventType数值说明
Unknown-1未知事件
SessionStarted1会话已启动
UtteranceStarted / UtteranceEnded2 / 3语句开始/结束
LanguageDetected4已检测源语言
TranslationPlaybackStarted / TranslationPlaybackEnded5 / 6译文音频开始/结束播放
NetworkError7网络异常
BleDisconnected8BLE 设备断连
枚举枚举值与数值
TSAIInterpreterStateIdle = 0、Started = 1、Processing = 2、Ended = 3、Failure = 255
TSAIInterpreterEndReasonUnknown = -1、UserStop = 1、Interrupted = 2、Error = 3

表格中的短名称应加上对应枚举前缀,例如 TSAIInterpreterEventTypeSessionStarted。

启动会话​

- (NSString *)startInterpretationWithConfig:(TSAIInterpreterConfig *)config
onContent:(nullable TSAIInterpreterContentBlock)onContent
onEvent:(nullable TSAIInterpreterEventBlock)onEvent
completion:(nullable TSAIInterpreterCompletionBlock)completion;
TSAIInterpreterConfig *config = [TSAIInterpreterConfig defaultConfig];
config.sourceLanguage = TSAILanguageChineseSimplified;
config.targetLanguage = TSAILanguageEnglishUS;
config.enableVoiceOutput = YES;
config.autoPlayVoice = YES;

NSString *taskId = [interpreter startInterpretationWithConfig:config
onContent:^(TSAIInterpreterContent *content) {
switch (content.contentType) {
case TSAIInterpreterContentTypeOriginalText:
TSLog(@"原文: %@", content.text);
break;
case TSAIInterpreterContentTypeTranslatedText:
TSLog(@"译文: %@", content.text);
break;
default:
break;
}
}
onEvent:^(TSAIInterpreterEvent *event) {
TSLog(@"同传事件: %ld", (long)event.eventType);
}
completion:^(TSAIInterpreterReport *report, NSError *error) {
if (error) {
TSLog(@"同传失败: %@", error.localizedDescription);
return;
}
TSLog(@"同传结束,共 %lu 句", (unsigned long)report.utterances.count);
}];

当 autoPlayVoice 为 YES 时,SDK 已负责音频播放,App 不得再次播放 AudioChunk;设为 NO 时,App 才需要自行缓存并播放增量音频。

停止与状态监听​

- (void)stopInterpretationWithTaskId:(NSString *)taskId;
- (void)registerAIInterpreterStateDidChanged:(nullable TSAIInterpreterStateBlock)stateBlock;
[interpreter registerAIInterpreterStateDidChanged:^(TSAIInterpreterState state) {
TSLog(@"同传状态: %ld", (long)state);
}];

// 用户结束会话
[interpreter stopInterpretationWithTaskId:taskId];

同传只提供 stop,不提供 cancel。停止会关闭麦克风流、冲刷最后一段缓冲音频,并通过原 completion 返回最终报告。设备 PCM 播放会等待 DeviceBridge 的真实终态;Bridge 无响应时以超时错误结束。播放链路收尾失败时可能同时返回有效 Report 和 error,此时仍可保存 Report。

设备发起语音翻译​

TSAIDeviceVoiceTranslationConfig *config =
[TSAIDeviceVoiceTranslationConfig defaultConfig];
config.audioRouteConfiguration = [TSAIAudioRouteConfiguration defaultConfiguration];
config.fallbackSourceLanguage = TSAILanguageChineseSimplified;
config.fallbackTargetLanguage = TSAILanguageEnglishUS;

NSString *taskId = [interpreter startDeviceVoiceTranslationWithConfig:config
completion:^(BOOL success, NSError *error) {
if (!success) {
TSLog(@"设备语音翻译配置失败: %@", error.localizedDescription);
}
}];

// [interpreter stopDeviceVoiceTranslationWithTaskId:taskId];

兜底语言只在设备语音包未携带语种时生效;Unknown 表示禁用对应兜底。

注意事项​

  1. 会话中不能修改语言;需要切换时停止后重建配置。
  2. sourceLanguage 可以为 Auto,targetLanguage 必须为具体语言。
  3. completion 返回的 Report 包含全部稳定 utterance,可直接用于翻译历史。
  4. 页面退出时注销状态监听,并停止仍在运行的会话。
  5. App 自行播放译文时不保证具备 SDK 托管播放链路的 AEC 效果。