语音合成 iOS SDK
1. 文档说明
| 文档名称 | 语音合成集成文档 |
|---|---|
| 所属平台 | iOS |
| 提交日期 | 2025-11-10 |
| 概述 | 本文档是百度离线语音合成iOS SDK的用户指南,描述了离线语音合成SDK相关接口的使用说明。离线语音合成SDK包含基础音库,在线语音合成SDK无需音库资源即可调用,请您前往语音合成SDK资源按需下载;新版SDK自带音库已更新至4.9版本,若音库无法使用,请点击下载基础音库v4.6版。 |
2. 版本说明
| 名称 | 版本号 |
|---|---|
| 语音合成 | 4.2.0.26 |
| 系统支持 | 支持iOS 12.0及以上 |
| 架构支持 | 支持x86_64、arm64 (离线合暂成不支持x86_64架构) |
| 机型 | iPhone和iPad皆可 |
| IDE | Xcode 14+ |
2.1 版本升级改动点说明:
- 提升SDK稳定性;
- 离线发音人听感调优
- SDK引擎升级优化
- 新增Token(临时、永久)、IAMKEY(临时、永久)鉴权 方式
3. SDK说明
| 文件名称 | 版本号 | 说明 | 类型 |
|---|---|---|---|
| libBaiduSpeechSDK.a | 4.2.0.26 | 语音合成SDK (同时支持离在线引擎) | 静态库 |
- 由于 BITCODE 开启会导致二进制文件体积增大,这部分会在 APPStore 发布时进行进一步编译优化,并不会引起最终文件的体积变化,故此处计算的是关闭 BITCODE 下的二进制增量。
- .a中是多个架构做了合并,使用lipo可以看到细节。所以.a库文件本身很大,且打包出来的ipa也相对较大。但用户实际下载到手机中会被AppStore优化,只下载用户设备需要的架构,所以实际在手机上占用的空间很小。
1Architectures 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 登录后在对应页面下载
4.2 修改鉴权信息
鉴权信息申请及配置参考下文6.离在线鉴权配置
核心BDSClientLib引擎依赖库以及头文件必须引入。
然后进行编译测试。
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后部署到指定目录(代码中启动合成引擎时需要指定该资源文件的访问路径)。根据具体需求引入不同的资源即可。
基础音库
精品音库
音频文件配置代码示例:
1// 离线TTS 调用方法
2[self configureOfflineTTS];
3// 音库资源文件设定
4 NSString *offlineEngineSpeechData = [[NSBundle mainBundle] pathForResource:@"bd_etts_common_speech_f7_mand_eng_high_am-mgc_v3.6.0_20190117" ofType:@"dat"];
5 NSString *offlineChineseAndEnglishTextData = [[NSBundle mainBundle] pathForResource:@"bd_etts_common_text_txt_all_mand_eng_middle_big_v6.0.0_20240731" ofType:@"dat"];
6 NSError *err = nil;
7 err = [[BDSSpeechSynthesizer sharedInstance] loadOfflineEngine:offlineChineseAndEnglishTextData speechDataPath:offlineEngineSpeechData licenseFilePath:nil withAppCode:APP_ID withSn:SN];
8 if(err){
9 [self displayError:err withTitle:@"Offline TTS init failed"];
10 return;
11 }
12 [TTSConfigViewController loadedAudioModelWithName:@"Chinese female" forLanguage:@"chn"];
13 [TTSConfigViewController loadedAudioModelWithName:@"English female" forLanguage:@"eng"];
引入BDSSpeechSynthesizer的头文件
首先将 BDSSpeechSynthesizer 提供的头文件拷贝到工程目录下,在 XCode 中添加此文件,引入 BDSSpeechSynthesizer提供的头文件。
添加如下头文件:
1#import "BDSSpeechSynthesizer.h"
引入静态库文件
BDSSpeechSynthesizer提供了支持真机 armv7,armv7s,arm64及更新架构所使用的静态库文件,存放在开发包lib目录下。
引入静态库文件的具体方式为:将libBaiduSpeechSDK.a 采用添加文件方式添加到工程的Framework 目录下。
说明: libBaiduSpeechSDK.a 是一个通用的库文件,支持armv7、arm64、i386、x86_64, 避免开发者在 build 不同 target 时频繁替换.a 文件的问题
6.离在线模式鉴权参数配置说明
离在线语音合成模式
请从官网控制台复制您的App密钥,设置APP_ID、API_KEY、SECRET_KEY参数。并绑定你的移动应用的BundleId。分别加载在线和离线引擎。
在线合成和离线合成需要进行相关验证后方可使用:
| 引擎类型 | 验证方法 |
|---|---|
| 在线合成 | 开放平台使用API/SECRET KEY + APPID方式进行验证(历史版本)(控制台申请的ak、sk 参考https://ai.baidu.com/ai-doc/SPEECH/4l9mh6qf9 完成项目创建后控制台可查询对应的ak、sk等信息)开放平台使用ACCESSTOKEN进行验证(新增)(https://ai.baidu.com/ai-doc/REFERENCE/Lkru0zoz4)开放平台使用IAMKEY进行验证(新增)(https://cloud.baidu.com/doc/AI_REFERENCE/s/Hm5us339w) |
| 离线合成 | 使用APPID+授权SN+包名首次联网自动下载授权文件进行验证 |
| 离线合成需要另外填写申请授权SN码,具体流程参考 快速集成指南 |
纯在线语音合成模式
使用APIKEY + SECRET KEY 鉴权方式使用示例:
1// 初始化部分
2// TTSViewController.m
3// 用户填写ak、sk信息鉴权方式(历史)
4[[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithAk:"控制台申请的ak" AndSK:"控制台申请的sk"];
使用IAMKEY(当前版本新增)鉴权方式使用示例:
1// 初始化部分
2// TTSViewController.m
3// 用户填写iamkey 永久鉴权方式(新增)
4[[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithIamKey:IAM_KEY];
5// 用户自定义iam apikey获取 临时鉴权方式(新增)
6 [[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithIAMKey:IAM_KEY AndExpirationDate:@"传入iamkey有效时间戳"];
使用TOKEN(当前版本新增)鉴权方式使用示例:
1// 初始化部分
2// TTSViewController.m
3// 用户填写iamkey 永久鉴权方式(新增)
4// token鉴权
5// [[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithAuthToken:@"平台获取的token" AndExpirationDate:"token有效期时间"];
鉴权接口及参数说明
1/**
2 // ak、sk方式鉴权
3 ak:控制台申请的对应鉴权apikey
4 sk:控制台申请的对应鉴权secretkey
5 */
6- (void)setTTSLicenseWithAk:(NSString *)ak AndSK:(NSString *)sk;
7
8/**
9 token鉴权方式
10 token:申请的token
11 expirationDate:token过期时间戳(毫秒)
12 */
13- (void)setTTSLicenseWithAuthToken:(NSString *)token AndExpirationDate:(long long)expirationDate;
14
15/**
16 iamkey方式初始化鉴权
17 iamkey:申请的iamkey
18 expirationDate:iamkey过期时间(毫秒)
19 */
20- (void)setTTSLicenseWithIAMKey:(NSString *)iamkey AndExpirationDate:(long long)expirationDate;
完整示例参考:
1// 语音合成sdk内部方法代理设置
2[[BDSSpeechSynthesizer sharedInstance] setSynthesizerDelegate:self];
3// 鉴权初始化
4[self configureOnlineTTS];
5// 鉴权库初始化配置 ak、sk 协议代理初始化
6[AuthManager sharedInstance].temporaryTokenAndKeyDelegate = self;
7// 语音合成sdk日志级别 0 默认关闭 5 全量日志
8[BDSSpeechSynthesizer setLogLevel:BDS_PUBLIC_LOG_VERBOSE];
9// 设置鉴权通用日志
10[AuthManager sharedInstance].isAuthLog = YES;
11// 鉴权sdk版本号
12NSLog(@"Current SDK version: %@", [[BDSpeechTTSBaseKit sharedInstance] getTTSLibVersion]);
13// 用户填写ak、sk信息鉴权方式(历史)
14[[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithAk:API_KEY AndSK:SECRET_KEY];
15// 用户填写iamkey 鉴权方式(新增)
16[[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithIamKey:IAM_KEY];
17// 用户自定义access token获取 回调接口鉴权方式(新增)
18[[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithAuthToken:token AndExpirationDate:@"传入token有效时间戳"];
19// 用户自定义iam apikey获取 回调接口鉴权方式(新增)
20 [[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithIAMKey:IAM_KEY AndExpirationDate:@"传入iamkey有效时间戳"];
提供用户自定义获取鉴权信息的能力
描述:为了满足 「鉴权信息保存在server端,app通过请求server端获取access token」的需求,语音SDK需要提供 鉴权信息回调点,并由用户最终实现 回调接口。
1步骤一:
2// 遵循鉴权sdk内置协议,初始化设置协议
3[AuthManager sharedInstance].temporaryTokenAndKeyDelegate = self;
4
5// 分别实现协议传入token、iamkey
6/**
7 客户实现get token 协议方法
8 */
9- (void)getToken {
10 ......
11 //客户业务侧处理获取token的逻辑
12 // demo示例发送请求
13 [self sendPostRequest];
14}
15
16/**
17 客户实现get iamkey 协议方法
18 */
19- (void)getIAMKey {
20 ......
21 //客户业务侧处理获取iamkey的逻辑
22 // demo示例发送请求
23 [self sendPostRequest];
24}
25
26步骤二:
27// 初始化调用在线函数进行SDK模型参数初始化配置
28// 在线TTS
29 [self configureOnlineTTS]; // 完成模型初始化参数配置相关操作
30//获取网络权限判断逻辑
31 ......
32 ......
33 ......
34// 检查当前网络状态并尝试网络请求
35[self checkNetworkStatusAndMakeRequest];
36
37
38 // 检查网络权限是否生效
39- (void)checkNetworkStatusAndMakeRequest {
40 // 生效 即可做post请求获取token、有效期
41 ......
42 ......
43 ......
44 // 调用本地获取token的请求逻辑
45 [self sendPostRequest];
46}
47
48 // post请求 仅供参考
49-(void)sendPostRequest {
50 // 请求逻辑具体参考demo代码
51 ......
52 ......
53 请求拿到token后调用API接口完成token鉴权
54 // token 鉴权 成功:正常完成合成主流程鉴权通过。 失败:触发上述步骤一中的协议回调 重新获取有效token(此处以token为例)
55 [[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithAuthToken:@"平台获取的token" AndExpirationDate:"token有效期时间"];
56}
57
58逻辑整理 1.遵循鉴权sdk内置协议 2.完成初始化请求token获取[self sendPostRequest]; 并在请求结果中设置对应的鉴权方式如 [[BDSpeechTTSBaseKit sharedInstance] setTTSLicenseWithAuthToken:@"平台获取的token" AndExpirationDate:"token有效期时间"];获取token。3.成功后正常继续下一步,异常或请求token失败、token有效期到期等 SDK代理会监听到 触发getToken、getIamkey代理 进行重新处理逻辑 demo示例中做了重新获取token的操作 仅供参考
59
60注:使用该方式为了满足 「鉴权信息保存在server端,app通过请求server端获取access token」的需求,语音SDK需要提供 鉴权信息回调点,并由用户最终实现 回调接口。
纯离线语音合成模式
请参考configureOfflineTTS方法配置离线资源文件和鉴权,或参考4.2离线集成配置相关描述。
- APPID+SN方式鉴权:
参数配置说明 AppID可登录控制台查看,App ID与SN获取方式参考 快速集成指南
1-(void)configureOfflineTTS{
2
3#pragma mark - 新版本使用的资源包文件
4 // 音库资源文件设定
5 NSString *offlineEngineSpeechData = [[NSBundle mainBundle] pathForResource:@"bd_etts_common_speech_f7_mand_eng_high_am-mgc_v3.6.0_20190117" ofType:@"dat"];
6 NSString *offlineChineseAndEnglishTextData = [[NSBundle mainBundle] pathForResource:@"bd_etts_common_text_txt_all_mand_eng_middle_big_v6.0.0_20240731" ofType:@"dat"];
7 NSError *err = nil;
8 err = [[BDSSpeechSynthesizer sharedInstance] loadOfflineEngine:offlineChineseAndEnglishTextData speechDataPath:offlineEngineSpeechData licenseFilePath:nil withAppCode:APP_ID withSn:SN];
9 if(err){
10 [self displayError:err withTitle:@"Offline TTS init failed"];
11 return;
12 }
13 [TTSConfigViewController loadedAudioModelWithName:@"Chinese female" forLanguage:@"chn"];
14 [TTSConfigViewController loadedAudioModelWithName:@"English female" forLanguage:@"eng"];
15}
- 加载离线引擎
资源文件包括『Speech文件』和『Text文件』,音库名称对应如下
SDK默认自带离线资源文件
| 资源文件 | 具体文件名 |
|---|---|
| m15 离线男声(度小宇) | bd_etts_common_speech_duxiaoyu_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| f7 离线女声(度小美) | bd_etts_common_speech_duxiaomei_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| yy 离线度逍遥 | bd_etts_common_speech_duxiaoyao_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.dat |
| c1 离线度丫丫 | bd_etts_common_speech_duyaya_mand_eng_high_am-tac-csubgan16k_v4.9.0_20220419_20251031153737.dat |
| 中文离线文本模型 | bd_etts_common_text_txt_all_mand_eng_middle_big_v6.0.0_20240731.dat |
需要单独下载的精品音库资源文件
音库资源文件下载地址:https://console.bce.baidu.com/ai/#/ai/speech/offline/index
| 资源文件 | 具体文件名 |
|---|---|
| f4 离线度小娇 | bd_etts_common_speech_duxiaojiao_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| c3 离线度米朵 | bd_etts_common_speech_dumiduo_mand_eng_high_am-tac-csubgan16k_v4.9.0_20220419_20251031153737.dat |
| wyg 离线度博文 | bd_etts_common_speech_dubowen_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| c4 离线度小童 | bd_etts_common_speech_duxiaotong_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.dat |
| f8 离线度小萌 | bd_etts_common_speech_duxiaomeng_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| f12dt 度小乔 | bd_etts_common_speech_duxiaoqiao_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| f17 度小鹿 | bd_etts_common_speech_duxiaolu_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| f10tw 度小台 | bd_etts_common_speech_duxiaotai_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.da |
| m8 度小贤 | bd_etts_common_speech_duxiaoxian_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.dat |
| gezi 度小雯 | bd_etts_common_speech_duxiaowen_mand_eng_high_am-tac-csubgan16k_v4.9.0_20230927_20251031153737.dat |
| 粤语离线文本模型 | bd_etts_common_text_txt_all_cant_eng_middle_big_v6.0.0_20220916.da |
| f13can 度小粤 | bd_etts_common_speech_duxiaoyue_cant_eng_high_am-tac-csubgan16k_v4.9.0_20220419_20251031153737.dat |
| 英文离线文本模型 | bd_etts_common_text_txt_all_mand_eng_middle_big_v6.0.0_20240731.dat(同中文) |
| fnat 度小译 | bd_etts_common_speech_duxiaoyi_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.dat |
2.4.3之前版本,中文、粤语、英文因为使用不同的Text文件,之间通过reinitOfflineEngineData 无法完成切换。必须反初始化,再初始化。2.4.3之后版本无需重新初始化。
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)setTTSLicenseWithAk:(NSString )ak AndSK:(NSString )sk; | ak | 用户从语音官网申请的apiKey | 无 | 设置认证信息 |
| sk | 用户从语音官网申请的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 | 正在合成的句子序号 |
注: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比特率 |
8.关于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。
9.权限
| 名称 | 用途 |
|---|---|
| Privacy - Microphone Usage Description | 获取麦克风权限播放 |
10. 日志打印
如希望打印日志,可使用以下指令:
1-(void)configureOnlineTTS{
2 // 鉴权库初始化配置 ak、sk 协议代理初始化
3 [AuthManager sharedInstance].temporaryTokenAndKeyDelegate = self;
4 // 语音合成SDK引擎日志级别 0 默认关闭 5 TTS全量日志
5 [BDSSpeechSynthesizer setLogLevel:BDS_PUBLIC_LOG_VERBOSE];
6 // 开启鉴权库SDK日志开关 默认关闭
7 [AuthManager sharedInstance].isAuthLog = YES;
8 // 鉴权sdk版本号打印
9 NSLog(@"Current SDK version: %@", [[BDSpeechTTSBaseKit sharedInstance] getTTSLibVersion]);
10 }
11. 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 | 无授权信息 |
合成常规错误码
| 返回错误码枚举名称 | 错误码 | 原因 |
|---|---|---|
| ERR_ONLINE_TTS_FAILED_GET_ACCESS_TOKEN | 14614527 | token获取失败 |
| ERR_OFFLINE_TTS_LICENSE_EXPIRED | 13959158 | 离线鉴权过期无效 |
| ERR_ONLINE_TTS_RESPONSE | 14680061 | 在线合成请求失败 |
| ERR_OFFLINE_ENGINE_NOT_LOADED | 13828094 | 离线引擎未加载 |
| ERR_OFFLINE_PARAM | 13820094 | 离线参数配置错误 |
| ERR_OFFLINE_ENGINE_LOAD_FAILED | 13828095 | 离线引擎加载失败 |
| ERR_DNS_FAILED | 14680063 | DNS解析失败 |
| ERR_OFFLINE_SYNTHESIS_FAILED | 13828092 | 离线合成失败 |
| ERR_OFFLINE_DATA_FILE_VERIFY_FAIL | 13820095 | 离线资源认证失败 |
| ERR_NO_INTERNET | 13172732 | 无网络 |
| ERR_ENGINE_BUSY | 13172733 | 合成引擎加载超时 |
| ERR_TEXT_TOO_LONG | 13172734 | 合成文本过长 |
| ERR_ONLINE_TTS_AUTH_CREDENTIALS_NOT_SET | 13172730 | 在线认证参数未设置 |
| ERR_OFFLINE_DATA_FILE_DETAIL_NOT_FOUND | 13820093 | 未找到离线引擎数据资源 |
| ERR_OFFLINE_TTS_FAILED_GET_LICENSE | 13959167 | 离线引擎获取鉴权失败 |
| ERR_SDK_UNINIT | 13164735 | SDK未初始化 |
| ERR_ONLINE_TTS_REQUEST | 14680062 | 在线合成请求异常 |
| ERR_OFFLINE_DATA_FILE_NOT_EXIST | 13820096 | 离线数据或文件资源不存在 |
| ERR_OFFLINE_ENGINE_MISSING_PARAM | 13828093 | 离线引擎参数缺少指定参数 |
| ERR_INVALID_PARAM | 13164736 | 参数不合法 |
| ERR_TEXT_TOO_SHORT | 13172735 | 合成文本过短 |
