声音转换Android SDK
概述
本 SDK 旨在使开发者更方便的接入标贝科技的变声功能。里面内置了录音功能,免去开发者实现录音的功能。
SDK 下载地址
Android Studio集成SDK(参考demo)
- 1. 在工程下的build.gradle文件中添加以下代码。
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
- 2. 在主model下build.gradle文件中添加以下代码。建议使用此方式
dependencies { implementation 'com.github.data-baker.BakerAndroidSdks:bakerbasecomponent:2.0.11' implementation ' com.github.data-baker.BakerAndroidSdks:bakerhttp:2.0.11' implementation ' com.github.data-baker.BakerAndroidSdks: voiceconvert:2.0.11' implementation 'com.squareup.okhttp3:okhttp:4.2.2' implementation 'com.google.code.gson:gson:2.8.6' }
- 或者将.jar/.aar包添加至工程module下,lib文件夹里。
- 2021年6月,标贝计划开源sdk源码,所以也可以直接集成源码model。
- 注意:SDK内使用了okhttp、gson所以需要开发者添加以这两个库,若工程内已存在,无需重复添加。okhttp请使用4.x版本,以免出现版本兼容bug。
- 3. 在主Module的AndroidManifest.xml文件中添加权限。6.0以上需要动态申请RECORD_AUDIO权限。
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
- 4. 在主Module的AndroidManifest.xml文件中的application节点添加以下属性。
android:usesCleartextTraffic="true"
- 5.关于混淆
SDK中用到了okhttp和gson,所以需要将这两个包的混淆代码添加上。具体混淆代码可以去官方文档上查阅。如果项目中已经有这两个包的混淆代码,不必重复添加。请加上我们SDK其他类的混淆代码,如下:
-keep class com.databaker.voiceconvert.** { *; } -keep class com.baker.sdk.http.**{*;} -keep class com.baker.sdk.basecomponent.**{*;}
SDK 关键类
1. VoiceConvertManager:声音转换关键业务处理类,全局只需一个实例即可。
2. VoiceConvertCallBack:声音转换业务回调类。您可以在这些个回调方法中获取到当前转换的进度状态和各类数据结果,或者错误信息。注意回调方法是运行在子线程的。调用开始转换时 请将此callback提交给VoiceConvertManager实例。
SDK 调用说明
1. 实例化VoiceConvertManager类,得到VoiceConvertManager的实例。
VoiceConvertManager convertManager = new VoiceConvertManager();
2. 初始化SDK。
convertManager.init(Context context, String clientId, String clientSecret, AuthCallback authCallback);
初始化这一步会进行网络请求,做授权操作。所以在实际调用过程中,请将此步骤尽可能提前调用,保障足够时间进行网络授权请求。
3. 声音转换支持2种转换场景,第一种是SDK内调用手机麦克风录音、上传完成声音转换返回转换结果。此种方式需要接入方提前获取应用的录音权限。第二种场景是接收字节流,SDK收到数据后,上传服务器完成转换,返回转换结果。适用于语音文件识别或者调用方自有数据转换。
第一种场景(参考: com.baker.sdk.demo.convert. VoiceConvertFromMicActivity):
A. 需要应用取得录音权限。
B. 通过VoiceConvertManager实例,设置各类参数。
C. convertManager.startFromMic(callBack); 开启录音转换。
D. 在VoiceConvertCallBack回调中接收状态、转换结果、原始录音数据或错误信息等。
E. 通过convertManager.stopRecord();此方法结束录音转换。
F. 根据回调方法onAudioOutput()中isLast参数判断转换数据返回是否完整结束。
第二种场景(参考: com.baker.sdk.demo.convert. VoiceConvertFromFileActivity):
A. 通过VoiceConvertManager实例,设置各类参数。
B. convertManager. startFromBytes (callBack); 通知SDK准备转换。
C. 在VoiceConvertCallBack的onReady() 回调方法中得到SDK已准备好后。
D. 多次调用convertManager. sendAudio (byte[] data, boolean isLast);方法向SDK输入待转换语音字节流。此方法单次接收固定长度(5120)字节数组。最后一片数据可以是其他长度字节数组,且最后一片数据isLast=true的标签必须发送。
E. 在VoiceConvertCallBack回调中接收状态、转换结果、原始录音数据或错误信息等。
F. 此种方式,每次在调用convertManager. sendAudio时,前后2次间隔时 间不能超过10秒。
- 4. 在确定不再使用转换后,调用convertManager.release()释放SDK资源。
- 5. 如果需要发起新的转换请求,可以重复第3.3步。
参数说明
1. 基本调用方法说明
参数 | 参数名称 | 是否必填 | 说明 |
---|---|---|---|
init() | 初始化SDK | 是 | 必须调用此方法初始化SDK,祥见3.2 |
startFromMic() | 开启录音转换 | 否 | 使用sdk内部唤起的录音,进行声音转换 |
stopRecord() | 结束录音 | 否 | 配合startFromMic()方法使用,结束sdk录音转换。 |
startFromBytes() | 开启数据转换 | 否 | 文件或者调用者自有音频数据转换 |
sendAudio() | 发送转换数据 | 否 | 配合startFromBytes方法使用,在onReady()之后,可多次调用此方法。 |
setVoiceName() | 设置目标声音模型名称 | 否 | 音色名称,默认音色"Vc_jiaojiao" |
setVadEnable() | 设置开启VAD | 否 | true代表启动服务端vad功能,默认false。如果启动系统会根据输入音频进行检测,过滤环境噪音。否则直接将原始输入音频进行转换。默认false。 |
setAudioAlign() | 设置音频是否对齐 | 否 | true代表输出音频与输入音频进行对齐,默认false。即开启vad时会保留静音部分,false丢弃静音部分。 默认false。 |
release() | 释放sdk资源 | 否 | 在确定不再使用服务之后,可以调用此方法回收sdk资源,避免内存泄漏等情况。 |
2. VoiceConvertCallBack回调类方法说明
参数 | 参数名称 | 说明 |
---|---|---|
onReady() | 准备就绪 | 授权验证通过,且与服务器连接成功,准备就绪回调 |
canSpeech() | SDK mic准备就绪时回调 | mic初始化成功后,只有使用sdk唤起的系统麦克风录音,才会有此回调 |
onOriginData(byte[] data, int volume) | 原始音频 和 分贝值回调 | 只有使用sdk唤起的系统麦克风录音,才会有此回调 |
onAudioOutput(byte[] audioArray, boolean isLast, String traceId) | 变声后的音频回调 | audioArray 音频序列,isLast 是否是最后一包,traceId 本次声音转换唯一标识id |
onError(String errorCode, String errorMessage, String traceId) | 转换出现错误 | String code是错误码,错误码具体请参考以下错误码对照表。String message是具体的错误信息日志。traceId是服务器运行日志id,可能为空,供错误追溯用。转换过程中出现各种错误情况都会回调此方法。一旦出现错误,此次转换任务中断。 |
错误码
错误码 | 含义 | 类别 |
---|---|---|
19180001 | 没有token,请先调用 init 方法初始化 | SDK内部错误码 |
19180002 | 网络请求出现错误 | |
19180003 | 没有录音权限 | |
10000 | ws数据包解析错误 | 请求参数错误 |
10001 | ws数据包json解析错误 | |
10002 | 请求参数缺少access_token | |
10003 | access_token过期或不合法 | |
10004 | 请求参数缺少 voice_name | |
10005 | voice_name 不存在 | |
20000 | 引擎资源不足,拒绝新建会话。 | 服务端错误 |
20001 | 声音转换出错 | |
20002 | 动态内存申请失败 | |
20003 | 向客户端推送响应失败 | |
20004 | 其他未定义的内部错误 | |
30000 | 会话进行时客户端主动关闭 | 客户端错误 |
30001 | 会话空闲超时,超过一定时间没有数据传输导致会话空闲超时,主动断开连接。 |