This repository was archived by the owner on May 28, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 28
DOC iOS TTS
lixi edited this page Sep 14, 2017
·
4 revisions
[TOC]
本文档是百度语音开放平台iOS SDK的用户指南,描述了语音合成
相关接口的使用说明。
类别 | 兼容范围 |
---|---|
系统 | 支持iOS 6.0及以上系统 |
架构 | armv7、arm64、i386、x86_64(模拟器架构暂不支持离线功能) |
网络 | 支持移动网络、WIFI等网络环境 |
开发环境 | 工程内使用了LTO等优化选项,建议使用最新版本Xcode进行开发 |
静态库占用:
SDK类型 | 静态库大小 | 二进制增量 | __TEXT增量 |
---|---|---|---|
合成 | 104.6M | 9.3M | 4.0M~4.6M |
资源占用:
资源名称 | 资源描述 | 资源大小 |
---|---|---|
Chinese_And_English_Speech_Female.dat | 离线合成中英文女声资源文件 | 305K |
Chinese_And_English_Speech_Male.dat | 离线合成中英文男声资源文件 | 305K |
Chinese_And_English_Text.dat | 离线合成中英文文本模型文件 | 7.6M |
由于 BITCODE 开启会导致二进制文件体积增大,这部分会在 APPStore 发布时进行进一步编译优化,并不会引起最终文件的体积变化,故此处计算的是关闭 BITCODE 下的二进制增量。
Framework | 描述 |
---|---|
libc++.tbd | 提供对C/C++特性支持 |
libstdc++.6.0.9.tbd | 提供C++标准库的支持 |
libz.1.2.5.tbd | 提供gzip支持 |
libiconv.2.4.0.tbd | 提供编码转换支持 |
AudioToolbox | 提供录音和播放支持 |
AVFoundation | 提供录音和播放支持 |
CoreTelephony | 提供对移动网络类型判断的支持 |
SystemConfiguration | 提供对网络状态检测的支持 |
将SDK提供的头文件添加到工程后,只需引入如下头文件:
#import "BDSSpeechSynthesizer.h"
SDK提供的是静态库,开发者只需要将库文件拖入工程目录即可。对静态库有以下几点说明:
1. 静态库采用lipo命令将armv7,arm64及模拟器Debug版的静态库合并成的一个通用的库文件,避免开发者在编译不同target时频繁替换的问题;
2. 模拟器版本只支持在线合成,不支持离线功能;
将开发包中OfflineTTSDatFiles目录,以"create groups"方式添加到工程目录下即可,资源文件说明如下:
文件名 | 说明 |
---|---|
offline_engine_tmp_license.dat | 离线临时授权文件 |
Chinese_And_English_Speech_Female.dat | 离线合成中英文女声资源文件 |
Chinese_And_English_Speech_Male.dat | 离线合成中英文男声资源文件 |
Chinese_And_English_Text.dat | 离线合成中英文文本模型文件 |
静态接口,用于获取、释放合成器唯一实例
+ (BDSSpeechSynthesizer*)sharedInstance;
+ (void)releaseInstance;
/**
* @brief 设置合成器代理
* @param delegate 代理对象,负责处理合成器各类事件
*/
- (void)setSynthesizerDelegate: (id<BDSSpeechSynthesizerDelegate>)delegate;
/**
* @brief 合成器参数设置接口
* @param param 参数对应的值
* @param key 合成器预定义的参数名称,参见附录及头文件BDSSpeechSynthesizerParams.h.
*/
-(NSError*)setSynthParam:(id)param forKey:(BDSSynthesizerParamKey)key;
/**
* @brief 获取合成器参数
* @param key 合成器预定义的参数名称
* @param err 如果不为nil,返回错误信息
* @return 当前使用的参数值
*/
-(id)getSynthParamforKey:(BDSSynthesizerParamKey)key withError:(NSError**)err;
/**
* @brief 为在线合成设置认证信息
* @param apiKey 在百度开发者中心注册应用获得
* @param secretKey 在百度开发者中心注册应用获得
*/
- (void)setApiKey:(NSString *)apiKey withSecretKey:(NSString *)secretKey;
/**
* @brief 指定SDK工作队列,默认值为main queue (dispatch_get_main_queue())
* @param callbackQueue 串行队列
* @return 错误信息,成功返回nil
*/
-(NSError*)setSDKCallbackQueue:(dispatch_queue_t)callbackQueue;
-(dispatch_queue_t)getCurrentCallbackQueue;
/**
* @brief 加载合成引擎
* @param textDatFilePath 文本分析数据文件路径
* @param speechDataPath 声学模型数据文件路径
* @param licenseFilePath 授权文件路径,如果没有本地授权可传入nil
* @param appCode 用户持有的授权app code, 即APPID
* @return 错误码, 成功返回nil
*/
- (NSError*)loadOfflineEngine: (NSString*)textDatFilePath
speechDataPath: (NSString*)speechDatFilePath
licenseFilePath: (NSString*)licenseFilePath
withAppCode: (NSString*)appCode;
如果需要英文合成,在加载引擎后,需要调用一下接口加载英文合成相关资源:
/**
* @brief 加载合成引擎 注意:用上面的方法加载中英文混合模型不用调用此方法
* @param textDatFilePath 文本分析数据文件路径
* @param speechDataPath 声学模型数据文件路径
* @return 错误码, 成功返回nil
*/
-(NSError*)loadEnglishDataForOfflineEngine: (NSString*)textDataPath
speechData: (NSString*)speechDataPath;
/**
* @brief 重新加载文本分析数据文件或者声学模型数据文件
* @param datFilePath: 数据文件路径
* @return 错误码, 成功返回nil
*/
- (NSError*)reinitOfflineEngineData: (NSString*)datFilePath;
/**
* @brief 加载定制库,加载离线引擎后方可调用该接口
* @param datFilePath 定制库路径
* @return 错误码, 成功返回nil
*/
- (NSError*)loadDomainDataForOfflineEngine:(NSString*)datFilePath;
/**
* @brief 卸载定制库
* @return 错误码, 成功返回nil
*/
- (NSError*)unloadDomainDataFromOfflineEngine;
/**
* @brief 验证音库文件的有效性
* @param datFilePath data文件路径
* @param err 如果验证失败, 返回错误信息
* @return 验证成功YES,失败NO
*/
- (BOOL)verifyDataFile: (NSString*) datFilePath error:(NSError**)err;
/**
* @brief 获取音库文件相关参数
* @param datFilePath data文件路径
* @param paramType 参数类型
* @param paramValue 传出对应参数的值
* @param err 如果失败, 返回错误信息
* @return 成功YES,失败NO
*/
- (BOOL)getDataFileParam: (NSString*)datFilePath
type: (TTSDataParam)paramType
value: (NSString**)paramValue
error: (NSError**)err;
/**
* @brief 合成并朗读文本
* @param sentence 待合成文本
* @param err 如果出错,返回错误信息
* @return 语句ID或-1,如果返回-1,可以从err中获取错误详细信息
*/
-(NSInteger) speakSentence:(NSString*)sentence withError:(NSError**)err;
/**
* @brief 合成不朗读文本
* @param sentence 待合成文本
* @param err 如果出错,返回错误信息
* @return 语句ID或-1,如果返回-1,可以从err中获取错误详细信息
*/
-(NSInteger) synthesizeSentence:(NSString*)sentence withError:(NSError**)err;
- (void)cancel;
- (BDSSynthesizerStatus)pause;
- (BDSSynthesizerStatus)resume;
- (BDSSynthesizerStatus)synthesizerStatus;
/**
* @brief 获取待播放语句数量,包括未合成语句
*/
-(NSInteger)RemainingPlaybackSentenceCount;
-(NSInteger)RemainingSynthesizeSentenceCount;
/**
* @brief 设置播放器音量
* @param volume 音量值,[0, 1]
*/
- (void)setPlayerVolume:(float)volume;
/**
* @brief 设置AudioSessionCategory类型
* @param category AudioSessionCategory类型,取值参见AVAudioSession Class Reference
* Default: AVAudioSessionCategoryPlayback
*/
- (void)setAudioSessionCategory:(NSString *)category;
+ (void)setLogLevel:(BDSLogLevel)logLevel;
+ (BDSLogLevel)logLevel;
/**
* @brief SDK版本信息,包含离线引擎版本信息
*/
+ (NSString *)version;
/**
* @brief 开始合成新的语句
* @param SynthesizeSentence 语句对应的ID,该值为合成接口的返回值
*/
- (void)synthesizerStartWorkingSentence:(NSInteger)SynthesizeSentence;
/**
* @brief 结束合成某个语句
* @param SynthesizeSentence 语句对应的ID,该值为合成接口的返回值
*/
- (void)synthesizerFinishWorkingSentence:(NSInteger)SynthesizeSentence;
/**
* @brief 开始朗读某个语句,如果调用纯合成接口,不会触发该回调
* @param SpeakSentence 语句对应的ID,该值为合成接口的返回值
*/
- (void)synthesizerSpeechStartSentence:(NSInteger)SpeakSentence;
/**
* @brief 朗读完成,如果调用纯合成接口,不会触发该回调
* @param SpeakSentence 语句对应的ID,该值为合成接口的返回值
*/
- (void)synthesizerSpeechEndSentence:(NSInteger)SpeakSentence;
/**
* @brief 新的语音数据已经合成
* @param newData 语音数据
* @param fmt 缓存中的音频格式
* @param newLength 当前语句已合成字符数
* @param SynthesizeSentence 语句对应的ID,该值为合成接口的返回值
*/
- (void)synthesizerNewDataArrived:(NSData *)newData
DataFormat:(BDSAudioFormat)fmt
characterCount:(int)newLength
sentenceNumber:(NSInteger)SynthesizeSentence;
/**
* @brief 播放进度变更,返回当前语句已播放字符数,如果调用纯合成接口,不会触发该回调
* @param newLength 当前语句已播放字符数,非精确值
* @param SpeakSentence 语句对应的ID,该值为合成接口的返回值
*/
- (void)synthesizerTextSpeakLengthChanged:(int)newLength
sentenceNumber:(NSInteger)SpeakSentence;
/**
* @brief 合成器发生错误
* @param error 错误对象,包含错误信息
* @param SpeakSentence 正在播放的语句对应的ID,该值为合成接口的返回值
* @param SynthesizeSentence 正在合成的语句对应的ID
*/
- (void)synthesizerErrorOccurred:(NSError *)error
speaking:(NSInteger)SpeakSentence
synthesizing:(NSInteger)SynthesizeSentence;
合成SDK默认会将AudioSession的Category设置为AVAudioSessionCategoryPlayback,并在必要的时候调用setActive接口对外部音频进行打断及恢复,如果开发者不希望SDK对AudioSession进行操作,可以通过参数配置接口,把BDS_SYNTHESIZER_PARAM_ENABLE_AVSESSION_MGMT对应的value设置为NO,即可屏蔽SDK内部的操作,按照需求,自行配置AudioSession。
使用离线合成时,需要加载离线资源,加载过程需注意加载顺序:
- 加载离线引擎时传入中文合成资源;
- 如需支持英文离线合成,需额外加载英文合成资源;
- 如果需要加载定制库文件,加载离线引擎后,调用相关接口进行加载;
参数名称 | 说明 |
---|---|
BDS_SYNTHESIZER_PARAM_SPEED | 语速,NSNumber([0...9]) |
BDS_SYNTHESIZER_PARAM_PITCH | 音调,NSNumber([0...9]) |
BDS_SYNTHESIZER_PARAM_VOLUME | 合成器音量,NSNumber([0...9]) |
BDS_SYNTHESIZER_PARAM_ENABLE_AVSESSION_MGMT | 是否启用SDK对AudioSession的操作,默认打开 |
BDS_SYNTHESIZER_PARAM_AUDIO_SESSION_CATEGORY_OPTIONS | SDK设置AudioSession类别是的选项 |
BDS_SYNTHESIZER_PARAM_PID | 产品线ID |
BDS_SYNTHESIZER_PARAM_AUDIO_ENCODING | 音频编码类型 |
BDS_SYNTHESIZER_PARAM_SPEAKER | 发音人 |
BDS_SYNTHESIZER_PARAM_USER_AGENT | UA |
BDS_SYNTHESIZER_PARAM_ONLINE_REQUEST_TIMEOUT | 合成请求超时时间,开启播放后失效 |
BDS_SYNTHESIZER_PARAM_ETTS_OPEN_XML | 开启XML标记,NSNumber([0,1]) |
BDS_SYNTHESIZER_PARAM_ETTS_DOMAIN_SYNTH | 定制库开关 |
BDS_SYNTHESIZER_PARAM_ETTS_AUDIO_FORMAT | 音频格式 |
BDS_SYNTHESIZER_PARAM_ETTS_VOCODER_OPTIM_LEVEL | 合成引擎速度优化等级 |
BDS_SYNTHESIZER_PARAM_ONLINE_TTS_THRESHOLD | 在线切离线的网络阈值 |
BDS_SYNTHESIZER_PARAM_ENABLE_TIMEOUT_OPTIMIZATION | 超时优化开关 |
错误码 | 说明 |
---|---|
-2 | 包名不匹配 |
-3 | 开发者签名或AppCode的不匹配 |
-4 | cuid不匹配 |
-7 | 平台错误(ASR/TTS/andriod/iOS/PC) |
-5 | license过期 |
-6 | license还有一个月过期 |
-8 | license文件不存在或文件长度为0 |
-10 | 临时授权文件过期 |
错误码 | 说明 |
---|---|
-8 | 网络超时 |
-101 | 验证不通过 |
-102 | 返回结果出错 |
-103 | 激活超量 |
-104 | 已过有效期 |
-105 | 服务器生产license失败 |
-106 | 读取license失败 |
-107 | 插入device信息失败 |
-108 | 更新开发者信息失败 |