语音合成 iOS SDK
1. 文档说明
文档名称 | 语音合成集成文档 |
---|---|
所属平台 | iOS |
提交日期 | 2024-03-04 |
概述 | 本文档是百度离线语音合成iOS SDK的用户指南,描述了离线语音合成SDK 相关接口的使用说明。 |
2. 版本说明
名称 | 版本号 |
---|---|
语音合成 | 2.4.3 |
系统支持 | 支持iOS 8.0及以上。 |
架构支持 | 支持i386、x86_64、armv7、arm64。 (离线合成不支持i386和x86_64架构。) |
机型 | iPhone和iPad皆可。 |
IDE | Xcode 14+ |
2.1 版本升级改动点说明:
- 提升SDK稳定性;
- 离线发音人听感调优
3. SDK说明
文件名称 | 版本号 | 说明 | 类型 |
---|---|---|---|
libBaiduSpeechSDK.a | 2.4.3 | 语音合成SDK (和识别SDK同名如果同时集成2个SDK需要更改其中一个文件名) | 静态库 |
- 由于 BITCODE 开启会导致二进制文件体积增大,这部分会在 APPStore 发布时进行进一步编译优化,并不会引起最终文件的体积变化,故此处计算的是关闭 BITCODE 下的二进制增量。
- .a中是多个架构做了合并,使用lipo可以看到细节。所以.a库文件本身很大,且打包出来的ipa也相对较大。但用户实际下载到手机中会被AppStore优化,只下载用户设备需要的架构,所以实际在手机上占用的空间很小。
Architectures in the fat file: libBaiduSpeechSDK.a are: armv7 i386 x86_64 arm64
- 如果不需要离线功能,可以移除离线相关的资源文件(参考下一节),并删除代码中所有调用离线引擎代码相关的片段。
以下是2.2.7.0在iPhone6中安装Demo后,实际系统计算出的App占用大小,根据机型可能会有差异。
功能 | 大小 |
---|---|
带离线合成,并引入一种离线发音人 | 14.8M |
不带离线合成,不引入离线合成资源 | 7M |
开发包说明
文件(夹)名 | 说明 | 备注 |
---|---|---|
BDSClientLib | 离在线语音合成SDK Lib库,支持simulator和iOS设备。 | 必须引入 |
BDSClientSample | 开发示例(xcode project) | |
BDSClientResource/ TTS/ChineseAnd English_Speech*.dat | 具体参照 [纯离线语音合成模式] 章节 | 若无需离线合成则无需引入 注意:路径不能使用中文 |
BDSClientResource/ TTS/ChineseAnd English_Text.dat | 离线语音合成资源文件(text data file), 中英文 | 若无需离线合成则无需引入 注意:路径不能使用中文 |
BDSClientResource/ TTS/English_Speech _Female.dat, BDSClientResource/ TTS/English_Speech _Male.dat | 离线语音合成资源文件 (speech data file,英文),女声,男声 | 若无需离线合成则无需引入 注意:路径不能使用中文 |
4. Demo运行
4.1 配置包名和签名
从百度云控制台下载Demo,地址https://ai.baidu.com/sdk#tts(需要离线系在纯离线合成SDK,不需要离线下载纯在线SDK),需要在Bundle Identifier中配置好包名。
4.2 修改鉴权信息
离线合成需要另外填写申请授权SN码,具体流程参考 语音技术 (baidu.com)
全集搜索 填写应用的鉴权信息
然后编译测试
5. SDK集成
强烈建议用户首先运行SDK包中的Demo工程,Demo工程中详细说明了语音合成的使用方法,并提供了完整的示例。一般情况下,您只需参照demo工程即可完成所有的集成和配置工作。
添加BDSSpeechSynthesizer到工程
BDSSpeechSynthesizer使用了一些系统的framework,需要添加到工程里面。
添加方式: 右键点击 Xcode 中的工程文件,在出现的界面中,选中 TARGETS 下的应用,在出现的界面中选中 Build Phases->Link Binary With Libraries,点击界面中的“+”图标,在弹出的界面中选择需要的framework即可。请参考demo工程引入所需动态库framework和静态库。
开发者编译自己工程时,若报错 ld: Library xxxx not found,一般是库文件没有正确引入。请确保库文件在工程所能找到的位置之内(通过 LIBRARRY_SEARCH_PATH设置)
添加语音合成相关资源文件
将开发包中的BDSClientResource目录下的相关资源文件添加到工程或者安装app后部署到指定目录(代码中启动合成引擎时需要指定该资源文件的访问路径)。根据具体需求引入不同的资源即可。
引入BDSSpeechSynthesizer的头文件
首先将 BDSSpeechSynthesizer 提供的头文件拷贝到工程目录下,在 XCode 中添加此文件,引入 BDSSpeechSynthesizer提供的头文件。
添加如下头文件:
#import "BDSSpeechSynthesizer.h"
引入静态库文件
BDSSpeechSynthesizer提供了支持真机 armv7,armv7s,arm64及更新架构所使用的静态库文件,存放在开发包lib目录下。
引入静态库文件的具体方式为:将libBaiduSpeechSDK.a 采用添加文件方式添加到工程的Framework 目录下。
说明: libBaiduSpeechSDK.a 是一个通用的库文件,支持armv7、arm64、i386、x86_64, 避免开发者在 build 不同 target 时频繁替换.a 文件的问题
配置鉴权参数
离在线语音合成模式
请从官网控制台复制您的App密钥,设置APP_ID、API_KEY、SECRET_KEY参数。并绑定你的移动应用的BundleId。分别加载在线和离线引擎。
纯离线语音合成模式
请参考configureOfflineTTS
方法配置离线资源文件和鉴权。
调用
[[BDSSpeechSynthesizer sharedInstance] loadOfflineEngine:offlineTextData speechDataPath:offlineSpeechData licenseFilePath:**nil** withAppCode:APP_ID withSn:SN];
加载离线引擎。
资源文件包括『Speech文件』和『Text文件』,音库名称对应如下
SDK默认自带离线资源文件
资源文件 | 具体文件名 |
---|---|
m15 离线男声(度小宇) | bd_etts_navi_speech_m15_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
f7 离线女声(度小美) | bd_etts_navi_speech_f7_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
yy 离线度逍遥 | bd_etts_navi_speech_yy_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
c1 离线度丫丫 | bd_etts_navi_speech_c1_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
中文离线文本模型 | bd_etts_common_text_txt_all_mand_eng_middle_big_v4.1.0_20211223.dat |
需要单独下载的精品音库资源文件
音库资源文件下载地址:https://console.bce.baidu.com/ai/#/ai/speech/offline/index
资源文件 | 具体文件名 |
---|---|
f4 离线度小娇 | bd_etts_common_speech_f4_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
c3 离线度米朵 | bd_etts_navi_speech_c3_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
wyg 离线度博文 | bd_etts_navi_speech_wyg_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
c4 离线度小童 | bd_etts_common_speech_c4_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
f8 离线度小萌 | bd_etts_navi_speech_f8_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
f12dt 度小乔 | bd_etts_navi_speech_f12dt_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
f17 度小鹿 | bd_etts_navi_speech_f17_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
f10tw 度小台 | bd_etts_navi_speech_f10tw_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
m8 度小贤 | bd_etts_navi_speech_m8_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
gezi 度小雯 | bd_etts_navi_speech_gezi_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
粤语离线文本模型 | bd_etts_common_text_txt_all_cant_eng_middle_big_v4.5.0_20211222.dat |
f13can 度小粤 | bd_etts_navi_speech_f13can_cant_eng_high_am-style24k_v4.6.0_20210721.dat |
英文离线文本模型 | bd_etts_common_text_txt_all_mand_eng_middle_big_v4.1.0_20211223.dat(同中文) |
fnat 度小译 | bd_etts_common_speech_fnat_mand_eng_high_am-style24k_v4.9.0_20211130.dat |
2.4.3之前版本,中文、粤语、英文因为使用不同的Text文件,之间通过reinitOfflineEngineData 无法完成切换。必须反初始化,再初始化。2.4.3之后版本无需重新初始化。
6. 相关授权文件
请将百度云控制台创建应用时获取的语音(APPID)、API/SECRET KEY 并填写包名。
在线合成和离线合成需要进行相关验证后方可使用:
引擎类型 | 验证方法 |
---|---|
在线合成 | 开放平台使用API/SECRET KEY + APPID进行验证 |
离线合成 | 使用APPID+授权SN+包名首次联网自动下载授权文件进行验证 |
7.重要接口说明
语音合成器
合成器,类名BDSSpeechSynthesizer,主要用来控制合成进程:设置参数,开始,结束,取消等。
获取合成器唯一实例
方法 | 参数 | 返回 | 说明 |
---|---|---|---|
(BDSSpeechSynthesizer*)sharedInstance; | 无 | 语音合成引擎实例 | 获取语音合成引擎实例,该实例为单例对象 |
释放合成器唯一实例
方法 | 参数 | 返回 | 说明 |
---|---|---|---|
(void)releaseInstance; | 无 | 无 | 释放语音合成器实例 |
设置合成器代理
方法 | 参数 | 返回 | 说明 |
---|---|---|---|
(void)setSynthesizerDelegate: (id |
delegate (代理对象) | 无 | 设置合成器代理,代理对象负责处理合成器各类事件 |
设置合成参数
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(NSError*)setSynthParam:(id)param forKey:(BDSSynthesizerParamKey)key; | nil或错误信息 | 设置合成参数 | ||
param | 参数值 | |||
key | 参数键 |
获取合成参数
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(id)getSynthParamforKey:(BDSSynthesizerParamKey)key withError:(NSError**)err; | 参数值 | 获取合成参数 | ||
key | 参数值 | |||
err | 如果失败, 返回错误信息 |
设置认证信息
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)setApiKey:(NSString )apiKey withSecretKey:(NSString )secretKey; | 无 | 设置认证信息 | ||
apiKey | 用户从语音官网申请的apiKey | |||
secretKey | 用户从语音官网申请的secretKey |
设置回调队列
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(NSError*)setSDKCallbackQueue:(dispatch_queue_t)callbackQueue; | nil或错误信息 | 设置回调队列 | ||
callbackQueue | 回调队列 |
获得当前回调队列
方法 | 参数 | 返回 | 说明 |
---|---|---|---|
(dispatch_queue_t)getCurrentCallbackQueue; | 无 | 回调队列 | 获得当前回调队列 |
设置合成线程优先级
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)setThreadPriority:(double)priority; | 无 | 设置合成线程优先级 | ||
priority | 优先级 |
启动合成引擎
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(NSError)loadOfflineEngine: (NSString)textDatFilePath speechDataPath: (NSString)speechDatFilePath licenseFilePath: (NSString)licenseFilePath withAppCode: (NSString*)appCode; |
nil或错误信息 | 启动合成引擎 | ||
textDatFilePath | 中文文本分析数据文件路径 | |||
speechDataPath | 中文声学模型数据文件路径 | |||
licenseFilePath | 授权文件路径,如果没有本地授权可传入nil | |||
appCode | 用户持有的授权app code |
加载英文合成数据文件及模型文件
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
-(NSError)loadEnglishDataForOfflineEngine: (NSString)textDataPath speechData: (NSString*)speechDataPath; |
nil或错误信息 | 加载英文合成数据文件及模型文件 | ||
textDataPath | 英文文本分析数据文件路径 | |||
speechDataPath | 英文声学模型数据文件路径 |
重新加载文本分析数据文件或者声学模型数据文件
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(NSError)reinitOfflineEngineData: (NSString)datFilePath; | nil或错误信息 | 重新加载文本分析数据文件或者声学模型数据文件 | ||
datFilePath | 数据文件路径 |
加载定制库
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(NSError)loadDomainDataForOfflineEngine:(NSString)datFilePath; | nil或错误信息 | 加载定制库 | ||
datFilePath | 数据文件路径 |
卸载定制库
方法 | 参数 | 返回 | 说明 |
---|---|---|---|
(NSError*)unloadDomainDataFromOfflineEngine; | 无 | nil或错误信息 | 卸载定制库 |
验证音库文件的有效性
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(BOOL)verifyDataFile: (NSString*) datFilePath error:(NSError**)err; | 验证成功返回YES,验证失败返回NO | 验证音库文件的有效性 | ||
datFilePath | 数据文件路径 | |||
err | 如果验证失败,返回错误信息 |
获取音库文件相关参数
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(BOOL)getDataFileParam: (NSString*)datFilePath type: (TTSDataParam)paramType value: (NSString)paramValue error: (NSError)err; |
成功返回YES 失败返回NO |
获取音库文件相关参数 | ||
datFilePath | 数据文件路径 | |||
paramType | 参数键 | |||
paramValue | 传出对应参数的值 | |||
err | 如果失败, 返回错误信息 |
批量开始文本合成但不朗读或添加文本至当前合成过程
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(NSInteger)synthesizeSentence:(NSString*)sentence withError:(NSError**)err; | SDK生成的文本ID,-1代表合成失败,错误信息详见err | 批量开始文本合成但不朗读或添加文本至当前合成过程 | ||
sentence | 需要语音合成的文本,不超过120的GBK字节,即60个汉字或英文字母数字。超过请自行按照句号问号等标点切分 | |||
err | 如果失败, 返回错误信息 |
批量开始文本合成并朗读或添加文本至当前合成过程
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(NSInteger) speakSentence:(NSString*)sentence withError:(NSError**)err; | SDK生成的文本ID,-1代表合成失败,错误信息详见err | 批量开始文本合成并朗读或添加文本至当前合成过程 | ||
sentence | 需要语音合成的文本,不超过120的GBK字节,即60个汉字或英文字母数字。超过请自行按照句号问号等标点切分 | |||
err | 如果失败, 返回错误信息 |
取消本次合成并停止朗读
方法 | 参数 | 返回 | 说明 |
---|---|---|---|
(void)cancel; | 无 | 无 | 取消本次合成并停止朗读。 |
暂停文本合成并朗读
方法 | 参数 | 返回 | 说明 |
---|---|---|---|
(BDSSynthesizerStatus)pause; | 无 | 合成状态 | 暂停文本合成并朗读 |
继续文本合成并朗读
方法 | 参数 | 返回 | 说明 |
---|---|---|---|
(BDSSynthesizerStatus)resume; | 无 | 合成状态 | 继续文本合成并朗读 |
获取合成器状态
方法 | 参数 | 返回 | 说明 |
---|---|---|---|
(BDSSynthesizerStatus)synthesizerStatus; | 无 | 合成状态 | 获取合成器状态 |
设置播放器音量
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)setPlayerVolume:(float)volume; | 无 | 设置播放器音量 | ||
volume | 音量值 |
设置AudioSessionCategory类型
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)setAudioSessionCategory:(NSString *)category; | 无 | 设置AudioSessionCategory类型 | ||
category | AudioSessionCategory类型 |
语音合成器委托对象
语音合成器委托对象BDSSpeechSynthesizerDelegate,用来处理语音合成器的各种回调。
开始合成
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)synthesizerStartWorkingSentence:(NSInteger)SynthesizeSentence; | 无 | 开始合成 | ||
SynthesizeSentence | 句子序号 |
结束合成
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)synthesizerFinishWorkingSentence:(NSInteger)SynthesizeSentence; | 无 | 结束合成 | ||
SynthesizeSentence | 句子序号 |
开始朗读
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)synthesizerSpeechStartSentence:(NSInteger)SpeakSentence; | 无 | 开始朗读 | ||
SynthesizeSentence | 句子序号 |
结束朗读
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)synthesizerSpeechEndSentence:(NSInteger)SpeakSentence; | 无 | 结束朗读 | ||
SynthesizeSentence | 句子序号 |
新的语音数据已经合成
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)synthesizerNewDataArrived:(NSData *)newData DataFormat:(BDSAudioFormat)fmt characterCount:(int)newLength sentenceNumber:(NSInteger)SynthesizeSentence; |
无 | 新的语音数据已经合成 | ||
newData | 语音数据 | |||
DataFormat | 音频格式 | |||
newLength | 语音数据长度 | |||
SynthesizeSentence | 句子序号 |
播放进度变更
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)synthesizerTextSpeakLengthChanged:(int)newLength sentenceNumber:(NSInteger)SpeakSentence; |
无 | 播放进度变更 | ||
newLength | 语音数据长度 | |||
SpeakSentence | 句子序号 |
合成器发生错误
方法 | 参数 | 含义 | 返回 | 说明 |
---|---|---|---|---|
(void)synthesizerErrorOccurred:(NSError *)error speaking:(NSInteger)SpeakSentence synthesizing:(NSInteger)SynthesizeSentence; |
无 | 合成器发生错误 | ||
error | 错误码 | |||
SpeakSentence | 正在播放的句子序号 | |||
SynthesizeSentence | 正在合成的句子序号 |
8.参数及完整示例
BDSSpeechSynthesizerParams.h 文件中包含了各类参数的使用说明,如果开发者想寻找一些功能的设置办法,请浏览该文件中的相关参数说明
语音合成器参数
合成参数
百度语音合成支持的参数用BDSSynthesizerParamKey类型表示,具体如下:
参数 | 含义 |
---|---|
BDS_SYNTHESIZER_PARAM_SPEED | 语速(如现有语速不能满足,需更高语速可提交需求工单或联系商务同学申请) |
BDS_SYNTHESIZER_PARAM_PITCH | 音调 |
BDS_SYNTHESIZER_PARAM_VOLUME | 音量 |
BDS_SYNTHESIZER_PARAM_PID | 产品号 |
BDS_SYNTHESIZER_PARAM_LANGUAGE | 语言 |
BDS_SYNTHESIZER_PARAM_TEXT_ENCODE | 文本编码类型 |
BDS_SYNTHESIZER_PARAM_AUDIO_ENCODING | 音频编码类型 |
BDS_SYNTHESIZER_PARAM_SPEAKER | 发音人 在线基础:0(普通女声) 1(普通男声) 3(磁性男声<度逍遥>) 4(可爱童声<度丫丫>) 在线精品:106(情感男声<度博文>) 110 (活泼童声<度小童>) 111 (可爱童声<度小萌>)103(可爱童声<度米朵>)5(情感女声<度小娇>)5118(甜美女声<度小鹿>)5003(磁性男声<度逍遥(精品)>) |
BDS_SYNTHESIZER_PARAM_USER_AGENT | UA |
BDS_SYNTHESIZER_PARAM_ONLINE_REQUEST_TIMEOUT | 超时时间 |
BDS_SYNTHESIZER_PARAM_ETTS_AUDIO_FORMAT | 音频格式 |
BDS_SYNTHESIZER_PARAM_ETTS_VOCODER_OPTIM_LEVEL | 合成引擎速度优化等级 |
BDS_SYNTHESIZER_PARAM_SYNTH_STRATEGY | 合成策略 |
合成模式设置接口BDS_SYNTHESIZER_PARAM_SYNTH_STRATEGY,模式设置接口见下表:
合成模式 | 参数 |
---|---|
纯在线 | TTS_MODE_ONLINE |
纯离线 | TTS_MODE_OFFLINE |
在线优先 | TTS_MODE_ONLINE_PRI |
离线优先 | TTS_MODE_OFFLINE_PRI |
语音合成文本语言
语音合成文本语言用BDSSynthesizerLanguages类型表示,具体如下:
参数 | 含义 |
---|---|
BDS_SYNTHESIZER_LANGUAGE_ZH | 中文 |
BDS_SYNTHESIZER_LANGUAGE_EN | 英文 |
语音合成文本编码格式
语音合成文本编码格式用BDSSynthesizerTextEncodings类型表示,具体如下:
参数 | 含义 |
---|---|
BDS_SYNTHESIZER_TEXT_ENCODE_GBK | GBK编码 |
BDS_SYNTHESIZER_TEXT_ENCODE_BIG5 | 大五码编码 |
BDS_SYNTHESIZER_TEXT_ENCODE_UTF8 | UTF8编码 |
语音合成音频编码格式
不支持 mp3,支持AMR、OPUS。 语音合成音频编码格式用BDSSynthesizerAudioEncoding类型表示,具体如下:
参数 | 含义 |
---|---|
BDS_SYNTHESIZER_AUDIO_ENCODE_BV_16K | bv 16k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_AMR_6K6 | amr 6.6k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_AMR_8K85 | amr 8.85k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_AMR_12K65 | amr 12.65k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_AMR_14K25 | amr 14.25k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_AMR_15K85 | amr 15.85k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_AMR_18K25 | amr 18.25k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_AMR_19K85 | amr 19.85k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_AMR_23K05 | amr 23.05k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_AMR_23K85 | amr 23.85k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_OPUS_8K | opus 8k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_OPUS_16K | opus 16k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_OPUS_18K | opus 18k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_OPUS_20K | opus 20k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_OPUS_24K | opus 24k比特率 |
BDS_SYNTHESIZER_AUDIO_ENCODE_OPUS_32K | opus 32k比特率 |
关于AVAudioSession
SDK默认会将AudioSession的Category设置为AVAudioSessionCategoryPlayback,并在必要的时候调用setActive接口对外部音频进行打断及恢复,如果开发者不希望SDK对AudioSession进行操作自己管理,可以通过参数配置接口,把BDS_SYNTHESIZER_PARAM_ENABLE_AVSESSION_MGMT
对应的value设置为NO,即可屏蔽SDK内部的操作,按照需求,设置BDS_SYNTHESIZER_PARAM_AUDIO_SESSION_CATEGORY_OPTIONS
自行配置AudioSession。
完整示例
语音合成完整示例
-(void)configureOnlineTTS{
[[BDSSpeechSynthesizer sharedInstance] setApiKey:API_KEY withSecretKey:SECRET_KEY];
[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryPlayback error:nil];
[[BDSSpeechSynthesizer sharedInstance] setSynthParam:@(0) forKey:BDS_SYNTHESIZER_PARAM_SPEAKER];
}
-(void)configureOfflineTTS{
NSError *err = nil;
// 在这里选择不同的离线音库(请在XCode中Add相应的资源文件),同一时间只能load一个离线音库。根据网络状况和配置,SDK可能会自动切换到离线合成。
NSString* offlineEngineSpeechData = [[NSBundle mainBundle] pathForResource:@"Chinese_And_English_Speech_Female" ofType:@"dat"];
NSString* offlineChineseAndEnglishTextData = [[NSBundle mainBundle] pathForResource:@"Chinese_And_English_Text" ofType:@"dat"];
err = [[BDSSpeechSynthesizer sharedInstance] loadOfflineEngine:offlineChineseAndEnglishTextData speechDataPath:offlineEngineSpeechData licenseFilePath:nil withAppCode:APP_ID];
if(err){
[self displayError:err withTitle:@"Offline TTS init failed"];
return;
}
[TTSConfigViewController loadedAudioModelWithName:@"Chinese female" forLanguage:@"chn"];
[TTSConfigViewController loadedAudioModelWithName:@"English female" forLanguage:@"eng"];
}
-(void)test : {
// 获得合成器实例
[[BDSSpeechSynthesizer sharedInstance] setSynthesizerDelegate:self];
// 设置委托对象
[[BDSSpeechSynthesizer sharedInstance] setSynthesizerDelegate:self];
// 开始合成并播放
NSError* speakError = nil;
if([[BDSSpeechSynthesizer sharedInstance] speakSentence:@"您好" withError:&speakError] == -1){
// 错误
NSLog("错误: %ld, %@", (long)speakError.code, speakError.localizedDescription);
}
if([[BDSSpeechSynthesizer sharedInstance] speakSentence:@"今天天气真不错" withError:&speakError] == -1){
// 错误
NSLog("错误: %ld, %@", (long)speakError.code, speakError.localizedDescription);
}
if([[BDSSpeechSynthesizer sharedInstance] speakSentence:@"Today's weather is really good!" withError:&speakError] == -1){
// 错误
NSLog("错误: %ld, %@", (long)speakError.code, speakError.localizedDescription);
}
}
- (void)synthesizerStartWorkingSentence:(NSInteger)SynthesizeSentence
{
NSLog(@"Began synthesizing sentence %ld", (long)SynthesizeSentence);
}
- (void)synthesizerFinishWorkingSentence:(NSInteger)SynthesizeSentence
{
NSLog(@"Finished synthesizing sentence %ld", (long)SynthesizeSentence);
}
- (void)synthesizerSpeechStartSentence:(NSInteger)SpeakSentence
{
NSLog(@"Began playing sentence %ld", (long)SpeakSentence);
}
- (void)synthesizerSpeechEndSentence:(NSInteger)SpeakSentence
{
NSLog(@"Finished playing sentence %ld", (long)SpeakSentence);
}
9. IOS错误码
开始合成错误
开始合成错误用BDSStartSynthesisError类型表示,具体如下:
参数 | 含义 |
---|---|
BDS_START_SYNTHESIS_OK | 启动成功 |
BDS_START_SYNTHESIS_SYNTHESIZER_UNINITIALIZED | 合成器未初始化 |
BDS_START_SYNTHESIS_TEXT_EMPTY | 合成文本为空 |
BDS_START_SYNTHESIS_TEXT_TOO_LONG | 和成文本过长 |
BDS_START_SYNTHESIS_ENGINE_BUSY | 合成引擎繁忙 |
BDS_START_SYNTHESIS_MALLOC_ERROR | 获取资源失败 |
BDS_START_SYNTHESIS_NO_NETWORK | 无网络连接 |
BDS_START_SYNTHESIS_NO_VERIFY_INFO | 无授权信息 |
合成错误(包含在线合成和离线合成错误)
合成错误用BDSSynthesisError类型表示,具体如下:
参数 | 含义 |
---|---|
BDS_UNKNOWN_ERROR | 未知错误 |
BDS_PLAYER_FAILED_GET_STREAM_PROPERTIES | 获取流属性失败 |
BDS_PLAYER_FAILED_OPEN_DEVICE | 打开设备失败 |
BDS_PLAYER_FAILED_OPEN_STREAM | 打开流失败 |
BDS_PLAYER_ALLOC_FAIL | 资源申请失败 |
BDS_PLAYER_BAD_STREAM | 音频流错误 |
BDS_ONLINE_TTS_CONNECT_ERROR | 在线连接错误 |
BDS_ONLINE_TTS_RESPONSE_PARSE_ERROR | 在线解析错误 |
BDS_ONLINE_TTS_PARAM_ERROR | 在线参数错误 |
BDS_ONLINE_TTS_TEXT_ENCODE_NOT_SUPPORTED | 文本编码格式不支持 |
BDS_ONLINE_TTS_VERIFY_ERROR | 在线鉴权错误 |
BDS_ONLINE_TTS_GET_ACCESS_TOKEN_FAILED | 获取token失败 |
BDS_ETTS_ERR_PARTIAL_SYNTH | 离线部分合成错误 |
BDS_ETTS_ERR_CONFIG | 离线配置错误 |
BDS_ETTS_ERR_RESOURCE | 离线资源错误 |
BDS_ETTS_ERR_HANDLE | 离线句柄错误 |
BDS_ETTS_ERR_PARMAM | 离线参数错误 |
BDS_ETTS_ERR_MEMORY | 离线内存错误 |
BDS_ETTS_ERR_TOO_MANY_TEXT | 离线文本过长 |
BDS_ETTS_ERR_RUN_TIME | 离线运行时错误 |
BDS_ETTS_ERR_NO_TEXT | 离线空文本错误 |
BDS_ETTS_ERR_LICENSE | 离线授权错误 |
10. 权限
名称 | 用途 |
---|---|
Privacy - Microphone Usage Description | 获取麦克风权限播放 |
11. 不使用离线合成,只使用在线合成
不使用离线合成,只使用在线合成,可以单独下载纯在线合成sdk https://ai.baidu.com/download?sdkId=116
文件(夹)名 | 说明 | 备注 |
---|---|---|
BDSClientLib | 在线语音合成SDK Lib库,支持simulator和iOS设备。 | 必须引入 |
BDSClientSample | 开发示例(xcode project) |
删除离线资源文件,并configureOnineTTS设置合成策略为TTS_MODE_ONLINE