跳到主要内容
版本:v1.2.0

通道配置

通道配置 TmkTranslationChannelConfig

Scenario

public enum Scenario {
case presentation
case listen
case oneToOne
case listenFar
}

说明:

  • listen

    • 收听模式,单声道输入。
  • oneToOne

    • 一对一模式,双声道输入。
  • presentationlistenFar

    • 兼容保留场景,是否启用以具体业务配置为准。

TranslationMode

public enum TranslationMode {
case offline
case online
case auto
case mix
}

说明:

  • offline:离线翻译。

  • online:在线翻译。

  • auto:自动选择。

  • mix:离线 + 在线混合。

注意
  • 当前 SDK 实现中,automix 会落到在线引擎执行。
  • 对外接入时,如果需要明确行为,建议优先使用 .online.offline

EngineType

public enum EngineType {
case offline
case online
}

用于识别当前通道实际使用的引擎类型。

TmkTranslationPlaybackAudioDataMode

public enum TmkTranslationPlaybackAudioDataMode {
case audioFrameDelegate
case pullPlaybackAudioFrameRawData
}

说明:

  • audioFrameDelegate

    • 使用音频帧代理方式获取下行音频。
  • pullPlaybackAudioFrameRawData

    • 使用主动拉取方式获取下行音频。

TmkTranslationPlaybackAudioPullConfig

public struct TmkTranslationPlaybackAudioPullConfig {
public let intervalMs: Int
public let lengthInByte: Int?

public init(intervalMs: Int = 10, lengthInByte: Int? = nil)
}

字段说明:

  • intervalMs

    • 拉取周期,单位毫秒。

    • 默认 10

  • lengthInByte

    • 每次拉取的字节数。

    • nil 表示由 SDK 自动计算。

TmkTranslationChannelConfig.Builder

public final class Builder {
public init()
public func setRoom(_ room: TmkTranslationRoom) -> Builder
public func setMode(_ mode: TranslationMode) -> Builder
public func setScenario(_ scenario: Scenario) -> Builder
public func setSourceLang(_ langCode: String) -> Builder
public func setTargetLang(_ langCode: String) -> Builder
public func setPCMSampleRate(_ sampleRate: Int) -> Builder
public func setPCMChannels(_ channels: Int) -> Builder
public func setPlaybackAudioDataMode(_ mode: TmkTranslationPlaybackAudioDataMode) -> Builder
public func setPlaybackAudioPullConfig(_ config: TmkTranslationPlaybackAudioPullConfig) -> Builder
public func setMessageTunnel(_ tunnel: TmkTranslationMessageTunnel) -> Builder
public func setModelRootDirectory(_ directory: String) -> Builder
public func setSpeakers(_ speakers: [TmkSpeaker]) -> Builder
public func setChannelAudioMode(_ mode: TmkChannelAudioMode) -> Builder
public func setOfflineAudioChannelMode(_ mode: TmkOfflineAudioChannelMode) -> Builder
public func setTranslateMode(_ mode: TmkTranslateDeliveryMode) -> Builder
public func setCapabilityTier(_ tier: TmkRoomScenario) -> Builder
public func build() -> TmkTranslationChannelConfig
}

各接口说明:

setRoom(_:)

  • 在线翻译必填。

  • 离线翻译不需要设置房间。

setMode(_:)

  • 设置翻译模式,通常使用 .online.offline

setScenario(_:)

  • 设置通道场景。

  • 收听模式一般传 .listen

  • 一对一一般传 .oneToOne

setSourceLang(_:) / setTargetLang(_:)

  • 设置源语言和目标语言代码。

  • 在线通常使用 BCP-47 代码,例如 zh-CNen-US

  • 离线通常使用短码,例如 zhen

setPCMSampleRate(_:)

  • 设置输入 PCM 采样率。

  • 当前 SDK 与 Demo 主流程以 16000 为准。

  • 其他采样率暂未完成完整兼容性验证,正式接入建议优先使用 16000

setPCMChannels(_:)

  • 设置输入 PCM 通道数。

  • 1:单声道。

  • 2:双声道。

setPlaybackAudioDataMode(_:)

  • 设置下行音频获取方式。

setPlaybackAudioPullConfig(_:)

  • 设置播放音频拉取参数。
注意

该配置是否生效,取决于当前引擎与音频输出模式;接入时不要将其视为所有场景都必然生效的控制项。

setMessageTunnel(_:)

  • 设置文本消息通道。

  • 仅在线翻译生效,离线翻译会忽略该配置。

  • 默认使用房间上的 messageTunnel

