本文介绍如何在你的项目中集成和使用标贝声音转换插件,包括 Android 和 iOS 平台。
标贝声音转换插件是对离线实时语音转换核心 API 的封装。通过声网 SDK v4.x 提供的 setExtensionProperty 或 setExtensionPropertyWithVendor 方法,传入指定的 key
和 value
参数,你可以快速集成标贝的离线实时语音转换能力。
以 setExtensionProperty
为例,其中的 key
参数与标贝的 API 名称完全对应,value
参数以 JSON 格式包装该 API 的部分或全部参数。因此,调用 setExtensionProperty
时只要传入指定的 key
和 value
,就可以调用对应的标贝 API,实现离线实时语音转换的有关功能。setExtensionPropertyWithVendor
同理。
平台 | 语言 | 示例项目 |
---|---|---|
Android | Java | 项目地址 |
iOS | Swift | 项目地址 |
Android
克隆仓库:
git clone https://github.com/data-baker/DBOfflineVoiceConversionFilter.git
在 Android Studio 中打开示例项目 OfflineVoiceConversion_Android
。
将项目与 Gradle 文件同步。
打开 KeyCenter.java
文件,进行如下修改:
clientId
和 clientSecret
。public class KeyCenter {
public static final String CONFIG_JSON;
static {
// 填入 clientId
String clientId = "xxx...";
// 填入 clientSecret
String clientSecret = "xxx...";
String voiceName = "Vc_luoli";
String isLog = "true";
JsonObject configJson = new JsonObject();
configJson.addProperty("clientId", clientId);
configJson.addProperty("clientSecret", clientSecret);
configJson.addProperty("voiceName", voiceName);
configJson.addProperty("isLog", isLog);
CONFIG_JSON = configJson.toString();
}
// 填入 App ID
public final static String APPID = "xxx...";
}
连接一台 Android 真机(非模拟器),运行项目。
iOS
git clone https://github.com/data-baker/DBOfflineVoiceConversionFilter.git
OfflineVoiceConversion_iOS
。DataBakerOfflineVC.xcframework
拖入到项目中。KeyCenter.swift
文件,进行如下修改:clientId
和 clientSecret
。// 填入你的声网 App ID
static let AppId: String = "xxx"
// 填入购买插件后收到的 clientId 和 clientSecret
static let clientId = "xxx"
static let clientSecret = "xxx"
运行成功后,示例项目会安装到你的 Android 或 iOS 设备上。
Android
iOS
插件需要与声网音频 SDK v4.x 搭配使用。参考以下文档集成音频 SDK v4.x 并实现基础的语音通话:
你需要进入声网控制台 > 云市场页面,按照提示购买标贝声音转换插件。随后你会收到一对 clientId 和 clientSecret,用于后续集成插件。
Android
.aar
文件保存到项目文件夹,比如 /app/libs
路径。app/build.gradle
文件,在 dependencies
中添加如下行:implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
iOS
DataBakerOfflineVC.xcframework
拖入到 .xcodeproj
路径下。import DataBakerOfflineVC
下面介绍插件相关接口的调用流程。接口的参数解释详见接口说明。
Android
创建并初始化 RtcEngine
后,首先调用 enableExtension
启用插件,再调用其它 API(enableVideo
、joinChannel
等)。
RtcEngineConfig config = new RtcEngineConfig();
// 加载插件
config.addExtension("databaker_offlinevc");
// 设置监听器
config.mExtensionObserver = this;
mRtcEngine = RtcEngine.create(config);
// 启用插件
mRtcEngine.enableExtension("DataBaker","OfflineVoiceConversion", true);
iOS
创建并初始化 AgoraRtcEngineKit
后,首先调用 enableExtensionWithVendor
启用插件,再调用其它 API(enableVideo
、joinChannelByToken
等)。
agoraKit.enableExtension(withVendor: DBVoiceConvertFilterManager.vendorName(), extension: AUDIO_FILTER_NAME, enabled: true)
收到声网 SDK 的 onExtensionStarted
回调后,调用 setExtensionProperty
(Android)或 setExtensionPropertyWithVendor
(iOS)并传入对应的 key 和 value。
离线声音转换的鉴权方式是按照装机量进行授权的,需要传入你购买插件后获取的 clientId 和 clientSecret。
Android
setExtensionProperty("DataBaker", "OfflineVoiceConversion", "authors", "{\"clientId\": \"xxx...\", \"clientSecret\": \"xxx...\", \"voiceName\": \"Vc_luoli\", \"isLog\": \"true\"}");
iOS
let authorInfo = [
"clientId":clientId,
"clientSecret":clientSecret,
"voiceName":voiceName
]
let isValid = JSONSerialization.isValidJSONObject(authorInfo)
guard isValid else {
print("the Author json is invalid")
return
}
let jsonString = getJSONStringFromDictionary(dictionary: authorInfo as NSDictionary)
agoraKit.setExtensionPropertyWithVendor(DBVoiceConvertFilterManager.vendorName(), extension: AUDIO_FILTER_NAME, key: "authors", value: jsonString)
传入 key 为 enable
,开始进行声音转换。
Android
setExtensionProperty("DataBaker", "OfflineVoiceConversion", "authors", "enable", "true");
iOS
agoraKit.setExtensionPropertyWithVendor(DBVoiceConvertFilterManager.vendorName(), extension: AUDIO_FILTER_NAME, key: "enable", value: value)
Android
setExtensionProperty("DataBaker", "OfflineVoiceConversion", "authors", "voiceName", voiceName);
iOS
agoraKit.setExtensionPropertyWithVendor(DBVoiceConvertFilterManager.vendorName(), extension: AUDIO_FILTER_NAME, key: "voiceName", value: value)
插件相关所有接口的参数解释和错误码,参考接口说明。