语音合成 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_common_speech_duxiaoyu_mand_eng_high_am-style24k_v4.6.0_20210721_20220822104311.dat |
| f7 离线女声(度小美) | bd_etts_navi_speech_duxiaomei_mand_eng_high_am-style24k_v4.6.0_20210721.dat |
| yy 离线度逍遥 | bd_etts_common_speech_duxiaoyao_mand_eng_high_am-style24k_v4.6.0_20210721_20220822104311.dat |
| c1 离线度丫丫 | bd_etts_common_speech_duyaya_mand_eng_high_am-style24k_v4.6.0_20210721_20220822104311.dat |
| 中文离线文本模型 | bd_etts_common_text_txt_all_mand_eng_middle_big_v4.1.0_20230423.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

