声音转换iOS SDK
1.下载安装
2. 兼容性说明
1. 兼容性
系统:iOS 9.0以上版本
CPU架构:arm64 arm64e armv7 armv7s
添加隐私麦克风权限:Privacy - Microphone Usage Description:使用麦克风检测声音
2. SDK关键类
DBOfflineConvertVoiceClient:声⾳转换关键业务处理类,全局只需⼀个实例 即可。
DBOfflineVoiceConvertDelegate:声⾳转换业务回调类。您可以在这些个回调 ⽅法中获取到当前转换的进度状态、转换后声⾳的播放状态和各类数据结果, 或者错误信息。注意回调⽅法都是运⾏在⼦线程的。
调用说明
- 1. 实例化调用对象
- 实例化VoiceConvertOffLineManager类,得到VoiceConvertOffLineManager的实例。
DBOfflineConvertVoiceClient *convertClient = [DBOfflineConvertVoiceClient shareInstance];
[convertClient setupVoiceConvertSDKClientId:clientId clientSecret:clientSecret messageHander:^(NSInteger ret, NSString * _Nonnull message) { if (ret == 0) { NSLog(@"鉴权成功"); }else { NSLog(@"鉴权失败-code:%@-msg: %@",@(ret),message); } }];
- 初始化这⼀步会进⾏⽹络请求,做授权操作。所以在实际调⽤过程中,请将此步骤尽可能提前调⽤,保障⾜够时间进⾏⽹络授权请求。离线设备授权仅第⼀次需要联⽹激活,此后⽆需联⽹授权激活。
- 第⼀种是SDK内调⽤⼿机⻨克⻛录⾳、转换返回转换结果。
- 第⼆种场景是接收pcm⽂件路径,sdk读取⽂件进⾏转换,返回转换结果。
- 第三种场景是接收pcm字节流,SDK收到数据完成转换,返回转换结果。
- 三种⽅式会实时返回转换结果,同时会将转换结果在沙盒中缓存成⼀个pcm⽂件,仅存在⼀个⽂件,后⼀次转换会覆盖前⼀次转换后结果的⽂件。若使⽤第⼀种⽅式也需要接⼊⽅提前获取应⽤的录⾳权限,同时录⾳原⽂件也会缓存⼀份,再次录⾳转换会覆盖前⼀次录⾳备份⽂件。
需要应⽤取得录⾳权限。
- A.调⽤ -(void)startAndRecord;⽅法开启sdk录⾳说话。录⾳开启成功后会回调onReadyForConvert⽅法。录⾳转换过程中,回调⽅法-(void)onResultData:(NSData *)data endflag:(BOOL)endFlag;会实时返回转换 结果。data是转换后数据,endFlag=1代表转换结束。
- B.调⽤- (void)stopRecord;⽅法结束录⾳。转换完成时回调⽅法 - (void)onConvertComplete;会执⾏。
- C.调⽤-(void)play;对转换后声⾳进⾏播放。播放过程中的播放状态回调⽅法详⻅表(4.2)。若需要边转换边播放,可以考虑在-(void)onResultData:(NSData *)dataendflag:(BOOL)endFlag;回调⽅法⾥⾯接收到转换后数据后⾃⾏实现播放逻辑,不使⽤sdk⾃带播放器进⾏播放。若要再次执⾏录⾳、转换、播放,请重复A、B、C步骤即可。
- A.调⽤- (void)startFileConvertPCMPath:(NSString *)path开启转换。SDK准备 好后会回调- (void)onReadyForConvert;⽅法。
- B.在- (void)onReadyForConvert;回调⽅法。转换过程中,回调⽅法-(void)onResultData:(NSData *)data endflag:(BOOL)endFlag;会实时返回转换结果。audioData是转换后数据,endFlag==1代表转换结束。转换完成时回调⽅法 - (void)onConvertComplete;会执⾏。
- C.然后可以调⽤-(void)play;对转换后声⾳进⾏播放。播放过程中的播放状态回调⽅法详⻅表xxx。也可根据⾃身需求,在- (void)onResultData:(NSData*)data endflag:(BOOL)endFlag;回调⽅法⾥⾯接收到转换后数据后⾃⾏实现播放逻辑,不使⽤sdk⾃带播放器进⾏播放。
- 若要再次执⾏转换、播放,请重复A、B、C步骤即可。
- A.调⽤- (void)startConvertByPCM;开启转换。Sdk准备好后会回调 -(void)onReadyForConvert;⽅法。
- B.在 -(void)onReadyForConvert;回调⽅法执⾏后,可多次调⽤-(void)sendData:(NSData *)dataindex:(NSInteger)index;⽅法对⾳频流进⾏转换,index是发包序号,从0开始计数⾃增,最后⼀包index需(乘以-1)变负数。转换过程中,回调⽅法- (void)onResultData:(NSData *)dataendflag:(BOOL)endFlag; 会实时返回转换结果。data是转换后数据,endFlag==1代表转换结束。转换完成时回调⽅法 -(void)onConvertComplete; 会执⾏。
- C.调⽤-(void)play;对转换后声⾳进⾏播放。播放过程中的播放状态回调⽅法详⻅表4.2。也可根据⾃身需求,在- (void)onResultData:(NSData *)dataendflag:(BOOL)endFlag;回调⽅法⾥⾯接收到转换后数据后⾃⾏实现播放逻辑,不使⽤sdk⾃带播放器进⾏播放。
- 若要再次执⾏转换、播放,请重复A、B、C步骤即可。
方法说明
- DBOfflineConvertVoiceClient基本调⽤⽅法说明
方法名 方法作用 说明 - (void)setupVoiceConvertSDK ClientId:(NSString *)clientId clientSecret:(NSString *)clientSecret messageHander: (DBMessagHandler)message Handler; 初始化SDK 必须调⽤此⽅法初始化SDK,详⻅ 3.2。clientId、secret等信息请从 标⻉配置平台获取。callBack 是 DBMessagHandler。 - (void)startAndRecord; 开启录⾳转换 使⽤sdk内部唤起的录⾳,进⾏声⾳转换。开启成功后, - (void)onReadyForConvert;回调⽅法会执⾏。转换结果通过- (void)onResultData:(NSData *)data endflag:(BOOL)endFlag;回 调实时返回,转换完成后会执⾏- (void)onConvertComplete;回调⽅ 法。 - (void)stopRecord; 结束录⾳ 配合- (void)startAndRecord;⽅法使⽤,结束sdk录⾳转换。 - (void)play; 播放 调⽤sdk内播放器,播放转换后声⾳。三种转换⽅式转换后,均可调 ⽤sdk内部播放器进⾏播放控制。 - (void)pause; 播放 暂停sdk内播放器播放,调⽤ play() ⽅法可恢复播放 - (void)stopPlay; 停止播放 停⽌sdk内播放器,并清除掉播放器内数据。 - (void)startFileConvertPCMPat h:(NSString *)path; 开启数据转换 ⽂件或者⾳频数据流转换启动⽅法, 需要传⼊PCM格式的数据,采样率 16K,单声道,16位深 - (void)startConvertByPCM; 开启数据转换 客户只有的PCM数据进⾏转换; - (void)sendData:(NSData *)data index:(NSInteger)index; ⾳频字节流数据转换⽅法 需要先调⽤- (void)startConvertByPCM;,然后 在收到-(void)onReadyForConver回调后,多次调⽤-(void)sendData:(NSData *)dataindex:(NSInteger)index;⽅法进⾏⾳频流转换。index是发包序号, 从0开始计数⾃增,最后⼀包index需(乘以-1)变负数。转换结果通过(void)onResultData:(NSData*)data endflag:(BOOL)endFlag;回调实时返回,转换完成后会执⾏-(void)onConvertComplete;回调⽅ 法。 - (void)setupVoiceName: (NSString *)voiceName 设置⽬标声⾳模型名称 每次转换前可设置⾳⾊名称,默认⾳⾊是萝莉⾳"Vc_luoli",⾳⾊列 表⻅4.3, - (NSString *)getOriginRecordFile; 获取原始录⾳⽂件 如果是通过sdk录⾳转换,可以通过这个⽅法拿到原始录⾳⽂件路径。每次录⾳都会覆盖前⼀次录⾳的原始⽂件,录⾳⽂件路径和⽂件名固定不变。若未录⾳调⽤此⽅ 法,也会返回路径,但是⽂件可能不存在。所以使⽤此路径时,建议 检测⽂件是否存在。 - (NSString *)getConvertResultFile; 获取转换后录⾳⽂件 ⽆论哪种转换⽅式,每次转换后, sdk都会将转换后的⾳频存储在⼀个⽂件中,可以通过此⽅法拿到转换后声⾳⽂件。每次转换都会覆盖前⼀次转换的结果⽂件。此⽂件路 径和⽂件名固定不变。 - DBOfflineVoiceConvertDelegate回调类⽅法说明
方法 作用 说明 - (void)onReadyForCo nvert; 准备就绪 鉴权通过,准备就绪后回调,三种转换⽅式均会回调。 - (void)onResultData: (NSData *)data endflag: (BOOL)endFlag; 转换数据实时回调⽅法 若想⾃⾏处理转换后数据,可使⽤此回调⽅法中的数据。endFlag == 1 代表转换结束。 - (void)onConvertCom plete; 转换完成回调 每次转换完成,均会有此回调。 - (void)dbValues: (NSInteger)db; 录⾳⾳量分⻉值回调 如果通过sdk⾃带录⾳功能进⾏转换,这个回调会返回录⾳过程中声⾳的分⻉ 值。 - (void)onPlaying; 播放中回调 调⽤sdk内部播放器进⾏播放时,正在播放中状态回调。 - (void)onPaused; 播放暂停回调 调⽤sdk内部播放器进⾏播放时,暂停播放状态回调。 - (void)onPlayComplet ed; 播放完成回调 调⽤sdk内部播放器进⾏播放时,播放完成回调。 - (void)onStopped; 停⽌播放回调 调⽤sdk内部播放器进⾏播放时,停⽌播放回调。 - (void)onError: (NSString *)errorCode msg: (NSString *)message; 转换出现错误回调 NSString code是错误码,错误码具体请 参考以下错误码对照表。NSString message是具体的错误信息⽇志。 - 离线声音转换音色列表
名字 voice name参数 (⾸字⺟⼤写) ⽀持采样率(Hz) 萝莉⾳ Vc_luoli 16K ⼤叔 Vc_dashu 16K 搞怪 Vc_gaoguai 16K 空灵 Vc_kongling 16K 霸王⻰ Vc_bawanglong 16K 重⾦属 Vc_zhongjinshu 16K 机械音 Vc_jixieyin 16K - 发⽣异常时返回的code对应表
错误码 含义 类别 22190010 请求授权参数报错 SDK内部错误码 22190011 获取token报错 22190012 授权⽆效 22190013 设备信息鉴权失败 22180006 使⽤sdk⾃带Player相关错误