同声传译功能提供了多语言实时翻译服务,支持在会议中进行多语言同声传译。该功能允许参会者选择不同的语言通道,实现跨语言交流,适用于国际化会议场景。
在会议中配置同声传译功能:
// 发送同声传译语言配置 - 发送传译配置信息
NemoSdkAdaptor::getInstance()->sendTranslationLanguageConfig("remote_url", "call_url", "meeting_id", "config_json");
// 开启额外媒体会话 - 启动额外的媒体会话
NemoSdkAdaptor::getInstance()->openExtraMediaSession();
// 打开语言通道 - 打开指定的语言通道
NemoSdkAdaptor::getInstance()->openLanguageChannel("language_id");
管理音频采集和通道:
// 开启指定音频通道采集 - 限制音频采集来源
NemoSdkAdaptor::getInstance()->audioCaptureLimitSourceKey("source_key");
// 清除音频通道采集限制 - 清除音频采集限制
NemoSdkAdaptor::getInstance()->clearAudioCaptureLimitSourceKey();
// 设置音频压制 - 启用音频压缩限制
NemoSdkAdaptor::getInstance()->setAudioCompressLimit(true);
配置翻译员专用通道:
// 打开翻译员通道 - 打开翻译员专用语言通道
NemoSdkAdaptor::getInstance()->openLanguageTranslatorChanel("translator_id");
// 重置回普通通道 - 重置为普通语言通道
NemoSdkAdaptor::getInstance()->resetLanguageChannel();
// 获取当前通道ID - 获取最后使用的语言通道ID
NemoSdkAdaptor::getInstance()->getLastLanguageId();
API: sendTranslationLanguageConfig
接口定义:
virtual void sendTranslationLanguageConfig(const char* remoteUrl, const char* callurl, const char* meetingId, const char* config) = 0;
参数:
remoteUrl
(const char*): 会议callurlcallurl
(const char*): 当前用户callurlmeetingId
(const char*): 会议idconfig
(const char*): 同声传译配置(json字符串)示例:
// 配置多语言传译
const char* config = "{\"languages\":[\"zh-CN\",\"en-US\"]}";
NemoSdkAdaptor::getInstance()->sendTranslationLanguageConfig(
"remote_url", "call_url", "meeting_id", config
);
接口定义:
virtual void refeshTranslateConfig(bool micMute, bool originalChanelMute = false) = 0;
参数:
micMute
(bool): 是否关闭麦克风originalChanelMute
(bool): 是否关闭原音,默认为false示例:
NemoSdkAdaptor::getInstance()->refeshTranslateConfig(false, false);
接口定义:
virtual void refreshTranslatorConfig(bool micMute) = 0;
参数:
micMute
(bool): 是否关闭麦克风示例:
NemoSdkAdaptor::getInstance()->refreshTranslatorConfig(false);
API: audioCaptureLimitSourceKey
接口定义:
virtual void audioCaptureLimitSourceKey(int sourceKey, bool enable, bool isContent) = 0;
参数:
sourceKey
(int): 指定音频通道enable
(bool): 开启或关闭isContent
(bool): 是否为共享内容示例:
NemoSdkAdaptor::getInstance()->audioCaptureLimitSourceKey(1, true, false);
sourceKey
: 音频源标识示例:
// 只采集指定通道的音频
NemoSdkAdaptor::getInstance()->audioCaptureLimitSourceKey("channel_1");
API: clearAudioCaptureLimitSourceKey
示例:
NemoSdkAdaptor::getInstance()->clearAudioCaptureLimitSourceKey();
接口定义:
virtual void setAudioCompressLimit(int sourceKey, float limit) = 0;
参数:
sourceKey
(int): 音频通道id,原生id为0limit
(float): 音频压制比例,默认0.5,范围0到1示例:
// 启用原声压制
NemoSdkAdaptor::getInstance()->setAudioCompressLimit(0, 0.5f);
// 关闭原声压制
NemoSdkAdaptor::getInstance()->setAudioCompressLimit(0, 1.0f);
接口定义:
virtual void openExtraMediaSession(XYSessionInfo param) = 0;
参数:
param
(XYSessionInfo): 额外会话配置示例:
XYSessionInfo sessionInfo;
sessionInfo.sessionId = 1;
sessionInfo.language = "en-US";
NemoSdkAdaptor::getInstance()->openExtraMediaSession(sessionInfo);
接口定义:
virtual void closeExtraMediaSession(int sessionId) = 0;
参数:
sessionId
(int): 会话id示例:
NemoSdkAdaptor::getInstance()->closeExtraMediaSession(1);
接口定义:
virtual void updataExtraMediaSession(XYSessionInfo param) = 0;
参数:
param
(XYSessionInfo): 额外会话配置示例:
XYSessionInfo sessionInfo;
sessionInfo.sessionId = 1;
sessionInfo.language = "zh-CN";
NemoSdkAdaptor::getInstance()->updataExtraMediaSession(sessionInfo);
API: openLanguageChannel
接口定义:
virtual void openLanguageChannel(int id, const char* language, bool audioMute = false, bool originalChanelMute = false) = 0;
参数:
id
(int): 同声传译通道idlanguage
(const char*): 语言描述audioMute
(bool): 是否关闭麦克风,默认为falseoriginalChanelMute
(bool): 是否关闭原音,默认为false示例:
// 打开英语通道
NemoSdkAdaptor::getInstance()->openLanguageChannel(1, "en-US", false, false);
// 打开中文通道
NemoSdkAdaptor::getInstance()->openLanguageChannel(2, "zh-CN", false, false);
// 打开日语通道
NemoSdkAdaptor::getInstance()->openLanguageChannel(3, "ja-JP", false, false);
API: openLanguageTranslatorChanel
接口定义:
virtual void openLanguageTranslatorChanel(int id, const char* language, bool audioMute = false) = 0;
参数:
id
(int): 同声传译通道idlanguage
(const char*): 语言描述audioMute
(bool): 是否关闭麦克风,默认为false示例:
NemoSdkAdaptor::getInstance()->openLanguageTranslatorChanel(1, "en-US", false);
API: resetLanguageChannel
接口定义:
virtual void resetLanguageChannel(bool clearTranslationSource) = 0;
参数:
clearTranslationSource
(bool): 是否清除所有同声传译信息示例:
NemoSdkAdaptor::getInstance()->resetLanguageChannel(true);
API: getLastLanguageId
接口定义:
virtual int getLastLanguageId() = 0;
返回值:
int
: 当前通道id示例:
int currentLanguageId = NemoSdkAdaptor::getInstance()->getLastLanguageId();
class TranslationManager {
private:
bool _isTranslationEnabled = false;
bool _isExtraMediaSessionOpen = false;
std::string _currentLanguageId = "";
std::string _currentTranslatorId = "";
bool _audioCompressEnabled = false;
public:
// 传译配置
void enableTranslation(const std::vector<std::string>& languages,
const std::string& defaultLanguage = "en") {
// 构建配置JSON
std::string config = R"({
"languages": [)";
for (size_t i = 0; i < languages.size(); ++i) {
config += "\"" + languages[i] + "\"";
if (i < languages.size() - 1) config += ",";
}
config += R"(],
"defaultLanguage": ")" + defaultLanguage + R"(",
"autoTranslate": true
})";
NemoSdkAdaptor::getInstance()->sendTranslationLanguageConfig(config);
_isTranslationEnabled = true;
}
void refreshTranslationConfig() {
NemoSdkAdaptor::getInstance()->refeshTranslateConfig();
}
void refreshTranslatorConfig() {
NemoSdkAdaptor::getInstance()->refreshTranslatorConfig();
}
// 音频控制
void limitAudioCapture(const std::string& sourceKey) {
NemoSdkAdaptor::getInstance()->audioCaptureLimitSourceKey(sourceKey);
}
void clearAudioCaptureLimit() {
NemoSdkAdaptor::getInstance()->clearAudioCaptureLimitSourceKey();
}
void setAudioCompress(bool enabled) {
_audioCompressEnabled = enabled;
NemoSdkAdaptor::getInstance()->setAudioCompressLimit(enabled);
}
// 媒体会话管理
void openExtraMediaSession() {
if (!_isExtraMediaSessionOpen) {
NemoSdkAdaptor::getInstance()->openExtraMediaSession();
_isExtraMediaSessionOpen = true;
}
}
void closeExtraMediaSession() {
if (_isExtraMediaSessionOpen) {
NemoSdkAdaptor::getInstance()->closeExtraMediaSession();
_isExtraMediaSessionOpen = false;
}
}
void updateExtraMediaSession() {
NemoSdkAdaptor::getInstance()->updataExtraMediaSession();
}
// 语言通道管理
void openLanguageChannel(const std::string& languageId) {
_currentLanguageId = languageId;
NemoSdkAdaptor::getInstance()->openLanguageChannel(languageId);
}
void openTranslatorChannel(const std::string& translatorId) {
_currentTranslatorId = translatorId;
NemoSdkAdaptor::getInstance()->openLanguageTranslatorChanel(translatorId);
}
void resetToNormalChannel() {
_currentLanguageId = "";
_currentTranslatorId = "";
NemoSdkAdaptor::getInstance()->resetLanguageChannel();
}
std::string getCurrentLanguageId() {
return NemoSdkAdaptor::getInstance()->getLastLanguageId();
}
// 传译配置回调
void onTranslationLanguageConfigResult(const XYString& code, const XYString& result) {
QString errCode(code.str());
QString resultStr(result.str());
if (errCode == SDKError_NoError) {
qDebug() << "Translation config result:" << resultStr;
emit translationConfigResult(resultStr);
} else {
qDebug() << "Translation config failed:" << errCode;
emit translationConfigFailed(errCode);
}
}
// 传译消息回调
void onTranslatioWSMessageRecieved(const XYString& message) {
QString messageStr(message.str());
qDebug() << "Translation WS message received:" << messageStr;
emit translationMessageReceived(messageStr);
}
// Getter方法
bool isTranslationEnabled() const { return _isTranslationEnabled; }
bool isExtraMediaSessionOpen() const { return _isExtraMediaSessionOpen; }
std::string getCurrentLanguageId() const { return _currentLanguageId; }
std::string getCurrentTranslatorId() const { return _currentTranslatorId; }
bool isAudioCompressEnabled() const { return _audioCompressEnabled; }
};
语言标识 | 语言名称 | 说明 |
| 英语 | English |
| 中文 | Chinese |
| 日语 | Japanese |
| 韩语 | Korean |
| 法语 | French |
| 德语 | German |
| 西班牙语 | Spanish |
| 俄语 | Russian |
同声传译功能提供以下特性:
音频处理功能包括:
通道管理功能支持:
方法 | 描述 | 链接 |
同声传译配置设置 | ||
开启或关闭只采集指定音频通道的声音 | ||
清除只采集指定音频通道声音设定 | ||
关闭额外媒体会话 | ||
开启额外媒体会话 | ||
更新额外媒体会话 | ||
设置同声传译原声压制 | ||
打开同声传译非翻译员通道(普通参会者) | ||
打开同声传译翻译员通道 | ||
重置回普通通道 | ||
获取当前通道id | ||
更新非翻译员同声传译配置 | ||
刷新翻译员同声传译配置 |
回调 | 描述 | 链接 |
传译配置结果回调 | ||
传译WebSocket消息接收回调 |