setModelRootDirectory(_:)

  • 仅离线翻译需要设置。

  • 传模型根目录绝对路径。

setSpeakers(_:)

  • 设置在线/离线 TTS 音色。

  • 不调用时使用 SDK 默认音色。

  • 收听模式通常只设置 .left 声道。

  • 一对一模式可分别设置 .left.right 声道。

let speakers = [
TmkSpeaker(channel: .left, gender: .female),
TmkSpeaker(channel: .right, gender: .male)
]

setOfflineAudioChannelMode(_:)

  • 旧兼容接口,建议新接入使用 setChannelAudioMode(_:)

  • .stereo:默认值,左右声道混成立体声输出。

  • .mono:按单声道输出,适合业务侧自行管理播放声道的场景。

  • 离线收听模式固定按单声道输出。

setChannelAudioMode(_:)

  • 设置离线一对一通道音频模式。

  • .standard:标准模式。

  • .lowLatency:低延迟模式。

  • 在线一对一通道音频模式以创建房间时的 TmkTranslationRoomConfig.dialogConversationAudioMode 为准。

setTranslateMode(_:)

  • 设置离线通道翻译下发模式。

  • .partial:中间态下发,持续输出未成句的中间结果(isFinal=false),时延更低。

  • .stable / .default:断句成句后下发,结果更完整。

  • 仅离线引擎消费;在线引擎忽略此字段(在线由建房时 translateMode 决定)。

  • 运行时可通过 channel.updateTranslateMode(_:completion:) 切换。

setCapabilityTier(_:)

  • 设置离线能力档位,控制离线引擎按需加载哪些模型:

    • .recognize:仅 ASR,只输出识别文本,不加载 MT/TTS 模型。

    • .toText:ASR+MT,输出识别和翻译文本,不加载 TTS 模型。

    • .toSpeech:完整链路(默认),ASR+MT+TTS 全部加载。

  • 仅离线引擎消费;在线引擎忽略(在线由建房/updateScenario 服务端裁剪)。

  • 运行时可通过 channel.updateScenario(_:completion:) 切换。

build()

  • 构建不可变的 TmkTranslationChannelConfig

音色与离线输出通道模型

TmkSpeaker

public enum TmkSpeakerChannel: String {
case left
case right
}

public enum TmkSpeakerGender: String {
case male
case female
}

public struct TmkSpeaker {
public let channel: TmkSpeakerChannel
public let gender: TmkSpeakerGender
}

TmkOfflineAudioChannelMode

public enum TmkOfflineAudioChannelMode {
case mono
case stereo
}

创建通道接口(在线/离线统一入口)

public func createTranslationChannel(
_ config: TmkTranslationChannelConfig,
callback: @escaping CreateChannelCallback
)

public func createTranslationChannel(
_ config: TmkTranslationChannelConfig,
listener: TmkTranslationListener?,
callback: @escaping CreateChannelCallback
)

参数说明:

  • config

    • 通道配置对象。
  • listener

    • 可选,启动前预绑定的监听器。
  • callback

    • 通道创建结果回调。

返回值:

  • 无返回值。

  • 创建成功后,通过 callback(.success(TmkTranslationChannel)) 返回通道对象。

说明:

  • 在线和离线都通过该接口创建通道。

  • SDK 会根据 config.mode 选择实际引擎:

    • mode = .online:在线引擎

    • mode = .offline:离线引擎

  • SDK 会在创建成功后自动启动通道。

在线通道创建示例

收听模式

let config = TmkTranslationChannelConfig.Builder()
.setRoom(room)
.setScenario(.listen)
.setMode(.online)
.setSourceLang("zh-CN")
.setTargetLang("en-US")
.setPCMSampleRate(16_000)
.setPCMChannels(1)
.build()

TmkTranslationSDK.shared.createTranslationChannel(config, listener: self) { result in
switch result {
case .success(let channel):
self.channel = channel
case .failure(let error):
print(error.message)
}
}

一对一模式

let config = TmkTranslationChannelConfig.Builder()
.setRoom(room)
.setScenario(.oneToOne)
.setMode(.online)
.setSourceLang("zh-CN")
.setTargetLang("en-US")
.setSpeakers([
TmkSpeaker(channel: .left, gender: .female),
TmkSpeaker(channel: .right, gender: .male)
])
.setPCMSampleRate(16_000)
.setPCMChannels(2)
.build()

TmkTranslationSDK.shared.createTranslationChannel(config) { result in
switch result {
case .success(let channel):
channel.setTranslationListener(self)
self.channel = channel
case .failure(let error):
print(error.message)
}
}